在Asp.Net Core中使用JWT认证(一) - JWT介绍

作者 the7
发布于 2020年01月22日
评论 0
浏览 365
文章系列目录
在Asp.Net Core中使用JWT认证(一) - JWT介绍
在Asp.Net Core中使用JWT认证(二) - .Net Core中使用
在Asp.Net Core中使用JWT认证(三) - RSA非对称加密
在Asp.Net Core中使用JWT认证(四) - 跨语言使用
在Asp.Net Core中使用JWT认证(五) - 结束篇 一些常见问题

JWT,全称Json Web Token,是一个开放标准(RFC 7519),以JSON对象在各方安全地传输信息。通俗来说,JWT是一个含签名并携带用户信息的Base64字符串,服务端在收到JWT串时,会进行验签匹配以保证信息未被篡改,验签通过则为合法身份。

一个JWT看起来大概是这样

由图中可以看到,JWT由红紫蓝三部分构成,并由两个点分隔。红色为header部分,紫色为payload部分,最后蓝色为签名部分,所以这三部分组成就是 header.playload .signature。

header部分指定token的类型和使用的算法(HMAC、SHA256、RSA等)

  • HMAC ,Hash Message Authentication Code 散列消息鉴别码,基于密钥的 Hash算法的认证协议。用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。

  • SHA256,Secure Hash Algorithm,安全散列算法,数字签名等密码学应用中重要的工具,安全性高于MD5。

  • RSA,一种非对称加密算法。

头部组成类似:

{
  "alg": "HS256",
  "typ": "JWT"
}

通过Base64编码得到header部分 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

playload 部分

playload是用来存用户信息(claims)的地方,claims有三种类型: registered、 public、private claims。

  • Registered claims: 这些是一组预定义的claims,非强制性的,但是推荐使用, iss(发行人), exp(到期时间), sub(主题), aud(观众)等;

  • Public claims: 自定义claims,注意不要和JWT注册表中属性冲突,这里可以查看JWT注册表

  • Private claims: 这些是自定义的claims,用于在同意使用这些claims的各方之间共享信息,它们既不是Registered claims,也不是Public claims。

常用claims

iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token。

一个playload如

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": "1516239022"
}

通过Base64编码上边JSON得到playload部分eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ

签名部分

签名部分是由前两部分加securityKey组成。

var hs256 = new HMACSHA256(Encoding.ASCII.GetBytes(securityKey));
var encodedSignature = Base64UrlEncoder.Encode(hs256.ComputeHash(Encoding.UTF8.GetBytes(string.Concat(encodedHeader, ".", encodedPayload))));

这三部分组在一起,就得到了最上边图中的Token字符串。

从JWT原理我们知道这些都是Base64字符串,所以,千万不要把敏感信息存入JWT

0条评论

请先登录后发表评论
提交评论
标签云
css (1) less calc (1) C# (4) C#进制转换 (1) asp.net core (8) Authentication (1) 注销 (1) 登录 (1) 验证 (1) scroll-view (1) 微信小程序 (4) 滚动到底部 (1) StackExchange.Redis (1) google (1) 百度 (1) nginx (2) 大文件 (2) 微信小程序c#解密 (1) 微信小程序获取手机号 (1) openid (1) session_key (1) CDN (1) URL鉴权 (1) 阿里云 (1) async (1) await (1) 禁止下拉上滑效果 (1) Index类型 (1) Range类型 (1) dontent publish (1) dotnet publish在线生成器 (1) System.DrawingCore.GDIPlus报错 (1) centos (1) 中文字体 (1) SqlBulkCopy (1) SqlSugar (1) JWT (5) 认证 (3) RSA JWT (1) 非对称加密 (1) 写信 (1) 见字如面 (1) 优化建议 (2) 正确操作字符串 (1) Java (1) JWT退出 (1) RefreshToken (1) .NET Core网站开发框架 (1) Moz (3) 墨子 (1) JSON.NET (1) Newtonsoft (1) System.Text.Json (1) 自定义后台路径 (1) .netcore (1) quartz (2) 作业调度框架 (1) 作业调度 (1) 定时任务 (1) exception (1) 异常处理 (1) HttpClient (1) IHttpClientFactory (1) RDM (1) Redis (1) Redis Desktop Manager (1) RedisDesktopManager (1) linux (1) mac (1) windows (1) Could not get any response (1) postman (1) leetcode (2) 力扣 (1) 回文字符串 (1) 面试刷题 (1) centos7 (1) php安装 (1) 网易云插件 (1) 马甲App (1) Discuz插件 (1) 网易云音乐 (1) Blazor (1) 五子棋 (1) c#解题 (1) 最长连续序列 (1) Swagger (1) 在线文档 (1) blob (1) mp4 (1) 视频 (1) big file (1) 上传 (1) s (1) Azure (1) Azure Key Vault (1) Configuration (1) 密钥保管库 (1) Dapper安装 (1) Dapper是什么 (1) Dapper连接Mysql (1) Dapper连接SqlServer (1) dapper (1)