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

如何在ASP.NET Core 6中手动验证微软登录的JWT Access Token

验证微软JWT Access Token的ASP.NET Core 6解决方案

核心方案:使用官方身份验证库

ASP.NET Core原生的Microsoft.IdentityModel.Tokens与System.IdentityModel.Tokens.Jwt包是验证微软JWT的标准方案,无需依赖Graph API或Azure Identity的复杂逻辑,具体实现步骤如下:

1. 安装必要NuGet包

Install-Package Microsoft.IdentityModel.Tokens
Install-Package System.IdentityModel.Tokens.Jwt

2. 全局配置JWT验证中间件

在Program.cs中配置认证服务,针对微软颁发的令牌,需指定权威颁发机构与受众:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "https://login.microsoftonline.com/{你的租户ID}/v2.0";
        options.Audience = "{你的应用/API客户端ID}"; // 对应Angular应用注册的客户端ID或API的客户端ID
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true
            // 微软会自动从权威端点拉取签名密钥,无需手动配置
        };
    });

// 启用认证与授权中间件
app.UseAuthentication();
app.UseAuthorization();

3. 手动验证令牌(类似谷歌的ValidateAsync)

如果需要在特定业务逻辑中手动验证令牌,可封装工具方法:

using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;

public async Task<bool> ValidateMicrosoftJwtAsync(string accessToken)
{
    var validationParams = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidIssuer = "https://login.microsoftonline.com/{你的租户ID}/v2.0",
        ValidateAudience = true,
        ValidAudience = "{你的应用/API客户端ID}",
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true
    };

    var handler = new JwtSecurityTokenHandler();
    try
    {
        handler.ValidateToken(accessToken, validationParams, out _);
        return true;
    }
    catch (SecurityTokenException)
    {
        // 令牌验证失败,可记录日志或返回错误
        return false;
    }
}

关键注意事项

  • 租户ID:单租户应用填Azure AD租户ID;多租户应用使用common或organizations
  • 受众(Audience):必须与Angular登录时请求的aud字段一致,通常为API的客户端ID(若令牌指向API)或Angular应用的客户端ID
  • 令牌版本:确保Authority中的端点版本(v2.0/v1.0)与登录时使用的微软端点匹配
  • 签名密钥管理:中间件会自动从微软的/.well-known/openid-configuration端点获取签名密钥,无需手动维护

常见问题排查

  • InvalidIssuer错误:检查ValidIssuer是否与令牌iss字段完全匹配
  • InvalidAudience错误:确认Angular登录时请求的scope包含目标API的范围,且aud与配置的ValidAudience一致
  • 令牌过期:捕获SecurityTokenExpiredException,提示用户重新登录

内容的提问来源于stack exchange,提问作者Samantha Létourneau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:46:04