我有一个内部网网络应用程序。
即使我已设置“Windows 身份验证 = 已启用”(并且所有其他身份验证都被禁用),当应用程序尝试访问资源时,它仍会被视为由运行应用程序池进程的同一用户运行。
这里是不是有问题,还是我没有正确理解 Windows 身份验证的工作原理?
如果我做过理解错了,还有其他方法可以让应用程序以客户端用户身份运行吗?
答案1
远程资源?如果使用 Kerberos,需要注意几点才能使其正常工作。要让 IIS 计算机在访问远程资源时模拟用户,它需要为用户生成委托级令牌。
如果应用程序池在自定义标识下运行(在这些情况下通常是这样),则帐户需要具有执行无约束委派的能力。在 Active Directory 用户和计算机中的帐户委派选项卡上,选择“信任此用户委派任何服务(仅 Kerberos)”。
如果您没有看到“委派”选项卡,则表示尚未为该帐户分配 SPN。需要先使用 setspn.exe 命令进行更正。
IIS 身份帐户需要在 IIS 服务器上具有“充当操作系统的一部分”权限(SetTCB 权限)。
下载委派配置工具并将其作为应用程序添加到网站上。它允许您浏览应用程序 URL 并生成一份报告,以确定委派是否配置正确。
代码还可以很容易地检查令牌类型以确定它是否是委托令牌,并将该信息记录到文件中。
摘要(Kerberos 协议转换和约束委派)
http://technet.microsoft.com/en-us/library/cc772683%28v=ws.10%29.aspx
如何:在 ASP.NET 2.0 中使用模拟和委托
http://msdn.microsoft.com/en-us/library/ff647404.aspx
DelegConfig 下载
https://www.iis.net/community/default.aspx?tabid=34&g=6&i=1887
http://channel9.msdn.com/posts/Troubleshooting-Kerberos-Delegation-Using-DelegConfig