使用 Azure AD 註冊應用 Oauth2 v2.0的終結點(OAuth 2.0 token endpoint (v2): https://login.partner.microsoftonline.cn/<your tenant id>/oauth2/v2.0/token ) 獲取Token,解析出來依舊為v1.0,如何解決呢?
請求Method: |
POST |
請求URL: |
https://login.partner.microsoftonline.cn/<your tenant id>/oauth2/v2.0/token |
請求的Body: |
tenant:<your tenant id> |
執行後的結果為: |
{
"token_type": "Bearer",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIs... ...4ei78w"
}
|
Postman執行截圖:
但是,對生成的Access_Token內容進行解碼(Decode)時,結果發現version 為 1.0 :
JWT 解析地址:https://jwt.ms/
經過對Azure AD的應用註冊的瞭解,它的程式清單中,存在一個屬性值來控制生成的令牌版本(Token Version)。這個屬性值就是 accessTokenAcceptedVersion
它的解釋是:https://docs.azure.cn/zh-cn/active-directory/develop/reference-app-manifest
指定資源的存取令牌版本。 此引數會更改 JWT 的版本和格式。
accesstokenAcceptedVersion
的可能值為 1、2 或為 null。 如果值為 null,則此引數預設為 1,這對應於 v1.0 終結點。使用的端點 v1.0 或 v2.0 由使用者端選擇,僅影響 id_tokens 的版本。 資源需要顯式設定
accesstokenAcceptedVersion
以指示受支援的存取令牌格式。
根據以上說明,返回到Azure AD的註冊應用頁面,檢視程式清單,檢查 accessTokenAcceptedVersion 的值
基於以上發現,確定解決方案為:修改 accessTokenAcceptedVersion 的值為 2 .
Azure Active Directory 應用清單:https://docs.azure.cn/zh-cn/active-directory/develop/reference-app-manifest
【Azure API 管理】在 Azure API 管理中使用 OAuth 2.0 授權和 Azure AD 保護 Web API 後端,在請求中攜帶Token存取後報401的錯誤 : https://www.cnblogs.com/lulight/p/14378218.html
【Azure 應用服務】NodeJS Express + MSAL 實現API應用Token認證(AAD OAuth2 idToken)的認證實驗 -- passport.authenticate() : https://www.cnblogs.com/lulight/p/16365869.html
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!