2013-11-01 109 views
2

我需要开发一个Web应用程序,用户有时需要使用不同的凭证执行操作(具体而言,它们是标准域用户,并且需要重置密码,解锁用户等)。 我已经计划创建2个使用特权凭证(通过使用ASP.NET模拟)运行的服务,以及用户访问和调用服务(通过使用Windows身份验证)的Web门户。IIS 7.5和ASP.NET凭证

在开始实施之前,我正在测试凭据,但是我感到有点困惑......如果我使用System.Security.Principal.WindowsIdentity.GetCurrent()来检查凭据,它在服务(DOMAIN \ admin)中看起来是正确的,而在门户网站(IIS \ APPPOL \ DefaultAppPool),而使用User.Identity.Name会在服务(DOMAIN \ user请求)中返回错误的凭证,但在门户(DOMAIN \ user请求)中正确。

为什么User.Identity.Name总是返回“最终”凭证?这似乎有点不一致......我错过了什么?

+2

就我个人而言,我从来没有完全理解'WindowsIdentity'的东西。相反,我使用[我的小小班](http://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a-User),这对ASP.NET很有效, –

+1

@UweKeim如果你不明白,我是否应该关注你的班级使用情况:-p,我开玩笑说,我一直认为一次性假冒背景的概括是一种疏忽。 – Jodrell

+1

请注意,如果您想使用模拟上下文在3台或更多台将会是多跳的服务器之间传递凭据,您需要设置SPN并使用Kerberos。 – Jodrell

回答

-1

使用会话不是User.Identity!

+0

是的......很好的陈述......你能更好地解释你的意思,并给我们几个理由? – Naigel