检查其他用户的角色成员身份(IsInRole,WindowsIdentity / Principal)

时间:2011-12-12 16:24:55

标签: asp.net security roleprovider

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

注意:我不是试图冒充此帐户,也不是在其他用户的上下文中访问任何信息。只是试图找出他们对于内部业务逻辑的用户类型。

我的第一个想法是使用

new WindowsPrincipal(new WindowsIdentity("MACHINENAME\\username"))
      .IsInRole("MACHINENAME\\Group1")

但是,WindowsIdentity构造函数失败并显示SecurityException“提供的名称不是正确形成的帐户名称”。

如果我从参数中剥离MACHINENAME \,我会收到一个不同的错误:目前没有可用于登录请求的登录服务器


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

检查其他用户的角色是否存在安全限制?如果Web服务器在域上并且我正在检查域帐户,它会有所不同吗?

最后,我需要在AD域上进行此项工作,但更喜欢适用于本地或AD帐户的解决方案。

谢谢

更新:我现在能够在域上测试这个 - 只要我不使用域名(对“Group1”测试“用户名”,而不是“ DOMAIN \ username“反对”DOMAIN \ Group1“)

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

1 个答案:

答案 0 :(得分:2)

基于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,可以在本地帐户和AD帐户之间切换。我希望这是内置于RoleProvider中的,但我想这是我必须为自己做的事情。