为什么 ASP.NET Windows 身份验证在我的测试服务器上工作不正确?

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 以获取用户信息。 (需要明确的是,运行 一个开发人员机器上的站点并从另一个开发人员的机器访问它仍然按预期工作。)这些是 Windows 7 台笔记本电脑 运行 IIS 下的站点(不是 Express ).

站点也被部署到测试服务器。测试服务器是 运行 Windows Server 2008 R2 并且(再次)站点是 IIS 下的 运行。当访问测试站点时,用户通过 Windows Auth 被识别并且不需要登录。但是,通过上述方法检索用户 SID returns 完全相同的 SID 每个用户。

可能有用的信息:

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

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