我正在编写一个位于 Intranet 上的 .NET MVC 5 应用程序,它使用 Windows 身份验证并需要查询 Active Directory 以查看哪些组可用,然后检查用户是否处于该角色中。

组和用户名的来源将是事件目录。然后我需要使用 .NET Identity 检查身份和成员资格。我不确定哪些字段映射到什么。

AD感兴趣的领域似乎是:

  • SamAccountName: 我认为这是我从 User.Identity 获得的用户名,但文档说这个属性是:
    用于支持运行早期版本操作系统(如 Windows NT 4.0、Windows 95、Windows 98 和 LAN Manager)的客户端和服务器的登录名。
  • CN: 用户名
  • 的可显示版本
  • objectGUID: 不会更改的用户或组的标识符。重要的是,如果用户的姓氏发生变化,他们将更改其用户名。

  • 所以,我认为 SamAccountName == User.Identity.Name ,但文档说 SamAccountName 适用于早期的操作系统。这是否实际上意味着它已被弃用,我应该使用其他东西吗?

    另外,我关于 CN 和 objectGUID 的断言是否正确?

    最佳答案

    第一步:设置参数使用AD:

    在 web.config 文件的部分中,设置以下内容:

    <authentication mode="Windows" />
    
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
       <providers>
          <clear />
          <add
              name="AspNetWindowsTokenRoleProvider"
              type="System.Web.Security.WindowsTokenRoleProvider"
              applicationName="/" />
       </providers>
    </roleManager>
    

    现在,您将能够直接使用 System.Web.Security 命名空间中的方法。

    如果您想将 View 的访问权限限制为只有 AD 的“groupName”组的成员:

    你只需要像这样装饰你的 Controller Action :
    [Authorize(Roles = @"DOMAIN\groupName")]
    Public ActionResult Index()
    {...}
    

    如果您想根据用户的 AD 组进行处理:

    在您的治疗中使用诸如“IsInRole(rolename)”之类的方法:
    if (User.IsInRole("DOMAIN\\groupName"))
    {
         // Do what you want
    }
    

    编辑:有问题的实现:在这里,您应该在创建任务时将受影响组的 sAMAccountName 保存到您的任务中。然后当用户想要将任务标记为完成时,只需检查:
    if (User.IsInRole("DOMAIN\\" + sAMAccountNameOfTheGroupDedicatedToYourTask))
    {
         // Mark as complete
    }
    

    关于asp.net-mvc - 将 .NET MVC 应用程序中的 User.Identity 映射到事件目录用户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21305301/

    10-12 14:51
    查看更多