問題描述
使用 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
指定資源的訪問令牌版本。 此引數會更改 JWT 的版本和格式。
accesstokenAcceptedVersion 的可能值為 1、2 或為 null。 如果值為 null,則此引數預設為 1,這對應於 v1.0 終結點。
使用的端點 v1.0 或 v2.0 由客戶端選擇,僅影響 id_tokens 的版本。 資源需要顯式配置 accesstokenAcceptedVersion 以指示受支援的訪問令牌格式。
根據以上說明,返回到Azure AD的註冊應用頁面,檢視程式清單,檢查 accessTokenAcceptedVersion 的值
基於以上發現,確定解決方案為:修改 accessTokenAcceptedVersion 的值為 2 .
操作演示動畫
第一部分:修改 accessTokenAcceptedVersion
第二部分:驗證 Access Token
參考資料
Azure Active Directory 應用清單:https://docs.azure.cn/zh-cn/active-directory/develop/reference-app-manifest#accesstokenacceptedversion-attribute
【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