代码:
System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext =
((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
//access network resources.
impersonationContext.Undo();
的web.config:
<authentication mode="Windows">
</authentication>
<identity impersonate="true"
userName="user"
password="password"></identity>
从web.config文件中可以清楚地看到,该应用程序以模拟模式运行。我需要临时模拟访问网络资源。我这样做如上所示。
如果我浏览到服务器上安装的本地IE上的网站,但是当我从我的PC或任何其他PC访问该应用程序时,我在服务器上工作正常,我会拒绝访问。
顺便说一下,这都属于企业域环境。因此,在这两种情况下,IE都会传递有效的经过身份验证的令牌。
任何想法发生了什么。感谢。
答案 0 :(得分:3)
您需要确保服务器将应用程序中的模拟安全上下文委派给另一台服务器(您提到的网络资源)。
我很确定它在您登录服务器时有效,因为它使用的是您直接登录的安全上下文,而不是应用程序中存在的模拟上下文。
我不记得配置的细节,但我知道它被称为委托或“Kerberos Double Hop”。 “约束委派”是指您配置时只允许一种类型的委派。 IE,您的应用只允许在与其他特定服务器上的Active Directory(端口xyz)通信时委派安全上下文 - 否则不会。
请参阅Understanding Kerberos Double Hop
请参阅DelegConfig - 它有助于配置委派。