簡體   English   中英

Microsoft Graph和自定義API的訪問令牌

[英]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,但可能會遺忘一個例外)。

步驟非常簡單:

  1. 在Azure門戶中更新您的AAD注冊,然后添加將要使用的Microsoft Graph權限。

  2. 代替在您的URI中傳遞resource=<AAD_API_ID> ,請使用resource=graph.microsoft.com 這將返回可以與Microsoft Graph一起使用的令牌。

重要提示:必須請求“脫機訪問”作用域( offline_access )才能起作用。

令人困惑的是,從技術上講,您不能使用相同的訪問令牌來訪問API和Microsoft Graph。 什么支持的切換Resource刷新你的令牌時。 因此,是的,雖然您使用的是兩個不同的令牌,但是您正在重用相同的憑據/授權代碼。

這是一個示例流程:

  1. 用戶使用您的API作為資源( resource=<AAD_API_ID> )進行身份驗證。 這會將授權碼返回給您的應用程序。

  2. 該應用程序將授權代碼發布到/token端點(也使用您的API作為資源)。 這會將access_tokenrefresh_token都返回給應用程序。

  3. 使用此access_token可以調用您的API。

  4. 應用程序使用graph.microsoft.com作為資源將refresh_token/token端點。 這將返回鍵入到Microsoft Graph的新的access_tokenrefresh_token

  5. 使用此新的access_token可以調用Microsoft Graph。

  6. 應用程序再次將refresh_token/token端點,但是這次再次使用您的API作為資源。 這將返回一個新的access_tokenrefresh_token鍵入您的API。

  7. 調用您的API

您可以根據需要重復此循環。 根據需要切換的頻率,您還可以將API和Graph的訪問令牌都保留在內存中,並重用它們直到過期。 請確保始終存儲您收到的最后一個刷新令牌,以便您可以根據需要獲取任一資源的刷新令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM