You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:27:20