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

如何在.NET API中验证客户端密钥生成的Azure AD access_token?

问题解决步骤

核心原因:Scope不匹配

你当前生成token时使用的是https://graph.microsoft.com/.default,这是Microsoft Graph API的专属范围,而你的自研API需要验证的是自身API的专属范围,这是导致401错误的核心问题。

1. 修正生成access_token的Scope

将生成token的scope替换为你的自研API的应用ID URI(或ClientId)加上.default,示例代码如下:

var scope = "api://{你的API的ClientId}/.default";

如果你的API设置了自定义应用ID URI,直接使用自定义值,比如api://my-custom-api/.default。

2. 在Azure AD中配置应用权限

  • 登录Azure门户,找到你的自研API应用,进入「暴露API」页面,确认已添加至少一个范围(客户端凭证模式下,.default会自动包含所有应用权限,无需定义具体范围)
  • 找到你的小程序应用(用于生成token的应用),进入「API权限」页面,点击「添加权限」→「我的API」,选择你的自研API
  • 选择「应用权限」类型,勾选对应权限(无自定义权限时选默认项即可),点击「添加权限」
  • 点击「授予管理员同意」,确保权限生效

3. 调整API的认证配置(可选,增强稳定性)

在Program.cs中显式指定token验证的受众,避免自动匹配异常:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(options =>
    {
        configuration.Bind("AzureAd", options);
        // 填写你的API的ClientId或应用ID URI
        options.TokenValidationParameters.ValidAudience = "api://{你的API的ClientId}";
    }, configuration);

4. 验证Token有效性

生成新token后,用JWT解析工具解析,检查以下关键字段:

  • aud:必须与你的API的ClientId或应用ID URI完全一致
  • iss:必须是https://login.microsoftonline.com/{你的TenantId}/v2.0(v2端点)或对应v1格式,与API配置的Instance+TenantId匹配
  • roles:应包含你授予的应用权限(若配置了自定义权限)

完成以上操作后,使用新生成的token调用API,即可通过[Authorize]验证。

内容的提问来源于stack exchange,提问作者afantonio1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:43:12