[英]Azure AD On-Behalf-Of authentication with separate frontend and backend applications
我覺得我在這里可能有點生氣。
我有一個具有前端反應應用程序 ( SPA Auth ) 的基本架構,它與后端 GraphQL Nodejs API 服務 ( Protected Web API Auth ) 通信,托管在 Azure 中並使用 Azure AD 進行身份驗證。
我一直在嘗試配置身份驗證以使用On-Behalf-Of Flow 。
urn:ietf:params:oauth:grant-type:jwt-bearer
請求它自己的訪問令牌這一切都有效,除了我無法解決這個問題 -
用戶或管理員未同意使用名為“service-cbcity-api”的 ID 為“9b56c153-be42-499a-a41a-20176ed2ce69”的應用程序。 為此用戶和資源發送交互式授權請求。
基本上我無法成功配置應用程序注冊和令牌請求,以確保當后端請求它的令牌時,它被允許代表最初經過身份驗證的用戶調用 User.Read。
在代表文檔中,它說明了有關使用/.default
范圍的以下內容 -
/.default 和聯合同意
中間層應用程序將客戶端添加到其清單中的已知客戶端應用程序列表中,然后客戶端可以為自身和中間層應用程序觸發組合同意流。 在 Microsoft 標識平台端點上,這是使用 /.default 范圍完成的。 當使用已知客戶端應用程序和 /.default 觸發同意屏幕時,同意屏幕將顯示客戶端對中間層 API 的權限,並請求中間層 API 所需的任何權限。 用戶對這兩個應用程序都表示同意,然后 OBO 流程就起作用了。
我已經嘗試了應用程序注冊中的各種配置組合以及范圍請求的不同組合,但我根本無法使其按預期運行; 提示似乎不包括合並同意。 我讓它發揮作用的唯一方法是手動向 User.Read 的后端應用程序提供管理員同意,這似乎是一個黑客,我更願意正確配置它以征求用戶同意。
如果有人之前配置過類似的東西(似乎是預期的用例),請告訴我你是如何讓它工作的,包括像這樣的配置
在這個階段,我將不得不恢復到可能使用一個應用程序注冊並在前端和后端之間共享相同的訪問令牌,盡管就我個人而言這似乎是一個更糟糕的解決方案。
想通了,我的主要問題是我將known client applications list與Authorized client applications混淆了。
授權客戶端應用程序存在於 UI 中,可從公開 API 區域進行配置 -
但是,這與已知的客戶端應用程序不同,后者是只有在您編輯清單時才能找到的設置 -
這個謎題的關鍵部分是——
{{api_clientid}}/.default
,其中{{api_clientid}}
是后端應用注冊的客戶端 ID這將在用戶同意時向用戶顯示您在后端應用程序注冊中配置的 API 權限,並允許您的后端進程使用 OBO 流檢索 AccessToken。
對於它的價值,這是幫助我意識到我需要更新清單的教程,並為我提供了有關確切 OAUTH 請求格式的指導 - https://github.com/Azure-Samples/active-directory-dotnet-native- aspnetcore-v2/tree/master/2.%20Web%20API%20now%20calls%20Microsoft%20Graph#how-to-deploy-this-sample-to-azure
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.