当前位置: 首页 > 编程语言 > C#

检查.Net4.5中的ActiveDirectory组成员身份Share

时间:2023-04-10 11:10:49 C#

CheckingActiveDirectoryGroupMembershipin.Net4.5操作。听起来很简单,而且我发现没有其他问题可以解决我遇到的问题。第一次尝试:[Authorization]经典的方法是简单地点击控制器操作上的Authorize数据注释属性然后去镇上:[Authorize(Roles=@"domaingroupName1")]没有骰子。系统提示我输入凭据。通常这意味着Windows身份验证配置有问题,但设置工作正常:(1)HttpContext.User是一个WindowsPrincipal对象,并且(2)我已经验证另一个已知的组名有效。第二次尝试:IsInRole()下一步是走更老式的路线并使用IPrincipal.IsInRole(),同样,一个返回false,另一个返回true。varwp=(WindowsPrincipal)用户;//falsevarinGroup1=wp.IsInRole(@"domaingroupName1");//truevarinGroup2=wp.IsInRole(@"domaingroupName2");难倒...所以我打了我的系统书呆子,我们仔细检查一切。用户是组成员?是的。组名拼写是否正确?是的。下一步是阻止SID。第三次尝试:在集群中搜索身份在我的控制器中,我检查WindowsIdentity并查看组集合中有问题的组的SID:varwi=(WindowsIdentity)wp.Identity;vargroup=wi.Groups.SingleOrDefault(g=>g.Value=="group1-sidValue");组变量是一个SecurityIdentifier对象。因为它不为空,所以我们可以确定当前用户是[Authorize()]或IsInRole()尝试无法确认的组的成员。第四次尝试:DirectoryServices.AccountManagement此时,我发疯了,添加了对AccountManagementAPI的引用。我按名称和SID搜索GroupPrincipal的域上下文:varpc=newPrincipalContext(ContextType.Domain,"domain");vargp1byName=GroupPrincipal.FindByIdentity(pc,"groupName1")vargp1bySid=GroupPrincipal.FindByIdentity(pc,IdentityType.Sid,"group1-sidValue");对于同一个对象,两个组主体变量都已经成熟,我通过监视变量验证了主体的成员集合包含一个UserPrincipal对象,该对象具有与HttpContext上的当前WindowsPrincipal相同的SID。问题:我到底错过了什么?当通过对象探索清楚地表明用户是该给定组的有效成员时,为什么这两种角色检查方法都失败了?事实上,一组检查正常而另一组在这一点上似乎并不是最奇怪的部分。答:基本上这是WindowsIdentity和NTAccount(两者都是System.Security.Principal)和最终实际ActiveDirectory条目之间的转换问题。针对AD验证WindowsIdentity时,如果您想使用Sam或Sid以外的任何东西,则需要使用System.DirectoryServices.AccountManagement。警告:在.Net4.5中,安全主体包括声明,但这不符合上下文。详细解释:在经过Windows身份验证的Web应用程序中,HttpContext.User是一个包装底层WindowsIdentity的WindowsPrincipal对象。对于大多数意图和目的,WindowsIdentity只有两个属性来标识经过身份验证的用户:名称和用户。这些属性转换为身份对应的AD帐户条目上的两个属性:()string重新实例化一个具有角色的NTAccount(AD条目中的“SamAccountName”)。这解释了上面#1和#2的失败。要授权HttpContext.User使用除他/她的Sid或SamAccountName以外的任何内容,您将需要DirectoryServices.AccountManagement或经典LDAP。我有一个使用Windows身份验证的ASP.NetMVC应用程序,我正在检查组成员身份以保护控制器操作。听起来很简单,而且我发现没有其他问题可以解决我遇到的问题。我花了很多时间寻找一些东西http://www.c-sharpcorner.com/uploadfile/scottlysle/test-for-user-group-membership-in-Asp-Net-C-Sharp/我的代码检查是否用户属于AD组:foreach(System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups中的System.Security.Principal.IdentityReference组){if(String.Equals(group.Translate(typeof(System.Security.Principal.NTAccount)).ToString(),@"your_domain_nameyour_group_name",StringComparison.InvariantCultureIgnoreCase)){//用户属于一个组}}除了在Web.config文件中,这就是我所需要的以上是C#学习教程:在.Net4.5检查ActiveDirectory组成员身份并共享所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: