簡體   English   中英

使用 Azure Active Directory 進行身份驗證

[英]Authentication using Azure Active Directory

我在 azure 門戶上創建了一個組用於 aad 身份驗證。 我想要一個不屬於任何一個組(但存在於 AAD 中)的用戶 - 甚至不應該能夠登錄到該站點。 我正在使用 asp.net 核心作為后端

如果要將應用程序配置為接收組聲明,則需要在清單文件中將“ groupMembershipClaims ”值設置為SecurityGroup

  1. 在應用程序注冊門戶的應用程序設置頁面中,單擊“清單”以打開內聯清單編輯器。

  2. 通過找到“groupMembershipClaims”設置並將其值設置為“SecurityGroup”來編輯清單。

  3. 保存清單。

    {
      ...
      "errorUrl": null,
      "groupMembershipClaims": "SecurityGroup",
      ...
    }

當為應用程序啟用組聲明時,Azure AD 在 JWT 和 SAML 令牌中包含聲明,其中包含用戶所屬的所有組的對象標識符 (objectId),包括傳遞組成員身份。

但請注意,為確保令牌大小不超過 HTTP 標頭大小限制,Azure AD 限制了它包含在組聲明中的 objectId 的數量。 如果用戶所屬的組數超過超額限制(SAML 令牌為 150 個,JWT 令牌為 200 個),則 Azure AD 不會發出令牌中的組聲明。 相反,它在令牌中包含超額聲明,指示應用程序查詢圖形 API 以檢索用戶的組成員資格。 更多詳情,請參考博客

在此處輸入圖像描述

所以你需要做一些過程:

  1. 檢查 claim _claim_names 其中一個值是組。 這表明超齡。

  2. 如果找到,請調用 _claim_sources 中指定的端點以獲取用戶組。

  3. 如果沒有找到,請查看用戶組的組聲明。

當然,你可以直接調用Microsoft Graph API來退出當前用戶的組,而無需使用group claims

關於如何根據分組進行授權,可以通過ASP.NET Core中間件庫來實現。 asp.net 中間件通過在TokenValidationParametersRoleClaimType屬性中指定聲明來支持從聲明填充的角色。 由於groups聲明包含安全組的對象 ID 而不是實際名稱,因此您將使用組 ID 而不是組名。 有關更多詳細信息,請參閱示例

啟動.cs

// The following lines code instruct the asp.net core middleware to use the data in the "groups" claim in the Authorize attribute and User.IsInrole()
            // See https://learn.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-2.2 for more info.
            services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
            {
                // Use the groups claim for populating roles
                options.TokenValidationParameters.RoleClaimType = "groups";
            });

然后使用它

[Authorize(Roles = “Group-object-id")] // In controllers
// or
User.IsInRole("Group-object-id"); // In methods

我假設您想使用 Azure AD 上的 ASP.NET Core 對 AD 進行身份驗證。

如果您使用的是 ASP.NET Core 2.1 或更高版本,最簡單的方法是針對 Azure AD 使用 OpenID 的 OAuth2.0/OIDC 流。 Azure AD 還支持 SAML 2.0,而不僅僅是 OAuth2.0/OIDC。

Microsoft 推薦在 Azure AD 上使用 OAuth2.0,因為它比在 Azure AD 上實施 SAML 2.0 更容易學習和實施。

微軟提供了一個使用 ASP.NET Core 的示例應用程序,通過使用特定的庫來幫助訪問 Azure AD 身份驗證來演示對 Azure AD 的身份驗證,它稱為 Microsoft Identity Platform(以前稱為 MSAL 2.0)。

軟件開發人員的 Azure AD 身份概述可在以下位置找到: Azure AD 的 Microsoft 身份平台的官方 MS 文檔頁面

各種 Microsoft Identity Platform 代碼示例的登錄頁面上提供了對 Azure AD 用戶進行身份驗證的示例應用程序列表

筆記:

  1. 您的 Web 應用程序必須先注冊才能向 Azure AD 進行身份驗證。
  2. 您的 Web 應用程序不能使用將用戶 ID 和密碼直接傳遞給 Azure AD 的 OAuth2.0 的“資源所有者”授權模型,因為 Web 應用程序必須顯示同意屏幕才能登錄到 Azure AD。

您可以在 Azure AD 中使用groups claims ,在 Azure 門戶中配置您的應用程序以通過編輯清單接收組聲明:

{
  ...
  "errorUrl": null,
  "groupMembershipClaims": "SecurityGroup",
  ...
}

從 Azure AD 頒發的 ID 令牌將在groups聲明中包含當前用戶的組 ID 列表,然后在 asp.net 核心應用程序(例如 3.0)中,您可以通過以下方式限制訪問:

services.AddControllersWithViews(options =>
    {
        var policy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser().RequireClaim("groups", "YourGroupID")
            .Build();
        options.Filters.Add(new AuthorizeFilter(policy));
    });

注意:來自文檔

如果用戶所屬的組數超過超額限制(SAML 令牌為 150 個,JWT 令牌為 200 個),則 Microsoft Identity Platform 不會發出令牌中的組聲明。 相反,它在令牌中包含超額聲明,指示應用程序查詢圖形 API 以檢索用戶的組成員資格。

暫無
暫無

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

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