我正在编写ASP.NET代码以在将使用Windows身份验证的内部网络上运行。某些操作将要求我对其他用户(不是当前用户)运行组成员资格检查
注意:我不是试图冒充此帐户,也不是在其他用户的上下文中访问任何信息。只是试图找出他们对于内部业务逻辑的用户类型。
我的第一个想法是使用
new WindowsPrincipal(new WindowsIdentity("MACHINENAME\\username"))
.IsInRole("MACHINENAME\\Group1")
但是,WindowsIdentity构造函数失败并显示SecurityException“提供的名称不是正确形成的帐户名称”。
如果我从参数中剥离MACHINENAME \,我会收到一个不同的错误:目前没有可用于登录请求的登录服务器
WindowsTokenRoleProvider角色提供程序显式仅适用于当前用户,不会检查其他用户帐户。
检查其他用户的角色是否存在安全限制?如果Web服务器在域上并且我正在检查域帐户,它会有所不同吗?
最后,我需要在AD域上进行此项工作,但更喜欢适用于本地或AD帐户的解决方案。
谢谢
更新:我现在能够在域上测试这个 - 只要我不使用域名(对“Group1”测试“用户名”,而不是“ DOMAIN \ username“反对”DOMAIN \ Group1“)
那么我如何在本地用户和组的上下文中使用它呢?
答案 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中的,但我想这是我必须为自己做的事情。