asp.net - ASP.NET 中的 Windows 身份验证模式使用 Active Directory 组名(Windows 2000 之前)?

标签 asp.net asp.net-mvc active-directory windows-authentication webforms

这是背景。我有一个 .NET MVC v1.0 项目,我试图通过使用 Windows 身份验证模式来保护它。所以我将 web.config 设置为:

<authentication mode="Windows" />

然后进入我的 Controller 并执行以下操作:
[Authorize(Roles="IT")]
public class LicenseController : Controller

在 AD 中,我们有一个名为“IT”的组,我还有很多其他人都属于这个组。一旦我有了这个,我就开始了一个调试 session 并尝试去那个 Controller 中的任何 Action ,我遇到了一个 401。我搜索高低寻找我搞砸了狗的地方,但找不到任何东西错误的。经过一段时间的努力,我决定尝试将“授权”更改为特定用户,看看是否有效。所以我将其更改为以下内容:
[Authorize(Users="domain\\tnederveld")]

低,瞧,这奏效了。所以我去添加了一个我所属的不同组,然后取出用户授权声明,这奏效了。我开始研究两个 AD 组之间的差异,唯一不同的是在第二个组中我尝试了“组名称(Windows 2000 之前):”相同。 “IT”组“Group name (pre-Windows 2000):”是“IT Associates”。所以我尝试将授权语句更改为:
[Authorize(Roles="IT Associates")]

它开始工作了。我认为这是一个 MVC 问题,所以确保我在一个常规的 Web 表单项目中尝试过它并且遇到了同样的问题。

真正的问题在于,当您使用属于 System.DirectoryServices.AccountManagement 的 UserPrincipal 时,它会在使用 .GetGroups() 方法时返回组“IT”。

为什么会这样?

最佳答案

你需要把各种分开姓名 AD 中的条目可以具有:

  • 姓名 本身通常是 CN 属性 - 通用名称。这是 LDAP 字符串中的“CN=xxx”部分。这是IT - 这就是 System.DirectoryServices.AccountManagement 将返回的内容 - 它是“Active Directory”最常见的名称
  • “IT Associates”名称是 Windows 2000 之前版本或 sAMAccountName - 在出现 AD 之前 Windows NT 曾经使用过的东西 - 本地用户和/或组名(SAM = 安全帐户管理或类似的东西)。每个域的 SAM 帐户名称都需要是唯一的 - 即使在当今巨大的 AD 林中也是如此。

  • 不幸的是,许多 Windows API 调用仍然基于该名称 - 因为它们(并且需要)向后兼容早期的 Windows 版本。 ASP.NET 成员(member)系统使用这些调用,因此将使用您的 domain/tnederveld用户名和 IT Associates组 - 这些是您的对象的 SAM 帐户名

    不确定您是否可以做很多事情 - 请注意,在 AD 环境中,您的任何用户或组都有过多的“名称” - 始终非常清楚您在谈论哪个!

    有关所有 AD 属性的详细列表,请参阅 Richard Mueller 的 excellent web siteActive Directory reference material .

    关于asp.net - ASP.NET 中的 Windows 身份验证模式使用 Active Directory 组名(Windows 2000 之前)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2049341/

    相关文章:

    c# - 如何使用 C# ASP.NET Core 从 HTTP Referer 中提取方案、主机、路径和查询字符串

    asp.net - 从一个区域的 Action 重定向到 "root"区域中的 Action ?

    node.js - Node.js 中的事件目录代理

    c# - 从 Outlook.MailItem 获取发件人事件目录用户主体

    powershell - 由于超时时间已过错误,此操作返回

    c# - ??有 2 个字符串的运算符?

    asp.net - 如何将大数据导出到Excel

    asp.net - 使用 ASP.NET SQL Membership Provider,我如何存储我自己的每用户数据?

    javascript - 将值从 MVC Controller 传递到 javascript 代码

    asp.net-mvc - ASP.NET MVC 中 ActionLink 的图像等效项