Asp.Net MVC 3:用户在特殊AD组中的Intranet应用程序?

时间:2012-09-12 07:13:38

标签: asp.net-mvc asp.net-mvc-3 active-directory ntlm

我看到我可以创建一个使用NTLM身份验证的Intranet身份验证。这几乎就是我的需要。此外,我还需要检查用户是否在AD中的指定组中。

有一种简单的方法吗?它适用于非常小的Web应用程序(开发人员8-10天)。

谢谢

2 个答案:

答案 0 :(得分:1)

var ctx = new PrincipalContext(ContextType.Domain);

var userPrincipal = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, userName);

 var groups = userPrincipal.GetGroups();

这里有hava所有第一级组,当前用户关联。如果要更深入地检查,例如第一级组所属的组,则必须编写递归函数,该函数将遍历整个组图。

var ctx = new PrincipalContext(ContextType.Domain);

var groupPrincipal = GroupPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, childGroup.SamAccountName);

var currentLevelGroups = groupPrincipal.GetGroups();

使用这三行,您可以获得指定组的父组。

您可以检查每个步骤是否给定的群组是收集群组的一部分,如果是,则只需中断并返回true。

答案 1 :(得分:1)

您可以使用参数将Authorize属性添加到相关控制器以检查该组。

例如

 [Authorize("mydomain/admin")]
 public class MyController : Controller
 {

 }

您还需要在网站上启用Windows身份验证。

HTH

的Si