学习ASP.NET Core Blazor编程系列二十七——JWT登录(1)

科技资讯 投稿 7900 0 评论

学习ASP.NET Core Blazor编程系列二十七——JWT登录(1)

学习ASP.NET Core Blazor编程系列文章之目录
学习ASP.NET Core Blazor编程系列一——综述
学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)
学习ASP.NET Core Blazor编程系列三——实体
学习ASP.NET Core Blazor编程系列五——列表页面
学习ASP.NET Core Blazor编程系列七——新增图书
学习ASP.NET Core Blazor编程系列八——数据校验
学习ASP.NET Core Blazor编程系列十三——路由(完)
学习ASP.NET Core Blazor编程系列十五——查询
学习ASP.NET Core Blazor编程系列十六——排序
学习ASP.NET Core Blazor编程系列二十——文件上传(完)
学习ASP.NET Core Blazor编程系列二十一——数据刷新
 学习ASP.NET Core Blazor编程系列二十二——登录(1)
 

十、JWT介绍

       JWT只是缩写,全称则是JSON Web Tokens,是目前流行的跨域认证解决方案,是基于开放标准RFC7519,提供一种身份认证与信息交换的解决方案,是一种基于JSON的用于在网络上声明某种主张的令牌(token)。

      由于http的连接是状态的特性,server端和client是不会记住每个请求是谁发过来的,也不会知道当前发送请求的用户是否已经对过身份认证,如果用户的每一个请求,都要与数据库通讯进行身份认证,会增加server和数据库的成本。因此,之前的Web应用一般都会用session或 cookie的方式解決。

 

  1. 用户第一次登录时,后端核对用户名和密码,进行身份认证。
  1. 后端将jwt token字符串作为登录成功的结果返回给client端,client端将返回结果记录在storage中。
  2. 用户再次发起请求时,每次请求都要在请求头中携带这个jwt token,server端在收到这个token之后,进行验证,验证通过,从jwt中读取用户信息,并执行后续操作;验证不能过,返回错误信息。
  3. 退出登录时删除保存的JWT Token即可。

JWT 结构

        一个token分为3部分:头部(header、载荷(payload、签名(signature

        2.载荷(payload,有效载荷部分,是JWT的主体内容部分,是承载消息具体内容的地方,也是一个JSON对象,包含需要传递的数据,需要使用Base64编码。 JWT指定七个默认字段供选择

sub(subject: jwt所面向的用户
aud(audience: 接收jwt的一方, 受众
exp(expiration time: jwt的过期时间,这个过期时间必须要大于签发时间
nbf(Not Before: 生效时间,定义在什么时间之前.
iat(Issued At: jwt的签发时间
jti(JWT ID: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

 

      3.签名(signature,签名哈希部分是对上面两部分数据签名,需要使用base64编码后的header和payload数据,通过指定的算法生成哈希,以确保数据不会被篡改。首先,需要指定一个密钥(secret)。该密码仅仅为保存在服务器中,并且不能向用户公开。然后,使用header中指定的签名算法(默认情况下为HMAC SHA256)根据以下公式生成签名

      header和payload可以直接利用base64解码出原文,从header中获取哈希签名的算法,从payload中获取有效数据

     注意:secretKey只能保存在服务端,而且对于不同的加密算法其含义有所不同,一般对于MD5类型的摘要加密算法,secretKey实际上代表的是盐值

       关于jwt更多信息,可参考jwt.io的说明。

十一、创建JWT服务

  1. 在Visual Studio 2022的解决方案资源管理器中,使用鼠标右键点击“依赖项”,从弹出菜单中选择“管理NuGet程度包”菜单项,或是“工具—》NuGet包管理器器—>管理解决方案的NuGet程序包”菜单。如下图。

      

       2. 在搜索输入框中输入“JWT”,然后安装JWT程序包,如下图。

Install-Package Microsoft.AspNetCore.Authentication.JwtBearer -Version 6.0.11

     4. 在Visual Studio 2022中打开appsettings.json文件,在此配置文件中添加JWT的配置,参考代码如下,注意SecretKey不能设置成太短的纯数字,不然要报错。

{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "ConnectionStrings": { "BookContext": "Server=.;Database=LeaseBooks;Trusted_Connection=True;MultipleActiveResultSets=true" }, "AllowedHosts": "*", "Authentication": { "SecretKey": "Blazor!SecKey@webdemo@vvip.GHTUPAVX", "Issuer": "JWT.Reg22user@Isskl35", "Expires": 10, "Audience": "login.Blazor.audit" } }

 

SecretKey,密匙

Issuer,注册人

Audience,访问人

Expires,到期时间

编程笔记 » 学习ASP.NET Core Blazor编程系列二十七——JWT登录(1)

赞同 (33) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽