asp.net WindowsImpersonationContext功能(asp.net Wind

2019-09-21 05:09发布

任何人都可以请解释下面的线的功能:

WindowsIdentity wId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext wIdCon = wId.Impersonate();

即使用与IIS基本身份验证的POST方法和工作正常。 然而,如果IIS身份验证设置为Windows上面不再起作用。

我们根本太多的代码转储的一个例子。

Answer 1:

要将呼叫Impersonate()使IIS假装是从该点发出请求的用户。 这是许多原因是有用的,主要的是,如果请求用户没有被拒绝访问的后续代码才有效。

因为该网站给出的用户名和密码,因此可以作为登录用户这适用于基本的。 Windows身份验证失败,原因是其使用Kerberos,并且只给一张票闯民宅的用户 - 而不是用户的密码。

要获得Windows身份验证工作,你需要允许网站帐户(一个是为您的应用程序池标识)来模拟用户。 这在他们的帐户的Active Directory中的委派选项卡中完成。

如果他们没有一个委派选项卡,你首先需要添加一个SPN(服务主体名称)。 该SPN让客户知道哪个帐户正在运行的网站,因此如何加密到Kerberos票据使得网站可以打开它。 它允许客户端和服务器不说话每隔告诉对方自己的密码,只要他们都信任的第三方(标准MS执行AD服务器)的所有方式。

这是被称为Kerberos的双跳一个共同的问题的一部分。 这一切来源于这样的事实了Kerberos从客户到网站的作品(网站知道有足够的了解,客户端的用户凭据服务网页等),但是从网站的资源,它需要网络用户凭据第二跳没有被给予他们的网站账户不允许。 欲了解更多信息请参阅MSDN上的了解,Kerberos的双跳

编辑:

尝试运行setspn /q http/machine_name_or_fqdn

setspn /q http/mywebbox
setspn /q http/mywebbox.my.domain.com

哪些用户在这些SPN的坚决反对? IIS需要有运行为相同的用户SPN的网站的应用程序池。

一旦你确认了,我建议使用小提琴手工具来检查什么是客户端和服务器之间传递-确认是得到一个401错误响应(即需要进行身份验证),并立即与具有请求重试有效的Kerberos头。

一旦你得到了客户端与服务器通过Kerberos说话,你需要确保应用程序池帐户在AD被设置为允许委派代表用户。



文章来源: asp.net WindowsImpersonationContext function