【问题标题】:Asp.Net MVC 3: intranet application with user in a special AD group?Asp.Net MVC 3:具有特殊 AD 组用户的 Intranet 应用程序?
【发布时间】:2012-09-12 07:13:38
【问题描述】:

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

有没有简单的方法来做到这一点?它适用于一个非常小的 Web 应用程序(开发 8-10 天)。

谢谢

【问题讨论】:

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


    【解决方案1】:
    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。

    【讨论】:

    • 我如何将它与 Asp.Net MVC 的身份验证系统集成?
    • 您可以将逻辑放在 global.asax Session_start 事件中。检查用户是否已通过身份验证; HttpContext.Current.User.Identity.IsAuthenticated;如果是,则 UserName = HttpContext.Current.User.Identity.Name.Split('\\').LastOrDefault()
    • 您确定没有更合适的方法可以使用 AuthProvider 或其他任何方法来实现吗?
    【解决方案2】:

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

    例如

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

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

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 2017-01-24
      • 2011-11-26
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多