为什么ASP.NET Windows身份验证在我的测试服务器上运行不正常?

时间:2015-04-17 03:08:44

标签: c# iis active-directory asp.net-mvc-5 windows-authentication

我的团队正在使用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身份验证进行识别,无需登录。但是,通过上述方法检索用户SID会为每个用户返回完全相同的SID

潜在有用的信息:

  • this.Identity.User.Name 是每个用户的正确用户名。
  • "主人" SID看起来像" S-1-2-54-632"。 (我怀疑SID是一个敏感数字,但我改变了最后6位是安全的。)
  • 真实用户SID超过30位

这一个SID比在dev计算机上检索的用户SID短得多。此外,当我们尝试向Active Directory查询与此SID关联的用户时,未找到任何用户。除非得到任何其他解释,否则我认为这与测试服务器上的IIS(或可能是AD)设置有关。我对IIS配置的经验有限,而AD几乎为零。无论如何,我已尝试在IIS中调整网站的一些设置,但结果仍然相同。什么可能导致测试服务器在这方面表现不同?

1 个答案:

答案 0 :(得分:1)

我认为您应该使用SecurityIdentifier sid = wi.User;而不是SecurityIdentifier sid = wi.Owner;用户也是一个拥有其所有者的窗口对象 - 另一个用户或组。因此,在您的测试服务器上,您可能正在接收拥有当前用户对象的组的SID。