Ben*_*ndt 24 iis-7 windows-authentication windows-server-2008
我正在为我的公司构建一个简单的内部应用程序,它需要Windows身份验证才能实现安全性.禁用所有其他身份验证模式.我陷入了这样的情况,即Internet Explorer会提示输入凭据3次,然后失败并出现此错误:
未经授权
HTTP错误401.请求的资源需要用户身份验证.
然后我创建了一个简单的网站来测试它.我在IIS中创建了一个新站点,将其放在自己的端口(:8111,随机选择),在其中放置一个静态"default.htm"文件,禁用匿名身份验证,然后启用Windows身份验证.其他所有内容都保留默认设置.分配端口号是因为我们在此计算机上有多个站点共享相同的IP.
以下是一些场景:
从Web服务器本身浏览到http:// localhost:8111 /工作正常
从另一台计算机浏览到http:// ServerIPaddress:8111 /工作正常
从另一台计算机浏览到http:// ServerName:8111/FAILS(请求凭据3次,然后给出401错误)
我一直在网上搜索并试图找到一个没有运气的解决方案.要么我没有找到它,要么我不太清楚我在读什么.任何帮助将不胜感激.
Ben*_*ndt 43
在与此问题斗争2天后,在同事的帮助下制定出解决方案.这是他写的:
Windows身份验证(Negotiate和NTLM)有2个提供程序.将网站身份验证设置为Windows身份验证时,如果突出显示Windows身份验证,请单击右窗格或IIS管理器上的"提供者"链接,然后将NTLM移至顶部.默认情况下,Negotiate处于最顶层,这就是您获得身份验证提示的原因.
leo*_*rzz 18
浏览使用集成身份验证的网站时出现错误401.1.
解
禁用环回检查
* In Registry Editor, locate and then click the following registry key:
Run Code Online (Sandbox Code Playgroud)
HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \控制\ 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.
Run Code Online (Sandbox Code Playgroud)
http://support.microsoft.com/kb/896861
如果在提供程序列表中将NTML移动到顶部后仍然无效,请尝试完全删除Negotiate,这样只剩下NTML.
为我修复它 - 将NTML移到顶部对Windows Server 2012和IIS 8.5没有帮助.我在以下stackoverflow问题中找到了解决方案:IIS 7.5 Windows身份验证在Chrome中不起作用
我个人建议不要在服务器上全局禁用环回检查(即:不要在注册表中设置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
}
Run Code Online (Sandbox Code Playgroud)
> Add-LoopbackFix "ServerName"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44054 次 |
| 最近记录: |