Asp.net 检查其他用户';s角色成员身份(IsInRole、WindowsIdentity/Principal)

Asp.net 检查其他用户';s角色成员身份(IsInRole、WindowsIdentity/Principal),asp.net,security,roleprovider,Asp.net,Security,Roleprovider,我正在编写ASP.NET代码,以便在将使用Windows身份验证的内部网络上运行。某些操作将要求我对其他用户(而不是当前用户)运行组成员身份检查 注意:我不尝试模拟此帐户,也不尝试访问此其他用户上下文中的任何信息。只是想找出他们是什么类型的内部业务逻辑用户 我的第一个想法是使用 new WindowsPrincipal(new WindowsIdentity("MACHINENAME\\username")) .IsInRole("MACHINENAME\\Group1") 但是,

我正在编写ASP.NET代码,以便在将使用Windows身份验证的内部网络上运行。某些操作将要求我对其他用户(而不是当前用户)运行组成员身份检查

注意:我不尝试模拟此帐户,也不尝试访问此其他用户上下文中的任何信息。只是想找出他们是什么类型的内部业务逻辑用户

我的第一个想法是使用

new WindowsPrincipal(new WindowsIdentity("MACHINENAME\\username"))
      .IsInRole("MACHINENAME\\Group1")
但是,WindowsIdentity构造函数失败,出现SecurityException“提供的名称不是正确格式的帐户名”

如果从参数中删除MACHINENAME,则会出现另一个错误:当前没有可用于服务登录请求的登录服务器


WindowsTokenRoleProvider角色提供程序显式仅适用于当前用户,不会检查其他用户帐户

检查其他用户的角色是否有安全限制?如果web服务器位于域上,而我正在检查域帐户,这会有什么不同吗

最后,我将需要有一个广告领域的这项工作,但更喜欢的解决方案,将工作在本地或广告帐户

多谢各位

更新:我现在已经能够在一个域上测试这一点了——只要我不使用域名,代码就可以在广告上下文中工作(测试“username”与“Group1”,而不是“domain\username”与“domain\Group1”)


那么,我该如何在本地用户和组的上下文中使用它呢?

根据Rob A的评论,PrincipalContext和UserPrincipal显然是我需要使用的类:

   using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine))
        {

            var u = UserPrincipal.FindByIdentity(ctx, IdentityType.Name, "username");

            var b = u.IsMemberOf(ctx, IdentityType.Name, "Group1");


            var groups = u.GetAuthorizationGroups();

        }

通过改变ContextType,可以在本地帐户和广告帐户之间切换。我希望这是内置在RoleProvider中的,但我想这是我必须为自己做的事情。

Clyde,您是否尝试过调整ContextTypes和ContextOptions等。我似乎能够在域或dmz上处理验证,但我的解决方案使用ldap服务器_连接=新的PrincipalContext(ContextType.Domain,_ldapserver,“DC=domainname,DC=com”,ContextOptions.SimpleBind,_adminUser,_adminPassword);PrincipalContext看起来确实是一个解决方案……对我来说很有效。