簡體   English   中英

基於范圍/角色的 Azure AD B2C 授權支持

[英]Azure AD B2C Authorization support based on Scope/Role

我們希望在我們的 API 上獲得授權。

前任。 我們有 API-A 和 API-B,它們都暴露給我們不同的消費者。

我們使用 IdentityServer4 設置了基於范圍的授權,我們用不同的策略裝飾端點。 使用 IdentityServer4,我們能夠實現這一點,因為 IdentityServer4 令牌在所有授權類型中都存在范圍聲明,但是使用 Azure AD,我們發現我們不能在使用客戶端憑據流生成的令牌中具有范圍聲明。

在此處輸入圖像描述

在我們的例子中,Web API B 也暴露給消費者,他們同樣擁有基於范圍的授權。 要從 Web API A 調用 Web API B,我們使用客戶端憑據流,它不會在令牌中聲明范圍,因此我們無法授權對 Web API B 的調用。

如何在我們從一個上下文調用其他上下文 API 的微服務架構中使用 Azure AD 實現基於范圍的授權。

  1. 當您使用客戶端憑據流並使用應用程序權限時, you get roles而不是范圍,即; 令牌中的 scp 聲明。
  2. 應用程序權限是賦予應用程序本身的某種角色,客戶端憑據中的范圍應用作 api://<APP_ID>/.default 。 它們僅適用於不涉及用戶的客戶端憑據身份驗證。 請參閱快速入門以配置應用程序訪問 web-apis
  3. 范圍通常是委派的權限,僅在用戶參與登錄過程時才適用 它們允許您代表用戶行事,即; 僅在用戶上下文中,我們將在客戶端憑證流的情況下獲得 scp 聲明。

請參閱azure-ad-scope-based-authorization

  • 因此,如果您想要委派權限,那么您將不得不使用隱式授權流程而不是客戶端憑據。

  • 由於公開 api 頁面中的范圍用於授權代碼授予流程並且涉及用戶,因此在這種情況下(客戶端憑據)這是不可能的,我們必須添加我們自己的范圍可供應用程序使用,這些范圍被間接稱為角色我們需要在應用程序注冊中的 approles 下或通過應用程序角色刀片添加清單本身。

在此處輸入圖像描述

前任:

 {
      "appRoles": [
      {
         "allowedMemberTypes": [
            "Application"
          ],
          "displayName": "Read all todo items",
          "id": "f8dxxxxxxxxxxxxf98",
          "isEnabled": true,
          "description": "Allow the application to read all todo items as itself.",
          "value": "Todo.Read.All"
        }
      ]
    }

之后,必須授予管理員同意。

所以現在當請求一個默認范圍為api://<app id>/.default的令牌時,“范圍”會在角色聲明中返回。

在此處輸入圖像描述

所以我們可以使用角色聲明來進行授權。

也作為一種解決方法

嘗試確保添加額外的范圍,例如profileoffline_access open_id 並給出response_type=token而不是 id_token

示例請求:

......&redirect_uri=https://jwt.io&scope=openid profile offline_access&response_type=token&prompt=login

參考:

  1. 使用 Azure AD 在您的 API 中進行基於范圍的授權 – IT 通才 (wordpress.com)
  2. 范圍未添加到從 Azure Ad 返回的訪問令牌中 - Thinbug

編輯:

  1. 要從其他 api 調用 web api,需要在一個 api 即(您要調用的 api2)中定義范圍,並且需要在調用 api(api1) 時選擇這些范圍。 請在此處完成流程
  2. 當登錄第一個 Api 時,請在請求中包含范圍,並嘗試將響應類型設置為 Token 並查看 scp 是否可用或使用 idtoken https://tenant.b2clogin.com/tenant.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1_TenantSignUpIn&client_id=<appid>&nonce=defaultNonce&redirect_uri=https://jwt.ms&scope=openid offline profile https://tenant.onmicrosoft.com/b2capi/write https://tenant.onmicrosoft.com/b2capi/read https://tenant.onmicrosoft.com/b2capi/user_impersonation&response_type=id_token&prompt=login

請注意,范圍作為角色存在,具體取決於流類型。

暫無
暫無

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

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