c# - 使用 Active Directory 组进行 Windows 身份验证

标签 c# asp.net asp.net-mvc authentication asp.net-mvc-5

我有一个小项目,使用 Visual Studio 2013、.NET 4.5、MVC 5 和 EF 6 构建。我使用 Windows 身份验证创建它,但现在我需要检查 Active Directory 组中的成员身份以允许或拒绝访问权限。

我已经深入了许多非常深的兔子洞,试图找出如何做到这一点。起初我假设我需要更改项目以使用“本地”身份验证。但是,我发现:

  1. VS 2013 中显然没有办法更改项目使用的身份验证类型(除了手动编辑某些文件)。
  2. 目前还没有任何文档解释如何设置“本地”身份验证。 (真的吗?这怎么可能?)
  3. 无论如何,我需要的根本不是“本地”身份验证,因为它仅适用于 Windows Identity Federation 服务(或类似服务)。我应该使用的只是具有 ASP.Net 角色的 Windows 身份验证,当我登录时,Windows 显然是从 Active Directory 组获取的。

因此,假设#3 是正确的,我尝试阅读了很多关于此的帖子,但它们似乎分为两个基本组:

  1. 直接、简单的方法,我无法开始工作,可能是因为它假设了一些我不具备的知识。
  2. 复杂的、自定义编码的方法,我怀疑这些方法是通过代码完成的,而这些方法可能可以通过无代码方法完成。

假设 #1 是要走的路,这是我最近的尝试。

在我的 Controller 中,我有:

[Authorize(Roles=@"SomeDomain\\SomeGroup")]
public class SomeController : Controller

在我的 Web.config 文件中,我有:

  <system.web>
    <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
    </authorization>
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider">
      <providers>
        <clear/>
        <add name="AspNetWindowsTokenRoleProvider"
             type="System.Web.Security.WindowsTokenRoleProvider"
             applicationName="/" />
      </providers>
    </roleManager>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="BehaviorConfiguration">
          <serviceAuthorization
               principalPermissionMode="UseAspNetRoles"
               roleProviderName="AspNetWindowsTokenRoleProvider" />
          <serviceMetadata />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

当我尝试访问该页面时,系统提示我登录。输入我的登录 ID 和密码后,我继续收到登录提示。我无法访问该页面。

我没有任何信息可以告诉我的应用程序 Active Directory 服务器在哪里,但我得到的印象是 Windows 已经知道了(因为,当我登录到 Windows 时,它会访问 Active Directory 服务器来对我进行身份验证) .

我错过了什么吗?还是我假设无需编写自定义代码即可完成此操作是错误的?

警告:我是 .NET、MVC 等方面的新手,来自 Java 世界,所以请使用小词。 :-)

最佳答案

我发现了问题。我上面的内容是正确的,除了我在域名和角色名称之间有两个反斜杠,而不是一个。修复只是将其更改为:

[Authorize(Roles=@"SomeDomain\SomeGroup")]

关于c# - 使用 Active Directory 组进行 Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21714093/

相关文章:

c# - 定期更改基础 EF 模型的最佳替代方案

c# - 如何解决未将对象引用设置为对象实例的问题。?

c# - 作业完成后,Quartz.net 每隔一段时间重复一次作业

c# - 检查两个键是否匹配无法正常工作

asp.net - 如何在runat =“server”表元素中包含thead?

c# - 一个页面只能有一个服务器端表单标签

jquery - 具有延迟加载可折叠面板数据的 ASP.NET GridView

asp.net - 如何在vb.net global.asax中初始化自动映射器

c# - 如何将 cookie 容器与 RestSharp 和 ASP.NET session 一起使用?

c# - MVC5 EF6 CodeFirst 使用两个数据库进行调试和发布