.NET Core API调用受保护端点时出现无效颁发者错误
解决.NET Core API调用时的invalid_token(issuer无效)问题
你的问题核心是获取的Token是v1.0版本,而API配置的是Azure AD v2.0的认证端点,两者的issuer格式不匹配导致校验失败:
- v1.0 Token的issuer格式:
https://sts.windows.net/{tenant-id}/ - v2.0 Token的issuer格式:
https://login.microsoftonline.com/{tenant-id}/v2.0
以下是具体解决步骤:
1. 调整Postman的Token请求端点到v2.0
确保Postman中使用的是Azure AD v2.0的授权和Token端点:
- 授权URL:
https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/authorize - Token URL:
https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token
如果之前用的是v1.0端点(不带/v2.0的地址),会返回v1.0版本的Token,和API的v2.0配置不兼容。
2. 确认请求的Scope参数格式正确
在Postman的授权配置中,Scope必须使用API的v2格式:
api://065.../gamestore_api.all
不要省略api://前缀,否则会默认请求v1.0的资源格式。
3. 验证Postman应用的配置
虽然你已经设置了"requestedAccessTokenVersion": 2,但需要确保:
- 该配置已经保存并生效(在Entra控制台中更新应用清单后需保存)
- 授权流程中没有强制使用v1.0的参数(比如不要添加
resource参数,v2.0用scope替代)
4. 可选:让API兼容两种issuer格式(不推荐)
如果暂时需要兼容v1和v2的Token,可以修改API的JwtBearer配置,添加多issuer校验:
builder.Services .AddAuthentication() .AddJwtBearer(options => { options.Authority = "https://login.microsoftonline.com/c15.../v2.0/.well-known/openid-configuration"; options.Audience = "api://..."; options.TokenValidationParameters = new TokenValidationParameters { ValidIssuers = new[] { "https://login.microsoftonline.com/c15.../v2.0", "https://sts.windows.net/c15.../" }, ValidateIssuer = true }; });
注意:这种方式只是临时妥协,推荐统一使用v2.0的Token和端点配置,避免后续出现其他兼容性问题。
完成以上调整后,重新获取Token,解码后应该看到ver: "2.0"和iss: "https://login.microsoftonline.com/c15.../v2.0",此时再调用API就能通过认证。
内容的提问来源于stack exchange,提问作者PBG
相关产品推荐
相关产品推荐

