JWT是一种无状态的开放标准,用于安全传输用户信息,由Header、Payload、Signature三部分组成;在ASP.NET Core中,通过添加JwtBearer认证服务、配置TokenValidationParameters参数,并在登录接口生成令牌,实现API安全验证;使用[Authorize]特性保护接口,客户端在请求头携带Bearer Token进行身份验证。
在ASP.NET Core Web API中实现JWT认证是保障接口安全的常见方式。它通过生成一个包含用户信息的加密令牌,让客户端在后续请求中携带该令牌进行身份验证,避免每次请求都登录。
JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以JSON格式安全地传输信息。一个JWT字符串通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),格式为 xxx.yyy.zzz。
例如:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cJWT的优势在于无状态,服务端不需要存储会话信息,适合分布式系统和前后端分离架构。
在 Program.cs 中添加JWT认证配置:
安装NuGet包(若未安装):
Microsoft.AspNetCore.Authentication.JwtBearer在 Program.cs 中配置服务:
var builder = WebApplication.CreateBuilder(args);
// 添加JWT认证所需的服务
builder.Services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
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令牌。
示例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; }
}
使用 [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相关配置写入 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机制和更细粒度的权限控制。
# word
# js
# json
# go
# app
# iis
# 后端
# mac
# ai
# 路由
# microsoft
# 状态码
# c#
# 安全传输
# 架构
# 分布式
# 中间件
# Token
# 字符串
# 接口
# 数据库
# 令牌
# 是一种
# 身份验证
# 客户端
# 不需要
# 并在
# 所需
# 能在
# 这两个
# 创建一个
相关文章:
如何快速搭建高效WAP手机网站?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
建站之星导航菜单设置与功能模块配置全攻略
官网网站制作腾讯审核要多久,联想路由器newifi官网
移民网站制作流程,怎么看加拿大移民官网?
香港网站服务器数量如何影响SEO优化效果?
成都网站制作报价公司,成都工业用气开户费用?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
,怎么在广州志愿者网站注册?
建站主机空间推荐 高性价比配置与快速部署方案解析
网站制作公司排行榜,抖音怎样做个人官方网站
免费网站制作appp,免费制作app哪个平台好?
深圳网站制作平台,深圳市做网站好的公司有哪些?
建站之星如何快速解决建站难题?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何选择建站程序?包含哪些必备功能与类型?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
建站之星后台管理如何实现高效配置?
南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?
如何在IIS中新建站点并配置端口与IP地址?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
建站之星伪静态规则如何设置?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
如何零成本快速生成个人自助网站?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
建站之星如何通过成品分离优化网站效率?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
公众号网站制作网页,微信公众号怎么制作?
如何基于云服务器快速搭建个人网站?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
如何在局域网内绑定自建网站域名?
如何选择CMS系统实现快速建站与SEO优化?
如何快速辨别茅台真假?关键步骤解析
长沙企业网站制作哪家好,长沙水业集团官方网站?
如何通过wdcp面板快速创建网站?
Python多线程使用规范_线程安全解析【教程】
青浦网站制作公司有哪些,苹果官网发货地是哪里?
如何选购建站域名与空间?自助平台全解析
建站之星安装模板失败:服务器环境不兼容?
定制建站流程步骤详解:一站式方案设计与开发指南
济南企业网站制作公司,济南社保单位网上缴费步骤?
如何在阿里云购买域名并搭建网站?
宝塔Windows建站如何避免显示默认IIS页面?
潮流网站制作头像软件下载,适合母子的网名有哪些?
如何通过虚拟主机快速搭建个人网站?
如何构建满足综合性能需求的优质建站方案?
如何用花生壳三步快速搭建专属网站?
测试制作网站有哪些,测试性取向的权威测试或者网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。