C#如何实现JWT(JSON Web Token)认证?ASP.NET Core Web API安全入门

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

c#如何实现jwt(json web token)认证?asp.net core web api安全入门

在ASP.NET Core Web API中实现JWT认证是保障接口安全的常见方式。它通过生成一个包含用户信息的加密令牌,让客户端在后续请求中携带该令牌进行身份验证,避免每次请求都登录。

什么是JWT?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以JSON格式安全地传输信息。一个JWT字符串通常由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),格式为 xxx.yyy.zzz

例如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT的优势在于无状态,服务端不需要存储会话信息,适合分布式系统和前后端分离架构。

配置JWT认证服务

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令牌

创建一个简单的登录接口,在用户凭证验证通过后生成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; }}

保护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安全入门的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442803.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 19:24:42
下一篇 2025年12月17日 19:24:55

相关推荐

发表回复

登录后才能评论
关注微信