因此,我嘗試看看是否可以支持 C# 守護程序應用程序可以訪問受 MSAL.NET 和 OAuth2 范圍保護的自定義 Web API 的場景。截至目前,我看不出有什么辦法可以做到這一點。庫和工具集的版本是:.NET Core 2.2 Microsoft.Identity.Client 4.1.0客戶是var app = ConfidentialClientApplicationBuilder.Create("<client app id>")
.WithClientSecret("<client_secret>")
.WithAuthority("https://login.microsoftonline.com/<tenant_id_that_hosts_the_web_api>")
.Build();然后獲取tokenawait app.AcquireTokenForClient(new string[] { "api://<app_id_of_the_web_api>/.default" });此時,我確實獲得了令牌,我可以使用該令牌調用使用 MSAL 和具有上述應用 ID 的 Azure 應用程序保護的自定義 Web API 端點。這不起作用,因為我在端點上有基于策略的授權,期望在 Azure AD 應用程序中定義特定的自定義范圍。問題是,如何配置客戶端和 Azure AD,以便獲得作為 Web API 聲明傳入的特定范圍?
2 回答

HUX布斯
TA貢獻1876條經驗 獲得超6個贊
您需要注冊兩個應用程序,一個用于守護程序應用程序(客戶端應用程序),一個用于Web api(后端應用程序)。
單擊 Web api 應用程序 -> 公開 API。
單擊守護程序應用程序 -> API 權限 -> 添加權限 -> 我的 API -> 選擇 Web api 應用程序 -> 選擇權限。
然后是客戶端
var?app?=?ConfidentialClientApplicationBuilder.Create("<client?app?id>") ????????????????.WithClientSecret("<client?app?client_secret>") ????????????????.WithAuthority("https://login.microsoftonline.com/<tenant_id>") ????????????????.Build();
范圍:
await?app.AcquireTokenForClient(new?string[]?{?"api://<app_id_of_the_web_api>/read"?});

吃雞游戲
TA貢獻1829條經驗 獲得超7個贊
被迫使用 api:///.default 來獲取訪問令牌。當使用“常規”范圍時,再多的哄騙似乎也不起作用。我按照上面的建議配置了應用程序,但不是:
await?app.AcquireTokenForClient(new?string[]?{?"api://<app_id_of_the_web_api>/read"?});
我不得不使用:
await?app.AcquireTokenForClient(new?string[]?{?"api://<app_id_of_the_web_api>/.default"?});
在 API 應用程序的配置中,我必須在清單中定義一個“appRole”,用于標識我要分配給守護程序應用程序的角色,然后在 Web API 中,我更改了策略代碼以檢查范圍或應用程序角色 - 有效。
- 2 回答
- 0 關注
- 152 瀏覽
添加回答
舉報
0/150
提交
取消