有没有办法在IIS 7.5中使用PowerShell添加/删除/重新排序Windows身份验证提供程序?
我被告知,并且没有发现相反的证据,当与Windows Auth一起使用时,NTLM提供程序比协商更快。这可能与Silverlight 4,.NET 3.5,Windows 2003 Active目录和IIS6结合使用,也可能不兼容。
由于此声明已告知我,我们已升级到IIS7.5(Server 2008R2),SilverLight 5和.NET 4.5,但AD仍在2003功能级别运行。
我的目标是始终确保在IIS 7.5中已启用的提供程序列表中首先列出NTLM提供程序。
由于
答案 0 :(得分:16)
可以使用powershell执行此操作。 对于我正在使用的场景,我想要配置特定站点而不是更改默认设置。 默认情况下,这在web.config中是不可能的,因为所有身份验证设置都设置为overrideModeDefault =" Deny"。这意味着需要直接对applicationhost.config进行更改。
我正在寻找的最终结果是:
<location path="MySite">
<system.webServer>
<security>
<authentication>
<anonymousAuthentication enabled="false" />
<windowsAuthentication enabled="true">
<providers>
<clear />
<add value="NTLM" />
<add value="Negotiate" />
</providers>
</windowsAuthentication>
</authentication>
</security>
</system.webServer>
</location>
通过执行清除,然后按优先级顺序重新添加提供商。
首先禁用匿名身份验证并启用Windows身份验证我使用以下命令:
Set-WebConfiguration system.webServer/security/authentication/anonymousAuthentication -PSPath IIS:\ -Location MySite -Value @{enabled="False"}
Set-WebConfiguration system.webServer/security/authentication/windowsAuthentication -PSPath IIS:\ -Location MySite -Value @{enabled="True"}
然后添加<clear />
标记:
Remove-WebConfigurationProperty -PSPath IIS:\ -Location MySite -filter system.webServer/security/authentication/windowsAuthentication/providers -name "."
最后,按顺序添加提供者:
Add-WebConfiguration -Filter system.webServer/security/authentication/windowsAuthentication/providers -PSPath IIS:\ -Location MySite -Value NTLM
Add-WebConfiguration -Filter system.webServer/security/authentication/windowsAuthentication/providers -PSPath IIS:\ -Location MySite -Value Negotiate
答案 1 :(得分:3)
您只能启用和禁用以下部分中提供的身份验证方法:
这是因为system.webServer/authentication
不是一个集合,不支持add
和remove
配置元素。查看IIS配置模式文件:
C:\Windows\System32\inetsrv\config\schema\IIS_schema.xml
搜索system.webServer/security/authentication
,您会看到该部分的每个子元素都已明确定义,并且system.webServer/security/authentication
本身没有定义。
关于排序,尝试更改身份验证方法顺序没有区别。例如,按以下顺序(Basic在Windows Authenticaton之前):
<system.webServer>
<security>
<authentication>
<basicAuthentication enabled="true" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
当我交换订单时:
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<basicAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
...将始终使IIS在401挑战中向浏览器发送以下标题(使用Fiddler捕获):
HTTP/1.1 401 Unauthorized
Server: Microsoft-IIS/7.5
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="172.16.3.87"
在上面,IIS向浏览器指示它支持Kerberos,NTLM或Basic身份验证方法。开箱即用,这些身份验证方法始终按此顺序排列,无论浏览器供应商如何(我尝试过IE和Chrome)。
根据我对Fiddler的观察,IE和Chrome都尝试使用该浏览器支持的第一种方法进行协商。即在这种情况下,IE和Chrome都协商了Kerberos身份验证:
GET http://172.16.3.87:81/ HTTP/1.1
Host: 172.16.3.87:81
Connection: keep-alive
Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==
如果你base64解码它所说的Negotiate
值:
NTLMSSP
可以通过执行以下操作删除Kerberos(Negotiate)方法:
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true">
<providers>
<remove value="Negotiate" />
</providers>
</windowsAuthentication>
<basicAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
但是,尝试通过执行以下操作来更改这些顺序将无效:
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true">
<providers>
<remove value="Negotiate" />
<remove value="NTLM" />
<add value="NTLM" />
<add value="Negotiate" />
</providers>
</windowsAuthentication>
<basicAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
您仍会按以下顺序发送WWW-Authenticate:
标题:
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="172.16.3.87"