ASP.NET Core如何配置JWT认证从自定义AccessToken头部读取令牌
解决方案
可行性确认
使用Microsoft.AspNetCore.Authentication.JwtBearer原生即可实现自定义头部读取JWT令牌的需求,无需引入额外依赖。JWT认证中间件提供了OnMessageReceived事件,专门用于自定义令牌的获取逻辑。
具体配置代码
修改你的服务注册逻辑,在AddJwtBearer配置中添加事件处理即可:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options => { Configuration.Bind("JwtSettings", options); // 注册自定义令牌获取事件 options.Events = new JwtBearerEvents { OnMessageReceived = context => { // 从自定义的AccessToken头读取令牌 if (context.Request.Headers.TryGetValue("AccessToken", out var accessTokenValue)) { // 可选:如果你的令牌值带Bearer前缀,需要先截取 var token = accessTokenValue.ToString(); if (token.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase)) { token = token.Substring("Bearer ".Length).Trim(); } context.Token = token; } return Task.CompletedTask; } }; });
注意事项
- 请确保中间件注册顺序正确,
app.UseAuthentication()必须放在app.UseAuthorization()之前 - 如果需要同时兼容标准
Authorization头和自定义AccessToken头,可在上述逻辑中增加判断,优先读取你需要的令牌来源即可 - 若获取令牌逻辑比较复杂,也可以单独封装成方法注入到事件中,无需都写在配置块里
内容的提问来源于stack exchange,提问作者Jossean Yamil
相关产品推荐
相关产品推荐

