ASP.NET Windows 身份验证向应用程序返回错误的用户
Posted
技术标签:
【中文标题】ASP.NET Windows 身份验证向应用程序返回错误的用户【英文标题】:ASP.NET Windows Authentication returns wrong user to the application 【发布时间】:2018-05-07 09:45:05 【问题描述】:我有两个域 A
和 B
,每个域都有一个用户 Administrator
。两个管理员都有不同的 objectGuids、SID 和密码。 B
中有一个 IIS 8.5,配置了 Windows 身份验证(方法协商/NTLM,禁用扩展安全,启用内核模式身份验证)。域B
信任域A
(单向信任)。
当我现在以A\administrator
的身份打开 IE 并连接到B
中的 IIS 时,IIS 向我返回登录的用户是 B\administrator
(应该是 A\administrator
)。
这是我的代码:
public class UserController : ApiController
// GET api/<controller>
public User Get()
var usr = ((WindowsIdentity)User.Identity).User;
return new User()
Name = User.Identity.Name,
SID = usr==null?"":usr.ToString()
;
另外,IIS 日志中也是如此:
2018-05-07 09:19:10 172.17.41.31 GET /winauthtest/User - 80 B\Administrator 172.17.42.11 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+10.0;+WOW64;+Trident/7.0;+.NET4.0C;+.NET4.0E) - 404 0 2 31
这是预期行为还是错误,如果是错误,应在哪里报告错误?
我能否通过更改 Windows 身份验证设置来修复它,或者我还能做些什么?
您知道还有其他方法可以获取访问我的 IIS 的用户的真实 SID 吗?
【问题讨论】:
1.哪个用户用于运行应用程序(ApplicationPool 用户)? 2. 可以在web.config
中添加authentication
sn-p吗?
@Albert 应用程序池以ApplicationPoolIdentity
运行。
3.你试过enable impersonation
in web.config
吗?
@Albert 在集成管道模式下不允许。
@Albert 我切换到经典管道模式并将模拟更改为 true,但我仍然获得了错误的管理员帐户。
【参考方案1】:
我的天啊,我遇到了同样的问题,你的问题给了我一个关于为什么会发生这种情况的提示。因此,在 Chrome 中运行我的项目给了我错误的域,而在 Edge 中打开给了我正确的域。我使用 Windows 身份验证设置了我的项目,似乎 Chrome 在某种程度上阻止了 Windows 身份验证。 此链接提供了更多信息。 https://specopssoft.com/blog/configuring-chrome-and-firefox-for-windows-integrated-authentication/
最后,我的另一个同事遇到了同样的问题,我们无法正确解决。它会随机行为不端。似乎唯一可行的解决方案是重新启动 PC。
【讨论】:
您能否确认 IE 也提供了错误的域? @Alexander IE 工作正常。是 Chrome 有问题。以上是关于ASP.NET Windows 身份验证向应用程序返回错误的用户的主要内容,如果未能解决你的问题,请参考以下文章