[英]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 實現基於范圍的授權。
you get roles
而不是范圍,即; 令牌中的 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
的令牌時,“范圍”會在角色聲明中返回。
所以我們可以使用角色聲明來進行授權。
也作為一種解決方法
嘗試確保添加額外的范圍,例如profile
、 offline_access
open_id
。 並給出response_type=token
而不是 id_token
示例請求:
......&redirect_uri=https://jwt.io&scope=openid profile offline_access&response_type=token&prompt=login
參考:
編輯:
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.