如何在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
相关产品推荐
相关产品推荐

