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

ASP.NET Core 6与ReactJS Azure身份验证集成:无法获取用户信息

问题分析与解决方案

1. 先确认AccessToken的受众是否匹配API的Client ID

你能调用MsGraph成功,是因为获取的token受众是https://graph.microsoft.com,但你的内部API需要以自身的Client ID作为受众。前端请求token时,必须指定你的API专属的scope,而非Graph的scope。

前端获取token的代码示例:

const request = {
  scopes: ["api://<你的API-Client-ID>/access_as_user"] // 替换成你API的实际权限范围
};
const response = await instance.acquireTokenSilent(request);
const accessToken = response.accessToken;

2. 正确配置ASP.NET Core 6 API的身份验证中间件

确保API用官方的Microsoft Identity中间件处理Azure AD令牌,不要手动解析。在Program.cs中添加配置:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

// 中间件顺序必须是先认证再授权
app.UseAuthentication();
app.UseAuthorization();

同时在appsettings.json中配置Azure AD信息:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "TenantId": "<你的租户ID>",
  "ClientId": "<你的API-Client-ID>"
}

3. 验证请求头格式是否正确

前端发送请求时,Authorization头必须严格遵循Bearer <access-token>格式,注意Bearer后的空格,以及令牌没有多余的字符:

// 以Axios为例
axios.get('/api/your-endpoint', {
  headers: {
    'Authorization': `Bearer ${accessToken}`
  }
});

4. 检查Token的有效性

用jwt.ms解析拿到的accessToken,重点确认:

  • aud字段值等于你的API的Client ID
  • iss字段是你的租户的签发地址(格式如https://login.microsoftonline.com/<租户ID>/v2.0)
  • exp字段未过期
    如果aud不对,说明前端请求的scope配置错误,必须修正。

5. 确认[Authorize]属性的配置

如果API需要特定角色或权限,要在[Authorize]中明确指定,比如:

[Authorize(Roles = "InternalUser")]
// 或者基于权限范围的策略
[Authorize(Policy = "RequireAccessAsUser")]

同时要确保token中包含对应的roles或scp声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:57:17