这比寻求帮助更多的是好奇,但我注意到,当使用 PrincipalPermission 并验证用户是 Active Directory 中特定组的一部分时,它不会使用真正的组名,而是针对 Windows 2000 之前的组进行验证取而代之的名字。通常这不会产生影响——除非有人碰巧使这些值不同。
谁能想到.Net API 为什么会使用该组名而不是“真实”名称?这给我带来了数小时的悲痛和一点点运气,最终弄明白了这一切。
这比寻求帮助更多的是好奇,但我注意到,当使用 PrincipalPermission 并验证用户是 Active Directory 中特定组的一部分时,它不会使用真正的组名,而是针对 Windows 2000 之前的组进行验证取而代之的名字。通常这不会产生影响——除非有人碰巧使这些值不同。
谁能想到.Net API 为什么会使用该组名而不是“真实”名称?这给我带来了数小时的悲痛和一点点运气,最终弄明白了这一切。
我会假设(没有自己测试和尝试过)PrincipalPermission 属性将使用 Active Directory 中的“sAMAccountName”作为用户和组名(例如“Users”或“JohnDoe”)而不是“专有名称”(DN)您可能期望(“CN=Users”、“CN=John Doe”)。
这背后的原因很可能是您正在处理的场景,例如独立服务器或 NT4 域。在这些情况下,您根本没有任何基于 AD 的专有名称 - 但您确实拥有 SAM 帐户名称。
所以从某种意义上说,这乍一看可能有点令人惊讶——但在我看来,使用那些 SAM 帐户名称(AD 之前的名称)确实有意义——你不同意吗?
马克
原因是保证安全。该samAccountName
属性在 NTDS 域中的所有安全主体对象中都是唯一的。如果改用其他名称属性,攻击者可以通过在不同的组织单位或容器中创建具有相同名称的其他用户/组来轻松解决安全权限问题。