Azure OAuth2令牌交换异常:获取的AccessToken非预期JWT格式
授权码换取Access Token未返回JWT令牌问题
问题详情
调用微软OAuth2.0令牌接口通过授权码换取Access Token时,期望得到JWT格式的令牌,但实际返回的是不透明的长字符串令牌。
请求信息
- POST地址:
https://login.microsoftonline.com/common/oauth2/v2.0/token - 请求参数:
client_id=?scope=User.Readcode=?grant_type=authorization_codeclient_secret=?redirect_uri=?
返回结果
{ "token_type": "Bearer", "scope": "User.Read", "expires_in": 3600, "ext_expires_in": 3600, "access_token": "EwB4A8l6BAAUbDba3x2OMJElkF7gJ4z/VbCPEz0AAWFHRrdsZ4LrR7xaC4YHcQKYbIVUr9iZ7QotvAC57guruw+WSbgzggrIvcrGZfZumyqk7QbveeY6Ai/QJDTWIyEGp0xCEKVoNfZCgfviQATXr0gK+sdE1qRS5lWPLFApP6/CeVxF6m9TsIOxfghTKAeIZ7u8geUojjt4qKb+0jvaLiimCYQCYckzcNPhDjd5F2hdY/MCfMO1lbO7ovee2YQSAEKf5EBrySmMImLnos5Umz6UB1V4lO0uAbL7nKsRy3QX/U2LTcaXyTjVsOTBzLuZfAT0RKimKXoxjtJ8DcW7cI3FYGR6l8fjMQXKLkwBOauiRniv6/y2zJfrVvi3bUYQZgAAEJDr3QYnJrUsVhKwjjwFHBJAAoqUpBk/JK10NX+xlsZiLheYRMA8FICnJ02i5UIANZwMjfzyLWBlSID5HNNCK60gkjsHkQ01Pmqru1a/oSTNeyAdqjOYhTvVUhKmAWDwEaDhLOk03nbrAqoQO0eojLxPw3HiXQodCCo2m68ha7lFbcZqWCOuEXJulEgpp1iBjFLgL9xjLSn9TGu2QnYHoUqoKK1daHOaPcGRet2deotr4OGfh/eY6S/n/JNBIyxGei/LnuH3..." }
原因分析
返回的Ew开头令牌是针对旧版Azure AD Graph的不透明令牌,而非微软Graph API的JWT令牌。问题出在scope参数未指定完整的微软Graph资源标识符,导致端点默认返回了旧资源的令牌。
解决方案
将请求的scope参数修改为包含微软Graph资源路径的完整权限:
scope=https://graph.microsoft.com/User.Read
需重新执行完整的授权码流程(先获取新的授权码,再用新授权码换取令牌),此时返回的access_token会是ey开头的JWT格式,可通过JWT解析工具查看令牌内的声明信息。
若需请求多个权限,用空格分隔多个完整权限路径即可,示例:
scope=https://graph.microsoft.com/User.Read https://graph.microsoft.com/Mail.Read
内容的提问来源于stack exchange,提问作者Hoppe
相关产品推荐
相关产品推荐

