簡體   English   中英

使用Active Directory組進行Windows身份驗證

[英]Windows Authentication with Active Directory Groups

我有一個小項目,使用Visual Studio 2013,.NET 4.5,MVC 5和EF 6構建。我使用Windows身份驗證創建它,但現在我需要檢查Active Directory組中的成員身份以允許或拒絕訪問。

我已經走了許多非常深的兔子洞,試圖找出如何做到這一點。 起初我假設我需要更改項目以使用“內部部署”身份驗證。 但是,我發現:

  1. 在VS 2013中顯然沒有辦法改變項目使用的身份驗證類型(除了手動編輯某些文件)。
  2. 目前還沒有任何文檔說明如何設置“內部部署”身份驗證。 (真的嗎?怎么可能?)
  3. 在任何情況下,我需要的不是“內部部署”身份驗證,因為這僅適用於Windows身份聯合服務(或類似的東西)。 我應該使用的只是具有ASP.Net角色的Windows身份驗證,當我登錄時,Windows顯然從Active Directory組獲取。

因此,假設#3是真的,我嘗試閱讀關於此的大量帖子,但它們似乎分為兩個基本組:

  1. 直截了當,簡單的方法,我無法開始工作,可能是因為它假設了一些我沒有的知識。
  2. 復雜的,自定義編碼的方法,我懷疑它是通過代碼完成的,可以在無代碼方法中完成。

假設#1是要走的路,這是我最近的嘗試。

在我的控制器中,我有:

[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服務器來驗證我)。

我錯過了什么嗎? 或者我錯誤地認為可以在不編寫自定義代碼的情況下完成此操作?

警告:我對來自Java世界的.NET,MVC等相當新,所以請使用小詞。 :-)

我發現了這個問題。 我上面的內容是正確的,除了我在域名和角色名稱之間有兩個反斜杠,而不是一個。 修復只是將其更改為:

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

您還可以在App_Start文件夾中的RegisterGlobalFilters中將其設置為過濾器。

 public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        if (filters == null)
        {
            throw new ArgumentNullException("filters");
        }

        filters.Add(new HandleErrorAttribute());

        var authorizeAttribute = new AuthorizeAttribute
        {
            Roles = "Domain\Group" // Role = group in Active Directory
        };

        filters.Add(authorizeAttribute);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM