WindowsIdentity - 组和声明之间的区别
WindowsIdentity - Difference between Groups and Claims
我正在尝试使用 SID-s 检查用户是否属于某些组。
我在使用 WindowsIdentity.Groups,但后来发现有时它不显示用户属于 Administrators 组。
搜索一段时间后,我发现 WindowsIdentity.Claims 工作正常(结果中也包括管理员组)。
我无法在 Claims.
上找到合适的文档
那么,WindowsIdentity 中的组和声明有什么区别,为什么组不显示管理员组而声明显示?
最后,我可以安全地使用 Claims 而不是 Groups 吗?
这是我的代码:
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));
组和声明之间存在差异。
- 组使用 WORKGROUP 和 AD
- 声明适用于 Active Directory 联合身份验证服务
Claims 是一种更复杂的检查用户身份的方法,因为 Claims 不仅针对 ADFS 存在,您还可以使用或创建额外的 claims token provider
当我们为 WindowsIdentity 调用 Groups 方法时,我们有限制:
In the claims-based identity model, claims play a pivotal role in the
federation process, They are the key component by which the outcome of
all Web-based authentication and authorization requests are
determined. This model enables organizations to securely project
digital identity and entitlement rights, or claims, across security
and enterprise boundaries in a standardized way.
因此,如果您只在 NTLM 中工作 - 您可以安全地使用组,但如果您想通过联合工作(例如 SharePoint、Google 等)- 您必须使用声明。声明包含组,但组不包含声明。
为了回答为什么看不到某个组的问题,您需要知道它的属性和位置。正如我在上面所写并给出 link,获取组列表有限制。但是 here 我发现了这个信息:
SID
Name
Description
S-1-5-32-544
Administrators
A built-in group. After the initial installation of the operating system, the only member of the group is the Administrator account. When a computer joins a domain, the Domain Admins group is added to the Administrators group. When a server becomes a domain controller, the Enterprise Admins group also is added to the Administrators group.
因此,如果您的本地管理员组被禁用 - 当您通过 WindowsIdentity 获取它时,即使用户包含在其中,您也看不到它。
我正在尝试使用 SID-s 检查用户是否属于某些组。
我在使用 WindowsIdentity.Groups,但后来发现有时它不显示用户属于 Administrators 组。
搜索一段时间后,我发现 WindowsIdentity.Claims 工作正常(结果中也包括管理员组)。
我无法在 Claims.
那么,WindowsIdentity 中的组和声明有什么区别,为什么组不显示管理员组而声明显示?
最后,我可以安全地使用 Claims 而不是 Groups 吗?
这是我的代码:
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));
组和声明之间存在差异。
- 组使用 WORKGROUP 和 AD
- 声明适用于 Active Directory 联合身份验证服务
Claims 是一种更复杂的检查用户身份的方法,因为 Claims 不仅针对 ADFS 存在,您还可以使用或创建额外的 claims token provider
当我们为 WindowsIdentity 调用 Groups 方法时,我们有限制:
In the claims-based identity model, claims play a pivotal role in the federation process, They are the key component by which the outcome of all Web-based authentication and authorization requests are determined. This model enables organizations to securely project digital identity and entitlement rights, or claims, across security and enterprise boundaries in a standardized way.
因此,如果您只在 NTLM 中工作 - 您可以安全地使用组,但如果您想通过联合工作(例如 SharePoint、Google 等)- 您必须使用声明。声明包含组,但组不包含声明。
为了回答为什么看不到某个组的问题,您需要知道它的属性和位置。正如我在上面所写并给出 link,获取组列表有限制。但是 here 我发现了这个信息:
SID | Name | Description |
---|---|---|
S-1-5-32-544 | Administrators | A built-in group. After the initial installation of the operating system, the only member of the group is the Administrator account. When a computer joins a domain, the Domain Admins group is added to the Administrators group. When a server becomes a domain controller, the Enterprise Admins group also is added to the Administrators group. |
因此,如果您的本地管理员组被禁用 - 当您通过 WindowsIdentity 获取它时,即使用户包含在其中,您也看不到它。