我有 ASP.NET MVC3 应用程序。我们添加了基于窗口的身份验证。在某些控制器上,我们必须做进一步的授权。
例如,我希望首选项页面可以查看我尝试使用的“ABCGroup”:IsInRole("ABCGroup") 方法。如果用户是它的直接成员,它会起作用。
如果登录用户不是 ABCGroup 的直接成员,则 IsInRole() 不起作用。例如,用户是管理员组的一部分,管理员组是“ABCGroup”的成员,那么如果管理员试图打开应用程序,IsInRole("ABCGroup" 将始终返回 false。
作为替代方案,我创建了一个自定义 Authorize 属性,该属性将创建允许组的集合(使用 DirectryEntry 类),然后选择登录用户的组集合(使用 HttpContext.Current.Request.LogonUserIdentity.Groups)并查看是否在允许的集合中。
它有效,但对于某些域它失败了。
“ABCGroup”中的成员如下: 1. 管理员
“管理员”有:1.管理员 2.实验室/管理员 3.实验室/域管理员
我以“实验室\管理员”身份登录系统[实验室是一个域]。我打开了应用程序,它要求我提供凭据。在凭据对话框中,如果我输入 lab.sub.sub2\administrator 然后输入密码它可以工作,但我输入“superdomain.lab.sub.sub2\administrator”它失败了。默认情况下,系统使用“superdomain.lab.sub.sub2\administrator”,这就是要求提供凭据的原因。
是否有一些功能可以简单地验证登录用户在 LoggedUser.IsInRole(:Role name:) 之类的组下的访问能力
我看到了 CheckTokenMembership() 但确实无法在 C# 中使用它我从http://www.pinvoke.net/default.aspx/advapi32.checktokenmembership尝试过