我創建了一個內部部署的 .Net 6 Web API,并使用 Azure 成功實作了 authN(應用注冊 > access_token)。此 api 由外部供應商以 service-2-service 方式公開訪問。
因為控制器操作需要使用
使用客戶端應用程式注冊 client_id 和 client_secret 時,我只收到 access_token,沒有關于角色的資訊!
{
"token_type": "Bearer",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "TOKENHERE"
}
我需要的是在沒有用戶的情況下使用基于角色的授權 進行正確的角色檢查,但我缺少一些關于如何在 Azure 和 API 引導程式中正確設定的重要資訊。角色,范圍,宣告,..?
我在這里俯瞰什么?
uj5u.com熱心網友回復:
我試圖在我的環境中重現相同的結果并得到以下結果:
我App roles
在 API App 注冊上創建了與您相同的以下內容:
我為客戶創建了另一個應用程式注冊,并Service.Read
通過授予如下同意添加了角色:
Client Credentials
我通過 Postman使用授權型別為應用程式生成了訪問令牌,如下所示:
POST https://login.microsoftonline.com/<TenantID>/oauth2/v2.0/token
使用令牌端點 URL,您只會在回應中獲得令牌而不顯示宣告。
claims
只有當您像下面這樣解碼令牌時,您才能找到類似的角色、scp 等:
為了使用宣告來授權policies
API 中的操作,您可以像下面這樣構建和注冊:
在 Program.cs 中:
builder.Services.AddAuthorization(options => { options.AddPolicy("Policy_Name", policy => policy.RequireClaim("Service.Read")); });
app.UseAuthorization();
在控制器檔案中:
[Authorize(Policy = "Policy_Name")]
public class YourClass : Controller {}
請參考以下檔案以獲取完整的代碼示例:
ASP.NET Core 中基于宣告的授權 微軟檔案
user4864425 使用客戶端憑據進行基于角色的訪問
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/508238.html
標籤:C# 。网 asp.net 核心 asp.net-web-api 天蓝色身份验证
上一篇:如何清理C#方法中的重復元素?