当前位置:首页 > 科技  > 软件

Asp.Net Core实战-JWT详解

来源: 责编: 时间:2024-09-10 09:48:05 185观看
导读在ASP.NET Core应用程序中,权限控制是确保应用安全性和用户体验的重要一环。JWT(JSON Web Tokens)作为一种流行的认证和授权机制,提供了一种安全、可验证的方式来传递用户信息,从而实现无状态的认证和授权。本文将详细探讨

在ASP.NET Core应用程序中,权限控制是确保应用安全性和用户体验的重要一环。JWT(JSON Web Tokens)作为一种流行的认证和授权机制,提供了一种安全、可验证的方式来传递用户信息,从而实现无状态的认证和授权。本文将详细探讨如何在ASP.NET Core中实现基于JWT的权限控制,并提供具体的例子代码。id528资讯网——每日最新资讯28at.com

一、JWT简介

JWT(JSON Web Tokens)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。JWT通常包含三个部分:Header(头部)、Payload(负载)和Signature(签名)。id528资讯网——每日最新资讯28at.com

  • Header:包含令牌的元数据,如令牌的类型(通常是JWT)和签名算法(如HMAC SHA256或RSA)。
  • Payload:包含有关用户的信息和其他声明(claims)。声明可以包括用户标识、用户角色、权限等。
  • Signature:用于验证令牌的真实性和完整性。签名是使用头部中指定的算法和密钥对头部和负载进行签名生成的。

二、JWT的优势

  1. 安全性:JWT使用数字签名来验证令牌的真实性,确保用户身份的安全性。
  2. 无状态性:JWT是无状态的,服务器不需要在后端存储任何会话信息,减轻了服务器的负担。
  3. 可扩展性:JWT可以轻松地与其他身份验证和授权机制集成,如OAuth和OpenID Connect。
  4. 灵活性:JWT可以包含自定义的声明信息,可以根据应用程序的需求进行扩展。

三、在ASP.NET Core中实现JWT认证

1. 安装依赖包

首先,你需要在ASP.NET Core项目中安装JWT相关的依赖包。可以使用NuGet包管理器来安装Microsoft.AspNetCore.Authentication.JwtBearer包。id528资讯网——每日最新资讯28at.com

dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

2. 配置JWT身份验证

在Startup.cs文件的ConfigureServices方法中,你需要配置JWT认证服务。这包括指定JWT的签发者(Issuer)、受众(Audience)、密钥(SigningKey)等信息,并添加JWT Bearer认证中间件。id528资讯网——每日最新资讯28at.com

public void ConfigureServices(IServiceCollection services){    // 其他服务配置...    var tokenValidationParameters = new TokenValidationParameters    {        ValidateIssuer = true,        ValidateAudience = true,        ValidateLifetime = true,        ValidateIssuerSigningKey = true,        ValidIssuer = "YourIssuer", // 替换为你的Issuer        ValidAudience = "YourAudience", // 替换为你的Audience        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecurityKey")) // 替换为你的密钥    };    services.AddAuthentication(options =>    {        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;    })    .AddJwtBearer(options =>    {        options.TokenValidationParameters = tokenValidationParameters;        options.SaveToken = true;    });    // 如果需要,添加授权策略    services.AddAuthorization(options =>    {        options.AddPolicy("YourPolicy", policy =>        {            policy.RequireClaim("permission", "your_permission_value"); // 根据需求添加Claim验证        });    });}

3. 在HTTP请求管道中添加认证和授权中间件

在Startup.cs文件的Configure方法中,确保认证和授权中间件被添加到管道中。id528资讯网——每日最新资讯28at.com

public void Configure(IApplicationBuilder app, IWebHostEnvironment env){    // 其他中间件配置...    app.UseRouting();    app.UseAuthentication(); // 启用认证中间件    app.UseAuthorization(); // 启用授权中间件    // 其他中间件配置...}

4. 生成JWT Token

在用户登录成功后,你需要生成一个JWT Token并返回给客户端。可以使用JwtSecurityToken和JwtSecurityTokenHandler类来生成JWT。id528资讯网——每日最新资讯28at.com

using Microsoft.IdentityModel.Tokens;using System.IdentityModel.Tokens.Jwt;using System.Security.Claims;using System.Text;public string GenerateJwtToken(string userId, string userName, string[] roles){    var tokenHandler = new JwtSecurityTokenHandler();    var key = Encoding.UTF8.GetBytes("YourSecurityKey"); // 替换为你的密钥    var tokenDescriptor = new SecurityTokenDescriptor    {        Subject = new ClaimsIdentity(new[]        {            new Claim(ClaimTypes.Name, userName),            new Claim(ClaimTypes.NameIdentifier, userId),            // 添加其他自定义Claim,如角色等            new Claim(ClaimTypes.Role, string.Join(",", roles))        }),        Expires = DateTime.UtcNow.AddDays(7),        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)    };    var token = tokenHandler.CreateToken(tokenDescriptor);    var tokenString = tokenHandler.WriteToken(token);    return tokenString;}

5. 使用JWT Token进行认证

客户端在后续的请求中会将JWT Token包含在请求头中发送给服务器。服务器通过验证JWT Token的有效性来确认用户的身份和权限。id528资讯网——每日最新资讯28at.com

[Authorize]public IActionResult SecureAction(){    // 只有经过JWT认证的用户才能访问此方法    return Ok("Access Granted");}

四、总结

JWT提供了一种强大且灵活的方式来管理用户身份和权限,特别适用于分布式系统和无状态的应用场景。在ASP.NET Core中,通过安装必要的NuGet包、配置JWT认证服务、生成JWT Token并在HTTP请求中使用它,可以轻松地实现基于JWT的权限控制。希望本文能帮助你理解JWT的工作原理,并将其应用到实际项目中,提升应用的安全性和用户体验。id528资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-112732-0.htmlAsp.Net Core实战-JWT详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Elasticsearch 使用误区—单次请求获取大量数据

下一篇: PyTorch 训练,除了会训练还要了解这些

标签:
  • 热门焦点
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 携众多高端产品亮相ChinaJoy,小米带来一场科技与人文的视听盛宴

    7月28日,全球数字娱乐领域最具知名度与影响力的年度盛会中国国际数码互动娱乐展览会(简称ChinaJoy)在上海新国际博览中心盛大开幕。作为全球领先的科
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • iQOO Neo8系列今日官宣:首发天玑9200+ 全球安卓最强芯!

    在昨日举行的的联发科新一代旗舰芯片天玑9200+的发布会上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品将全球首发搭载这款当前性能最强大的移动平台
  • 与兆芯合作 联想推出全新旗舰版笔记本电脑开天N7系列

    联想与兆芯合作推出全新联想旗舰版笔记本电脑开天 N7系列。这个系列采用兆芯KX-6640MA处理器平台,KX-6640MA 处理器是采用了陆家嘴架构,16nm 工艺,4 核 4 线
Top