asp.net-mvc - 将 .NET MVC 应用程序中的 User.Identity 映射到事件目录用户

标签 asp.net-mvc active-directory asp.net-mvc-5

我正在编写一个位于 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/

相关文章:

jquery - 使用ajax调用设置 session 变量并刷新部分

html - 如何在 MVC 5 中为不同的设备显示不同的数据

asp.net-mvc - ASP.NET MVC : Best practices for keeping session state in a wizard-like app

css - 默认脚手架的样式

c# - 我可以从 HttpContext 获取当前执行的 Controller 吗?

vba - 使用 ADO 执行 LDAP 查询从 Access VBA 检索用户成员资格

powershell - 在 Get-ADUser 筛选器参数中传递字符串会导致错误 - 在 pscustomobject 中找不到属性

c# - asp.net mvc @Html.CheckBoxFor

c# - 如何在本地测试 Azure ActiveDirectory?

c# - 通过 AJAX 编辑 NHibernate 记录