我的团队正在使用Windows身份验证构建一个新的内部ASP.NET MVC 5应用程序。当我们需要检索用户的SID时,我们会像这样:
public BaseController : Controller
{
protected SecurityIdentifier GetSid()
{
var wi = (WindowsIdentity)this.User.Identity;
SecurityIdentifier sid = wi.Owner;
return sid;
}
}
在我们本地的开发机器上,这非常完美。我们能够检索用户的SID并将其存储,并(随后)使用SID向Active Directory查询用户信息。(显然,在一个开发人员的计算机上运行该站点并从另一位开发人员的计算机访问该站点仍然可以正常工作。)这些是在IIS(不是Express)下运行该站点的Windows 7便携式计算机。
该站点也已部署到测试服务器。测试服务器运行Windows Server 2008 R2,并且该站点(再次)在IIS下运行。访问测试站点时,将通过Windows Auth识别用户,并且不需要登录。但是,通过上述方法检索用户SID将为每个用户返回完全相同的SID。
可能有用的信息:
this.Identity.User.Name
是每个用户的正确用户名。这个SID比在dev机器上检索到的用户SID短得多。此外,当我们尝试向Active Directory查询与此SID关联的用户时,找不到用户。除非有其他解释,否则我认为这与测试服务器上的IIS(或AD)设置有关。我对IIS配置的经验有限,而对AD的经验几乎为零。无论如何,我尝试在IIS中调整站点的一些设置,但结果仍然相同。在这方面,什么原因可能导致测试服务器的行为有所不同?
我认为您应该使用拥有一个所有者(另一个用户或组)的窗口对象(SecurityIdentifier sid = wi.User;
而不是SecurityIdentifier sid = wi.Owner;
用户)来代替。因此,在您的测试服务器上,您可能正在接收拥有当前用户对象的组的SID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句