Использование проверки подлинности Windows в ASP.NET

Я пытаюсь использовать проверку подлинности Windows в моем приложении ASP.NET. Всякий раз, когда я пытаюсь просмотреть приложение, оно отправляет меня на страницу входа. Как я могу заставить это работать без необходимости вручную входить через браузер?

web.config

  <system.web>
    <authentication mode="Windows"></authentication>
    <anonymousIdentification enabled="false"/>
    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization>
    <customErrors mode="Off"></customErrors>
    <identity impersonate="true"></identity>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime />
  </system.web>

ошибка после обновления IIS Express

Most likely causes:
No authentication protocol (including anonymous) is selected in IIS.
Only integrated authentication is enabled, and a client browser was used that does not support integrated authentication.
Integrated authentication is enabled and the request was sent through a proxy that changed the authentication headers before they reach the Web server.
The Web server is not configured for anonymous access and a required authorization header was not received.
The "configuration/system.webServer/authorization" configuration section may be explicitly denying the user access.

ApplicationHost.config

<authentication>
  <anonymousAuthentication enabled="false" />
  <basicAuthentication enabled="false" />
  <clientCertificateMappingAuthentication enabled="false" />
  <digestAuthentication enabled="false" />
  <iisClientCertificateMappingAuthentication enabled="false">
  </iisClientCertificateMappingAuthentication>

  <windowsAuthentication enabled="true">
    <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>
</authentication>

5 ответов

Решение

Я смог заставить его работать, удалив поставщика переговоров.

  <windowsAuthentication enabled="true">
    <providers>
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>

Проверка подлинности Windows с помощью IISExpress

Обновите ваш web.config

Убедитесь, что ваш файл web.config включает аутентификацию Windows, а также запрещает анонимную аутентификацию. HttpContext.Current.User.Identity.Name будет пустым, если приложение перейдет к анонимной аутентификации. Ваш конфиг должен выглядеть примерно так:

<authentication mode="Windows" />
<authorization>
    <deny users="?"/>
</authorization>

Ошибка 401.2 Несанкционированный Иногда вы можете получить ошибку 401.2 Unauthorized: Logon failed due to server configuration error, Если вы это сделаете, убедитесь, что у вас есть разрешение на просмотр этого каталога или страницы на основе предоставленных вами учетных данных. Также убедитесь, что у вас включены методы аутентификации на веб-сервере.

Обновление applicationhost.config

Вы также можете обнаружить, что вам нужно обновить файл applicationhost.config IISExpress (не беспокойтесь - я тоже этого не знал). По сути, это версия файла средства настройки IIS, где вы можете настроить сам веб-сервер. Найти файл applicationhost.config может быть сложно. Это может быть в:

% USERPROFILE%\ Документы \iisexpress\ Config\ ApplicationHost.config

или же

%userprofile%\ мои документы \iisexpress\config\applicationhost.config

Как только вы найдете его, обновите следующие строки (обращая особое внимание на enabled=true):

<windowsAuthentication enabled="true">
    <providers>
        <add value="Negotiate" />
        <add value="NTLM" />
    </providers>
</windowsAuthentication>

Это статья

Мы используем проверку подлинности Windows практически для всех наших приложений для интрасети, включая SharePoint. Сотрудники должны войти в систему, если их браузер не отправляет свои учетные данные Windows автоматически на сайт.

В IE это вопрос конфигурации браузера. Я думаю, что есть также способы настроить Chrome и Firefox для автоматической отправки входа в Windows. Я думаю, что Chrome будет следовать интернет-настройкам Window (на клиенте) так же, как IE. Попробуйте установить для параметров аутентификации пользователя значение "Автоматический вход с использованием текущего имени пользователя и пароля".

Смотрите скриншот ниже для иллюстрации, где это.

Также обратите внимание, что для этого браузер пользователя отправляет в приложение токен Windows. Приложение должно понимать и доверять источнику этого токена, и это будет работать с поддержкой "домена", в котором находятся пользователь и приложение. Я думаю, что он будет работать на одной машине (пока вы отлаживаете), но если вы хотите, чтобы это работало на нескольких компьютерах в сети, вам нужно заняться созданием домена. Типичным способом создания домена является Active Directory.

Дай мне знать.

При отладке моего веб-приложения в VS 2017 я обнаружил, что мне нужно обновить [путь решения]\. Vs\config\applicationhost.config. Я заменил раздел аутентификации на:

        <authentication>
          <anonymousAuthentication enabled="false" userName="" />

          <basicAuthentication enabled="false" />

          <clientCertificateMappingAuthentication enabled="false" />

          <digestAuthentication enabled="false" />

          <iisClientCertificateMappingAuthentication enabled="false">
          </iisClientCertificateMappingAuthentication>

          <windowsAuthentication enabled="true">
            <providers>
              <add value="Negotiate" />
              <add value="NTLM" />
            </providers>
          </windowsAuthentication>

        </authentication> 

Больше здесь: /questions/47654848/iis-express-windows-autentifikatsiya/47654862#47654862

  1. Откройте IIS (Windows + R 'inetmgr')
  2. Выберите сервер IIS (корневой узел)
  3. Двойной щелчок - "Аутентификация"
  4. Проверка подлинности Windows - щелкните правой кнопкой мыши и выберите "Включить"
  5. Проверка подлинности с помощью форм - щелкните правой кнопкой мыши и выберите "Отключить"
  6. Перезагрузите сервер IIS
Другие вопросы по тегам