我正在编写一个 .NET MVC 5 应用程序,该应用程序位于 Intranet 上,使用 Windows 身份验证,需要查询 Active Directory 以查看哪些组可用,然后检查用户是否属于该角色。
组名和用户名的来源将是活动目录。然后,我需要使用 .NET Identity 检查身份和成员身份。我不确定哪些字段映射到什么。
AD 感兴趣的领域似乎是:
-
Sam 账户名:我认为这是我从 User.Identity 获得的用户名,但文档说这个属性是:用于支持运行早期版本操作系统(例如 Windows NT 4.0、Windows 95、Windows 98 和 LAN Manager)的客户端和服务器的登录名。
-
CN:用户名的可显示版本
-
对象GUID:不会更改的用户或组的标识符。重要的是,如果用户的姓氏发生变化,他们也会更改他们的用户名。
所以我认为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 命名空间中的方法。
如果您想将对视图的访问权限限制为仅 AD 的“groupName”组的成员:
你只需要像这样装饰你的控制器动作:
[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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)