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

Azure AD JWT实现Angular 4与.NET Core API认证问题咨询

解决Azure AD JWT令牌验证缺失密钥的问题

我来帮你搞定这个问题——其实.NET Core 2.0不需要手动配置Azure AD的JWT密钥,框架会自动从Azure AD的公开元数据端点获取密钥来验证令牌。你遇到的问题大概率是API的Azure AD认证配置没到位,下面是一步步的解决方法:

1. 先确认Azure AD中API应用的注册配置

登录Azure门户,找到你的Azure AD租户,先把API的应用注册捋清楚:

  • 单独注册一个API类型的应用(和你的Angular客户端应用分开)
  • 在API应用的「公开API」设置里,设置一个应用ID URI(比如api://your-api-client-id),这个值要和后续API配置里的受众(Audience)完全一致
  • 记好这个API应用的客户端ID和你的Azure AD租户ID,后面配置要用

2. 配置.NET Core 2.0 API的Azure AD认证

打开你的API项目,修改Startup.cs文件,按以下步骤配置:

第一步:添加Azure AD JWT认证服务

在ConfigureServices方法中添加认证逻辑:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;

public void ConfigureServices(IServiceCollection services)
{
    // 保留你原有的其他服务配置
    
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = "https://login.microsoftonline.com/你的租户ID/v2.0";
            options.Audience = "你的API应用的应用IDURI"; // 比如api://xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidateAudience = true,
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true
                // 这里不需要手动设置IssuerSigningKey,框架会自动从Authority的元数据端点拉取密钥
            };
        });
    
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_0);
}

第二步:启用认证中间件

在Configure方法里,一定要让UseAuthentication在UseMvc之前执行:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // 保留你原有的其他中间件配置(比如异常处理、静态文件等)
    
    app.UseAuthentication(); // 这行必须在UseMvc前面
    
    app.UseMvc();
}

3. 检查Angular客户端的令牌请求是否正确

你的Angular应用在获取JWT令牌时,要注意两个关键点:

  • 请求的scope必须包含API应用的应用ID URI加上.default(比如api://your-api-client-id/.default)
  • 获取到的令牌里,aud(受众)声明要和API配置的Audience完全匹配

4. 测试认证效果

在API的控制器或具体方法上添加[Authorize]属性,比如:

[Authorize]
[ApiController]
[Route("api/[controller]")]
public class YourController : ControllerBase
{
    // 你的API接口方法
}

然后用Angular客户端携带正确的JWT令牌调用接口,就能验证认证是否生效了。

如果还是有问题,可以去Azure门户的App Service里开启「应用服务日志」,查看详细的认证错误日志,通常能快速定位是受众不匹配、颁发者错误还是令牌过期这类具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:38:15