.NET 中 JWT 的应用解析,你学会了吗?

开发 前端
JWT 是一种开放标准(RFC 7519),用于在各方之间以紧凑、自包含的方式安全传输信息。它由三部分构成:头部(Header)、载荷(Payload)、签名(Signature)。

在现代 Web 开发领域,安全且高效的身份验证与授权机制至关重要,JSON Web Token(JWT)成为了广泛应用的解决方案,尤其在.NET 生态系统里,它与各类应用适配良好,助力开发者打造安全可靠的服务端与客户端交互流程。

一、JWT 基础概念

JWT 是一种开放标准(RFC 7519),用于在各方之间以紧凑、自包含的方式安全传输信息。它由三部分构成:头部(Header)、载荷(Payload)、签名(Signature)。头部通常包含令牌类型(如 “JWT”)及加密算法信息,像 HS256 等;载荷承载用户身份标识、权限范围、有效期等关键声明数据;签名则是通过头部与载荷结合秘密密钥或公钥私钥对生成,用于验证消息完整性及来源真实性,确保数据未被篡改。

二、.NET 中 JWT 操作库

在.NET 里,有像  System.IdentityModel.Tokens.Jwt  这样的内置工具,同时社区热门库如  JWT.NET  提供更便捷功能。以  JWT.NET  为例,通过 NuGet 引入后,可快速构建令牌。如创建令牌:

var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes("your_secret_key"); 
var tokenDescriptor = new SecurityTokenDescriptor
{
    Subject = new ClaimsIdentity(new Claim[]
    {
        new Claim(ClaimTypes.Name, "user_name"),
        new Claim(ClaimTypes.Role, "admin") 
    }),
    Expires = DateTime.UtcNow.AddHours(1),
    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.Hs256) 
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);

此代码段定义用户主体、有效期、签名凭证,生成含特定用户信息的加密令牌字符串,用于后续客户端请求携带认证。

三、集成到 ASP.NET 应用

在 ASP.NET Core 项目中,常在 Startup.cs 里配置认证服务。利用中间件,验证传入请求令牌:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
   .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("your_secret_key")),
            ValidateIssuer = false,
            ValidateAudience = false,
            ClockSkew = TimeSpan.Zero 
        };
    });
    services.AddControllers();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

这确保 API 受保护,仅合法携带有效令牌请求可访问对应资源,保障应用安全边界,让基于.NET 的 Web 应用在分布式、多端交互场景稳健运行,适应如今复杂多变的业务需求。

责任编辑:武晓燕 来源: 程序员编程日记
相关推荐

2024-03-26 07:58:12

Redis编程模型

2024-12-05 08:58:20

类加载JVMJava 虚拟机

2020-08-14 09:11:29

RedisQPS数据库

2021-05-19 08:31:15

压测数据结构与算法工具

2021-03-18 14:34:34

达达集团京东云电商

2023-08-29 07:46:08

Redis数据ReHash

2024-11-26 08:52:34

SQL优化Kafka

2023-03-21 08:02:36

Redis6.0IO多线程

2020-02-27 15:44:41

Nginx服务器反向代理

2024-02-26 21:15:20

Kafka缓存参数

2020-02-27 21:03:30

调度器架构效率

2018-04-25 10:13:30

Redis内存模型

2024-05-28 08:09:27

2022-01-04 08:54:32

Redis数据库数据类型

2024-07-24 08:38:07

2020-10-21 09:17:52

Redis面试内存

2012-08-22 09:32:54

面试面试题

2013-06-19 10:55:40

Disruptor并发框架

2022-09-24 09:52:42

TopicQueuekafka

2020-03-30 15:05:46

Kafka消息数据
点赞
收藏

51CTO技术栈公众号