我正在编写一个位于 Intranet 上的 .NET MVC 5 应用程序,它使用 Windows 身份验证并需要查询 Active Directory 以查看哪些组可用,然后检查用户是否处于该角色中。
组和用户名的来源将是事件目录。然后我需要使用 .NET Identity 检查身份和成员资格。我不确定哪些字段映射到什么。
AD感兴趣的领域似乎是:
用于支持运行早期版本操作系统(如 Windows NT 4.0、Windows 95、Windows 98 和 LAN Manager)的客户端和服务器的登录名。
所以,我认为 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/