C# HttpContext.User.Identity中缺少组内置管理员(SID:S-1-5-32-544)

C# HttpContext.User.Identity中缺少组内置管理员(SID:S-1-5-32-544),c#,asp.net-mvc,asp.net-mvc-4,iis,windows-authentication,C#,Asp.net Mvc,Asp.net Mvc 4,Iis,Windows Authentication,我正在使用windows身份验证,想知道登录的用户是否属于“内置管理员”组。我使用以下截取的代码在我的MVC4应用程序中找到这一点: // user identity var lIdentity = HttpContext.User.Identity as WindowsIdentity; // get all Group-Sids, the current users belongs to. var lSids = lIdentity.Groups; LSID

我正在使用windows身份验证,想知道登录的用户是否属于“内置管理员”组。我使用以下截取的代码在我的MVC4应用程序中找到这一点:

   // user identity
    var lIdentity = HttpContext.User.Identity as WindowsIdentity;

    // get all Group-Sids, the current users belongs to.
    var lSids = lIdentity.Groups;
LSID
中未列出内置管理员组(SID S-1-5-32-544)

但是当我在同一个用户上使用cmd
whoami/groups
时,它会显示SID S-1-5-32-544


如何在MVC4中发现登录用户是否属于内置管理员组。

您可以通过访问声明而不是组来实现这一点

以下是如何做到这一点:

var claims = lIdentity.Claims;
var claimSids = claims.Select(claim => claim.Value).ToList();

您是否正在运行提升的程序,即使用“以管理员身份运行”?如果没有,问题可能是
.Groups
只返回启用的组,而不是所有组,而
whoami
可能包括禁用的组。@Harry Johnston:非常感谢您的回答。我正在通过IIS运行一个Web应用程序。如何检查进程是否正在运行?哦,一个web应用程序。对不起,我没注意到。您看到的是客户端进行身份验证的上下文,而不是您自己的上下文。。。我不确定这对海拔有什么影响。不管怎样,一种解决方案是使用
TokenGroups
选项P/Invoke out以GetTokenInformation()。