[英]Impersonation only works when a user is specificed
我在使用没有指定用户的模拟访问Web服务时遇到问题。
Works: <identity impersonate="true" userName="DOMAIN\\USERNAME" password="MyPassword" /
>
不起作用
<identity impersonate="true" />
在调试时,我使用下面的代码来验证正在使用的域和用户名,它们是。
System.Security.Principal.WindowsIdentity.GetCurrent().Name;
这是我的web.config的更多内容
<authentication mode="Windows" />
<identity impersonate="true" />
<authorization>
<allow users="*" />
<deny users="?"/>
</authorization>
我正在登录提示,图片如下
任何想法为什么它只有在我在web.config中指定用户时才有效? 我使用与<identity impersonate="true" userName="DOMAIN\\USERNAME" password="MyPassword" /
>相同的Domain\\Username
和密码登录。 我已经尝试过多个帐户,当我将他们的凭据放在web.config
时它们都可以正常工作但是没有一个工作时将身份设置为<identity impersonate="true" />
并登录。
编辑远程服务器返回错误:(403)禁止。
编辑2一切正常,在调试时,并在包含它托管的IIS的服务器上点击服务,我尝试了多个帐户,他们都工作。 一切都在同一个领域
请注意https://support.microsoft.com/en-us/kb/306158中的以下文本
模拟ASP.NET应用程序的所有请求的特定用户
若要模拟特定用户对ASP.NET应用程序的所有页面上的所有请求,您可以在该应用程序的Web.config文件的标记中指定userName和password属性。 例如:注意在线程上模拟特定用户的进程的标识必须具有“作为操作系统的一部分”权限。 默认情况下,Aspnet_wp.exe进程在名为ASPNET的计算机帐户下运行。 但是,此帐户没有模拟特定用户所需的权限。 如果您尝试模拟特定用户,则会收到错误消息。 此信息仅适用于.NET Framework 1.0。 .NET Framework 1.1不需要此权限。
若要解决此问题,请使用下列方法之一:将“作为操作系统的一部分”权限授予ASPNET帐户(权限最少的帐户)。
注意虽然您可以使用此方法来解决此问题,但Microsoft不建议使用此方法。 将运行Aspnet_wp.exe进程的帐户更改为Machine.config文件的配置部分中的系统帐户。
您可以将Aspnet_wp.exe进程设置为以您尝试模拟以获得所需权限的用户身份运行。
这也在前面讨论过: 你如何在.NET中进行模拟?
它可能是NTLM双跳认证问题。 简而言之,确保正确设置Kerberos SPN,以便使用它而不是NTLM。 这篇MSDN博客文章有很好的解释。
或者,基本或表单身份验证也将实现您希望实现的目标。 这是因为应用程序将拥有用户的凭据,如果配置正确,可以使用它们来访问后端资源。
您可能还想查看Kerberos委派。 它是一种通过它的SPN将第二跳限制为仅一个资源的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.