【发布时间】:2012-09-12 07:13:38
【问题描述】:
我看到我可以创建一个使用 NTLM 身份验证的 Intranet 身份验证。这几乎是我需要的。此外,我还需要检查用户是否在 AD 中的指定组中。
有没有简单的方法来做到这一点?它适用于一个非常小的 Web 应用程序(开发 8-10 天)。
谢谢
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 active-directory ntlm
我看到我可以创建一个使用 NTLM 身份验证的 Intranet 身份验证。这几乎是我需要的。此外,我还需要检查用户是否在 AD 中的指定组中。
有没有简单的方法来做到这一点?它适用于一个非常小的 Web 应用程序(开发 8-10 天)。
谢谢
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 active-directory ntlm
var ctx = new PrincipalContext(ContextType.Domain);
var userPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, userName);
var groups = userPrincipal.GetGroups();
在这里,您拥有所有与当前用户相关联的第一级组。如果您想更深入地检查,例如第一级组所属的组,您必须编写递归函数,该函数将遍历整个组图。
var ctx = new PrincipalContext(ContextType.Domain);
var groupPrincipal = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, childGroup.SamAccountName);
var currentLevelGroups = groupPrincipal.GetGroups();
使用这三行可以得到指定组的父组。
您可以在每个步骤中检查给定组是否是收集组的一部分,如果是,则中断并返回 true。
【讨论】:
您可以使用参数将 Authorize 属性添加到相关控制器以检查组。
例如
[Authorize("mydomain/admin")]
public class MyController : Controller
{
}
您还需要在网站上启用 Windows 身份验证。
HTH
硅
【讨论】: