IIS Express配置:跨域使用Windows身份认证是否可行?
跨域Windows身份验证在IIS Express上的配置方案
核心结论
可以配置IIS Express让加入域B.A的计算机使用域C.B.A进行Windows身份验证,且正确配置后能够解决当前的认证失效问题。注意:该配置无法通过web.config完成,必须修改IIS Express的核心配置文件。
具体配置步骤
定位IIS Express的配置文件
找到项目对应的applicationhost.config文件:- 全局配置:
%USERPROFILE%\Documents\IISExpress\config\applicationhost.config - 项目专属配置(优先使用):项目根目录下的隐藏文件夹
.vs\config\applicationhost.config
- 全局配置:
修改Windows身份验证配置
在配置文件中找到对应项目的<location path="你的项目名称">节点,调整<system.webServer>下的<security>配置:<location path="你的项目名称"> <system.webServer> <security> <authentication> <!-- 禁用匿名访问 --> <anonymousAuthentication enabled="false" /> <!-- 启用Windows身份验证,并指定认证提供者 --> <windowsAuthentication enabled="true"> <providers> <add value="NTLM" /> <add value="Negotiate" /> </providers> <!-- 关闭扩展保护,避免跨域认证被拦截 --> <extendedProtection tokenChecking="None" /> </windowsAuthentication> </authentication> </security> </system.webServer> </location>优先配置
NTLM是因为跨域场景下Kerberos认证依赖域信任和SPN配置,NTLM的兼容性更强。确保域信任与网络连通性
- 确认域
B.A与C.B.A之间存在单向信任关系(B.A信任C.B.A),或者两台域控制器之间能够正常通信。 - 如果没有域信任,用户访问时需要手动输入
C.B.A\用户名格式的凭据,且目标机器能解析C.B.A域控制器的地址。
- 确认域
补充项目配置验证
确保项目的web.config中已正确启用Windows身份验证:
<system.web> <authentication mode="Windows" /> <authorization> <deny users="?" /> <!-- 拒绝匿名访问 --> </authorization> </system.web>
配置生效验证
完成配置后,重启IIS Express(关闭VS后重新打开项目),访问项目时输入C.B.A域的用户凭据,即可在WindowsPrincipal中获取到该用户所属的C.B.A本地组信息,认证功能恢复正常。
内容的提问来源于stack exchange,提问作者Xander Stoffels
相关产品推荐
相关产品推荐

