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