[英]Why does ASP.NET Windows Authentication work incorrectly on my test server?
我的团队正在使用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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.