Azure B2C登录后调用ASP.NET Core 8 Web API遇401 Invalid_token问题
可能导致Azure B2C Token验证401 Invalid_token的原因
Token受众(Audience)不匹配
- Access Token的
aud声明必须与API的Azure B2C应用程序ID完全一致。如果前端请求Token时指定的Scope错误,或者API配置的受众值不正确,都会触发验证失败。 - ID Token的设计用途是供前端验证用户身份,它的
aud声明是前端应用的ID,而非API的应用ID,因此用ID Token调用API必然会报无效,这是设计层面的问题,ID Token不能用于访问后端API。
- Access Token的
Token签名验证失败
- 后端ASP.NET Core未正确配置Azure B2C的元数据地址,导致无法获取有效公钥验证Token签名。检查
appsettings.json中的Authority字段,确认其为正确的B2C策略地址,格式应为https://<tenant>.b2clogin.com/<tenant>.onmicrosoft.com/<policy>/v2.0/。 - 若Token由旧策略生成,但后端配置了新策略,会因签名密钥不匹配导致验证失败。
- 后端ASP.NET Core未正确配置Azure B2C的元数据地址,导致无法获取有效公钥验证Token签名。检查
Token过期或被吊销
- 解码Token查看
exp声明,确认Token是否已过期。可通过JWT解析工具直接查看过期时间。 - 若Azure B2C中用户会话被吊销,或Token被主动撤销,也会触发无效验证。
- 解码Token查看
后端Azure B2C配置缺失或错误
- 确认Program.cs中是否正确添加了B2C认证服务,示例代码:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAdB2C")); - 检查
appsettings.json内的AzureAdB2C配置,确保ClientId为API的应用ID,Domain、SignUpSignInPolicyId等参数与Azure B2C后台配置一致。
- 确认Program.cs中是否正确添加了B2C认证服务,示例代码:
Scope配置错误
- 前端请求Access Token时,必须包含API的自定义Scope(例如
https://<tenant>.onmicrosoft.com/api/access_as_user),若Scope不正确,Access Token的scp声明将不包含API所需权限,后端会拒绝请求。 - 确认API在Azure B2C后台已暴露对应Scope,且前端应用已被授予该Scope的访问权限。
- 前端请求Access Token时,必须包含API的自定义Scope(例如
Token加密方式不兼容
- 若Azure B2C配置了加密Token,但后端未配置对应的解密密钥,会导致无法解析Token而报无效。检查Azure B2C应用程序的Token加密设置,确认后端是否配置了匹配的解密参数。
Postman请求配置问题
- 确认Postman中Bearer Token的格式正确,无多余空格或特殊字符。虽然该报错核心是Token本身,但请求头的非法字段也可能间接引发验证问题。
内容的提问来源于stack exchange,提问作者Utpal Bharali
相关产品推荐
相关产品推荐

