【发布时间】:2013-11-01 15:19:25
【问题描述】:
我需要开发一个网络应用程序,用户有时需要使用不同的凭据执行操作(特别是他们是标准域用户,他们需要重置密码、解锁用户等)。 我计划创建 2 个使用特权凭据运行的服务(通过使用 ASP.NET 模拟),以及一个用户访问和调用服务的 Web 门户(通过使用 Windows 身份验证)。
在开始实施之前,我正在测试凭据,但我有点困惑...如果我使用 System.Security.Principal.WindowsIdentity.GetCurrent() 来检查凭据,它在服务 (DOMAIN\admin) 中似乎是正确的,而在门户网站 ( IIS\APPPOL\DefaultAppPool),在使用 User.Identity.Name 时在服务中返回错误的凭据(域\用户执行请求)但在门户中正确(域\用户执行请求)。
为什么User.Identity.Name 不总是返回“最终”凭据?好像有点语无伦次……是不是漏了什么?
【问题讨论】:
-
就我个人而言,我从来没有完全理解过
WindowsIdentity的东西。相反,我使用my small little class,它也非常适用于 ASP.NET -
@UweKeim 如果您不理解,我是否应该担心使用您的课程:-p,我开玩笑说,我一直认为一次性模拟上下文的省略是一种疏忽。
-
请注意,如果您想使用模拟上下文在多跳的 3 个或更多服务器之间传递凭据,您需要设置 SPN 并使用 kerberos。