Подтвердить что ты не робот

Ошибка аутентификации Windows в IIS 7.5

Я создаю простое внутреннее приложение для своей компании, и для обеспечения безопасности требуется проверка подлинности Windows. Все остальные режимы аутентификации отключены. Я застрял в ситуации, когда Internet Explorer запрашивает учетные данные 3 раза, а затем с этой ошибкой выходит:

Не авторизовано

Ошибка HTTP 401. Требуемый ресурс требует аутентификации пользователя.

Затем я создал веб-сайт с голыми костями, чтобы проверить это. Я создал новый сайт в IIS, поместил его на свой собственный порт (: 8111, выбранный случайным образом), разместил там один статический файл "default.htm", отключил анонимную аутентификацию, а затем активировал проверку подлинности Windows. Все остальное осталось по умолчанию. Номер порта был назначен, потому что у нас есть несколько сайтов на этом компьютере, которые используют один и тот же IP-адрес.

Вот несколько сценариев:

  • Просмотр с самого веб-сервера, на http:// localhost: 8111/works штраф

  • Просмотр с другого компьютера на http:// ServerIPaddress: 8111/ отлично работает

  • Просмотр с другого компьютера на http:// Имя_сервера: 8111/FAILS (запрашивает учетные данные 3 раза, затем дает ошибку 401)

Я искал онлайн и пытался найти решение без везения. Либо я его не нашел, либо я недостаточно хорошо понимаю, что я читаю. Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

Просто разработал решение с помощью коллеги через 2 дня борьбы с этой проблемой. Вот что он написал:

Есть 2 провайдера для проверки подлинности Windows (переговоры и NTLM). При настройке аутентификации веб-сайта на проверку подлинности Windows, в то время как проверка подлинности Windows выделена, нажмите "Провайдеры" ссылку на правой панели или диспетчер IIS и переместить NTLM в начало. От default Negotiate находится сверху, поэтому вы получаете аутентификация.

Ответ 2

Ошибка 401.1 при просмотре веб-сайта, использующего встроенную проверку подлинности.

Решение

Отключить проверку обратной связи

* In Registry Editor, locate and then click the following registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA

* Right-click Lsa, point to New, and then click DWORD Value.
* Type DisableLoopbackCheck, and then press ENTER.
* Right-click DisableLoopbackCheck, and then click Modify.
* In the Value data box, type 1, and then click OK.

http://support.microsoft.com/kb/896861

Ответ 3

Если он по-прежнему не работает после перемещения NTML в начало списка поставщиков, попробуйте полностью удалить Negotiate, так что осталось только NTML.

Это исправило это для меня - перемещение NTML в начало не помогло в Windows Server 2012 и IIS 8.5. Я нашел решение в следующей проблеме stackoverflow: IIS 7.5 Аутентификация Windows не работает в Chrome

Ответ 4

Я лично рекомендую НЕ отключать loopbackcheck глобально на вашем сервере (IE: Do NOT установить DisableLoopbackCheck в значение 1 в вашем реестре). Это уязвимость системы безопасности. Пожалуйста, отключите только известные хосты.

Здесь функция Powershell, чтобы вы указывали в правильном направлении.

function Add-LoopbackFix
{
    param(
        [parameter(Mandatory=$true,position=0)] [string] $siteHostName
    )

    $ErrorActionPreference = "Stop"

    Write-Host "Adding loopback fix for $siteHostName" -NoNewLine

    $str = Get-ItemProperty -Name "BackConnectionHostNames" -path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0' -erroraction silentlycontinue

    if ($str) { 
        if($($str.BackConnectionHostNames) -like "*$siteHostName*")
        {
            Write-Host "`tAlready in place" -f Cyan
        } else{
            $str.BackConnectionHostNames += "`n$siteHostName"
            Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0" -Name "BackConnectionHostNames" -Value $str.BackConnectionHostNames 
            Write-Host "`tDone" -f Green
        }
    } else {
        New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0" -Name "BackConnectionHostNames" -Value $siteHostName -PropertyType "MultiString" 
        Write-Host "`tDone" -f Green
    }

    Write-Host "`tnote: we are not disabling the loopback check all together, we are simply adding $siteHostName to an allowed list." -f DarkGray
}
> Add-LoopbackFix "ServerName"

Источник

Ответ 5

Прошло некоторое время с тех пор, как этот вопрос был задан, но я знаю, что многие люди сталкиваются с этим много. Более правильное исправление для этого описано здесь: Аутентификация в режиме ядра. Мы реализовали это несколько месяцев назад, и он отлично работает.

Еще одно полезное объяснение здесь: БОЛЬШЕ 2008 И КЕРБЕРОС: АУТЕНТИФИКАЦИЯ ОСТАЛОСЬ, СЧЕТ ПРИБЛИЗИТЕЛЬНОГО БАССЕЙНА ВЗЯТЬ

Чтобы применить к одному сайту:

cd %windir%\system32\inetsrv
set SiteName=TheSiteName
appcmd.exe set config "%SiteName%" -section:system.webServer/security/authentication/windowsAuthentication /useKernelMode:"True" /useAppPoolCredentials:"True" /commit:apphost

Или применить ко всем сайтам:

%windir%\system32\inetsrv\appcmd.exe set config -section:windowsAuthentication /useAppPoolCredentials:"True" /commit:apphost