新闻中心
C#如何实现JWT(JSON Web Token)认证?ASP.NET Core Web API安全入门
JWT是一种无状态的开放标准,用于安全传输用户信息,由Header、Payload、Signature三部分组成;在ASP.NET Core中,通过添加JwtBearer认证服务、配置TokenValidationParameters参数,并在登录接口生成令牌,实现API安全验证;使用[Authorize]特性保护接口,客户端在请求头携带Bearer Token进行身份验证。

在ASP.NET Core Web API中实现JWT认证是保障接口安全的常见方式。它通过生成一个包含用户信息的加密令牌,让客户端在后续请求中携带该令牌进行身份验证,避免每次请求都登录。
什么是JWT?
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以JSON格式安全地传输信息。一个JWT字符串通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),格式为 xxx.yyy.zzz。
例如:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cJWT的优势在于无状态,服务端不需要存储会话信息,适合分布式系统和前后端分离架构。
配置JWT认证服务
在 Program.cs 中添加JWT认证配置:
安装NuGet包(若未安装):
Microsoft.AspNetCore.Authentication.JwtBearer在 Program.cs 中配置服务:
var builder = WebApplication.CreateBuilder(args);
// 添加JWT认证所需的服务
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.Auth
enticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
};
});
builder.Services.AddAuthorization();
var app = builder.Build();
// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();
确保这两个中间件在路由之后、控制器之前调用。
生成JWT令牌
创建一个简单的登录接口,在用户凭证验证通过后生成JWT令牌。
AdMaker AI
从0到爆款高转化AI广告生成器
65
查看详情
示例Controller代码:
[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase
{
[HttpPost("login")]
public IActionResult Login([FromBody] LoginModel model)
{
// 这里应验证用户名密码(可对接数据库或Identity)
if (model.Username == "admin" && model.Password == "password")
{
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.UTF8.GetBytes("your-very-secret-key-that-is-long-enough"); // 应从配置读取
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, model.Username),
new Claim(ClaimTypes.Role, "User") // 可扩展角色
}),
Expires = DateTime.UtcNow.AddHours(2),
Issuer = "your-site.com",
Audience = "users",
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
return Ok(new { Token = tokenString });
}
return Unauthorized();
}
}
定义LoginModel:
public class LoginModel
{
public string Username { get; set; }
public string Password { get; set; }
}
保护API接口
使用 [Authorize] 特性标记需要认证的控制器或方法:
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class SecureController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
var username = User.Identity.Name;
return Ok(new { Message = $"Hello, {username}", Time = DateTime.Now });
}
}
启动项目后,先调用 /api/auth/login 获取token,然后在后续请求的Header中添加:
Authorization: Bearer如果token无效或过期,将返回401状态码。
配置JWT参数(推荐做法)
将JWT相关配置写入 appsettings.json:
"Jwt": {
"Key": "your-super-secret-key-must-be-long-enough-for-security",
"Issuer": "your-site.com",
"Audience": "users"
}
在代码中通过 builder.Configuration["Jwt:Key"] 读取,提高可维护性。
基本上就这些。只要配置好认证服务、生成token并正确传递,就能在ASP.NET Core中实现基础的JWT认证。实际项目中建议结合数据库验证用户、刷新token机制和更细粒度的权限控制。
以上就是C#如何实现JWT(JSON Web Token)认证?ASP.NET Core Web API安全入门的详细内容,更多请关注其它相关文章!
# 桃源软件网站建设
# 如何将
# 操作指南
# 身份验证
# 客户端
# 序列化
# 不需要
# 企业营销推广学会会长
# 网站建设老张
# 如何实现
# 建筑设计公司网站建设
# 重庆seo专业术语
# 网站建设策划方式有哪些
# 2017最新网站seo
# 天津本地网站排名优化
# 市场营销推广策略品牌分析
# 海南关键词排名优化服务
# 路由
# js
# json
# go
# app
# iis
# 后端
# mac
# ai
# word
# microsoft
# 状态码
# c#
# 安全传输
# .
# 令牌
# 是一种
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
邮政快递包裹最新位置 邮政快递实时追踪入口
印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
必由学官方平台入口 必由学在线课堂登录地址
J*aScript中赋值与自增运算符的复杂交互与执行机制
Go语言中的*string:深入理解字符串指针
苹果手机如何防止被恶意App追踪
Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧
如何仅使用CSS更改登录界面背景图像图标的颜色
mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析
内存疯狂猛猛涨价:主板销量直接腰斩!
jQuery Mask 插件中实现电话号码固定前导零的教程
AO3镜像入口大全 AO3网页版内容访问全集
Fabric模组开发:自定义物品与物品组的现代管理方法
AO3最新镜像入口 Archive of Our Own官方平台访问
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
支付宝碰一碰设备是REDMI手机吗 博主拆机辟谣:处理器、内存都不一样
Golang如何使用const iota_Go iota常量计数器讲解
J*aScript中针对特定容器内图片动画的实现教程
C++指针和引用有什么区别_C++内存管理核心概念深度解析
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId
Golang如何安装Swagger工具_GoSwagger文档生成环境
天眼查怎么看公司融资情况 天眼查企业融资历史查询步骤【攻略】
Python字典中优雅地迭代剩余元素的方法
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
漫蛙网页登录入口 漫蛙漫画官方授权网址
Win11网速慢怎么解决 Win11网络设置优化解除限速
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
Lar*el如何正确地在控制器和模型之间分配逻辑_Lar*el代码职责分离与架构建议
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
Tabulator表格日期时间排序问题及自定义解决方案
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
QQ邮箱在线使用入口 QQ邮箱个人账号网页版登录
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
AO3官网镜像链接 Archive of Our Own同人文在线浏览
Go语言中动态执行代码字符串的策略与实践
J*aScript DOM操作:高效清空列表元素的策略与实践
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
探索高级语言到原生C/C++的转译:挑战与内存管理策略
J*aScript中安全有效地处理localStorage字符串数据
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
知音漫客官网漫画下载_知音漫客网页版阅读记录
TikTok搜索不到用户发布内容怎么办 TikTok用户内容搜索优化方法
魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
天猫2025双十一0点秒杀攻略 天猫爆款抢购时间


2025-12-08
浏览次数:次
返回列表
enticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = builder.Configuration["Jwt:Issuer"],
ValidAudience = builder.Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
};
});
builder.Services.AddAuthorization();
var app = builder.Build();
// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();