[英]Access Token for both Microsoft Graph and Custom API
我有一個ReactJs前端向API發出請求。 兩者都托管在Azure中,並且在AAD中也有應用程序注冊。
我曾經能夠使用v1.0 auth端點,並為API創建有效令牌:
https://login.microsoftonline.com/common/oauth2/authorize?client_id=<AAD_WEB_APP_ID>&resource=<AAD_API_ID>&response_type=token ...
如果我正確理解文檔 ,則在v2.0中不允許/可能使用這種身份驗證流程:
但是,該Web API只能從具有相同應用程序ID的應用程序接收令牌。 您不能從具有不同應用程序ID的客戶端訪問Web API。 客戶端將無法請求或獲取對您的Web API的權限。
從v1.0更改為v2.0的原因是我需要訪問Microsoft Graph(尤其是組 )。
我的問題是:如何創建適用於Microsoft Graph和我的API的access_token
? 如果這不可能,那么正確的身份驗證流程將是什么?
您無需為此而切換到v2端點,Microsoft Graph支持v1和v2令牌(實際上,我能想到的支持v2的每個API 也都支持v1,但可能會遺忘一個例外)。
步驟非常簡單:
在Azure門戶中更新您的AAD注冊,然后添加將要使用的Microsoft Graph權限。
代替在您的URI中傳遞resource=<AAD_API_ID>
,請使用resource=graph.microsoft.com
。 這將返回可以與Microsoft Graph一起使用的令牌。
重要提示:您必須請求“脫機訪問”作用域( offline_access
)才能起作用。
令人困惑的是,從技術上講,您不能使用相同的訪問令牌來訪問API和Microsoft Graph。 什么是支持的切換Resource
刷新你的令牌時。 因此,是的,雖然您使用的是兩個不同的令牌,但是您正在重用相同的憑據/授權代碼。
這是一個示例流程:
用戶使用您的API作為資源( resource=<AAD_API_ID>
)進行身份驗證。 這會將授權碼返回給您的應用程序。
該應用程序將授權代碼發布到/token
端點(也使用您的API作為資源)。 這會將access_token
和refresh_token
都返回給應用程序。
使用此access_token
可以調用您的API。
應用程序使用graph.microsoft.com
作為資源將refresh_token
到/token
端點。 這將返回鍵入到Microsoft Graph的新的access_token
和refresh_token
。
使用此新的access_token
可以調用Microsoft Graph。
應用程序再次將refresh_token
到/token
端點,但是這次再次使用您的API作為資源。 這將返回一個新的access_token
和refresh_token
鍵入您的API。
調用您的API
您可以根據需要重復此循環。 根據需要切換的頻率,您還可以將API和Graph的訪問令牌都保留在內存中,並重用它們直到過期。 請確保始終存儲您收到的最后一個刷新令牌,以便您可以根據需要獲取任一資源的刷新令牌。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.