C# WindowsIdentity-组和声明之间的差异

C# WindowsIdentity-组和声明之间的差异,c#,.net,windows-identity,C#,.net,Windows Identity,我试图使用SID-s检查用户是否属于某些组 我正在使用,但后来注意到,有时它并不表示该用户属于Administrators组 搜索了一段时间后,我发现它可以正常工作(包括结果中的admin组)。 我无法在上找到适当的文档 那么,WindowsIdentity中的组和声明之间有什么区别,为什么组不显示administrators组而声明显示administrators组? 最后,我可以安全地使用声明而不是组吗 以下是我的代码: var wi = WindowsIdentity.GetCurrent

我试图使用SID-s检查用户是否属于某些组

我正在使用,但后来注意到,有时它并不表示该用户属于Administrators组

搜索了一段时间后,我发现它可以正常工作(包括结果中的admin组)。
我无法在上找到适当的文档

那么,WindowsIdentity中的组和声明之间有什么区别,为什么组不显示administrators组而声明显示administrators组?
最后,我可以安全地使用声明而不是组吗

以下是我的代码:

var wi = WindowsIdentity.GetCurrent();

var sidToFind = "S-1-5-32-544"; // Hardcoded the sid of administrators group for demo, but in general this is a parameter of a function on my side

// This will NOT include the sid S-1-5-32-544
var groupSids= wi.Groups
    .Where(item => item.Value == sidToFind);

// This will include the sid S-1-5-32-544 and also all the other results that Groups provides.
var claimSids = wi.Claims
    .Where(item => item.Value == sidToFind));

群体和主张之间存在差异

  • 组与工作组和AD一起工作
  • 索赔与Active Directory联合身份验证服务一起使用
声明是一种更复杂的检查用户身份的方法,因为声明不仅存在于ADF中,您还可以使用或创建其他声明

当我们为WindowsIdentity调用Groups方法时,我们有以下限制:

//

在基于声明的身份模型中,声明在身份验证中起着关键作用 联邦过程中,他们是关键的组成部分,由其产生的结果 所有基于Web的身份验证和授权请求都是 决心此模型使组织能够安全地进行项目管理 数字身份和权利要求,或跨安全 以标准化的方式和企业边界

因此,如果您仅在NTLM中工作—您可以安全地与组一起工作,但如果您希望通过联合(例如SharePoint、Google等)工作—您必须使用声明。声明包含组,但组不包含声明

为了回答为什么看不到某个组的问题,您需要知道它的属性和位置。正如我在上面所写并给出的链接,获取组列表有一些限制。但我发现了以下信息:

希德 名称 描述 S-1-5-32-544 管理员 一个内在的群体。首次安装操作系统后,组中唯一的成员是管理员帐户。当计算机加入域时,域管理员组将添加到管理员组。当服务器成为域控制器时,企业管理员组也将添加到管理员组。
如果您想通过SIDs检查特定用户是否属于某些组,将提供帮助。