Azure AD返回无效访问令牌,移动端调用ASP.NET Core API报401错误
问题根源
- 核心触发原因:移动端请求访问令牌时,将OIDC标准 scope(
openid、email)与自定义API的scope放在同一请求中,这种混合请求会触发Azure AD B2C回退发行v1版本访问令牌。你的API已配置accessTokenAcceptedVersion: 2仅接受v2令牌,签名校验逻辑不匹配导致返回401 Unauthorized。 - 可选排查点:若修改scope后仍返回v1令牌,可检查B2C用户流
B2C_1_SignupSignin的「令牌配置」设置,确认访问令牌的发行版本已选择v2。
修复方案
- 修改移动端令牌请求的scope列表,请求API访问令牌时仅传入自定义API的scope即可:
var scopes = new string[] { "https://testorganisation.onmicrosoft.com/api/access_as_user" };
- 若需要获取用户邮箱、身份信息,可直接从MSAL返回的
Account对象的Claims属性中读取,或在首次调用AcquireTokenInteractive触发登录时,单独请求openid、emailscope获取ID令牌解析即可,不要和API访问令牌的scope混同请求。 - 验证方法:修改后获取的新令牌可通过JWT解析工具查看,确认
ver声明值为2.0、aud声明匹配你的API标识符URI或客户端ID即可。
内容的提问来源于stack exchange,提问作者Daan
相关产品推荐
相关产品推荐

