我正在使用 ASP.Net Core 6 來構建安全的 Web API。
我如何構建它
dotnet new webapi --auth SingleOrg --aad-instance https://login.microsoftonline.com/ --client-id <CLIENT ID> --domain company.onmicrosoft.com --tenant-id <TENANT ID> --calls-graph true -o GraphTestService
WEB API 的應用程式注冊
我在匯出 API“EmployeeRecord.Read”中添加了一個范圍
APP REGISTRATION FOR CLIENT (Public Client)
添加了 Graph API 的權限 (User.Read)
添加了權限“EmployeeRecord.Read”
如何使用客戶端獲取令牌
我使用的是“InteractiveBrowserCredential”。
一切正常,直到 Web 服務嘗試呼叫 Graph API。它拋出MsalUIRequiredException。
可以理解,因為我在請求令牌時沒有包含任何圖形 API 權限。
最后,問題 當我檢查回傳的不記名令牌時,它具有“EmployeeRecord.Read”范圍。好沒問題。Web API 對其進行授權;但令牌對 Graph API 沒有任何權限。
當我向范圍添加圖形 API 權限時,我得到 AADSTS28000:輸入引數范圍的提供值無效,因為它包含多個資源。范圍 api://<APP URI ID>/EmployeeRecord.Read https://graph.microsoft.com/User.Read offline_access openid 組態檔無效。
如果我只包含圖形 API 權限,則 Web API 會回傳未經授權的錯誤。
我嘗試了什么 除了使用范圍之外,我還嘗試將我的客戶端應用程式添加到“公開 API/添加客戶端應用程式”下的 Web API 應用程式注冊中。這沒什么區別。令牌或錯誤沒有區別。
uj5u.com熱心網友回復:
您正在嘗試為 2 個不同的資源添加范圍,范圍引數不能用于指定多個資源類似問題的權限 。
我們建議您使用 MSAL 庫,MSAL 將為您存盤令牌并在令牌過期時重繪 。只需呼叫acquireTokenSilent 以靜默方式獲取訪問令牌,如果出現錯誤,請呼叫acquireToken(請參閱此處的錯誤處理詳細資訊:https ://docs.microsoft.com/en-us/azure/active-directory/develop/msal -handling-exceptions#msal-for-ios-and-macos-errors )
有關更多資訊,請檢查類似問題
謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/494911.html
標籤:验证 微软图形 API asp.net-core-webapi asp.net 授权
