个人微软账号使用OAuth2认证无法获取JWT访问令牌如何解决

根本原因
Azure AD针对个人微软账号签发访问令牌时,如果请求的scope对应微软官方服务(比如Microsoft Graph、UserInfo端点的权限),返回的是微软私有加密格式的令牌,仅微软自有服务可识别解析,因此不会是标准JWT格式,自然以EwC而非eyJ开头,无法被自定义JWT校验模块解析。这也是你用该令牌调用微软官方的UserInfo端点可以正常响应,但自有API返回401错误的核心原因。
可行解决方案
- 第一步:进入你的Azure AD应用注册页面,在「暴露API」板块添加自定义作用域,示例格式为
api://<你的应用客户端ID>/access_as_user,按照页面提示完成作用域配置并启用。 - 第二步:SPA请求访问令牌时,将
scope参数指定为你刚才创建的自定义作用域,而非默认的User.Read等微软服务权限。如果你的应用同时需要调用Microsoft Graph和自有API,需要分开两次请求令牌:一次用微软服务的scope获取私有格式令牌用于调用Graph,一次用自有API的scope获取JWT格式令牌用于调用后端接口。 - 第三步:调整后端API的JWT校验配置,确保
aud(受众)校验值匹配你自定义作用域的前缀(即api://<你的应用客户端ID>),iss(签发者)匹配个人账号场景下Azure AD的标准签发地址。
配置完成后获取到的访问令牌就是标准eyJ开头的JWT格式,后端可正常解析校验,不会再返回401错误。
内容的提问来源于stack exchange,提问作者user13842370
相关产品推荐
相关产品推荐

