博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JWT
阅读量:4338 次
发布时间:2019-06-07

本文共 1243 字,大约阅读时间需要 4 分钟。

JWT 的原理

服务器认证后,发送一个JSON对象给用户。之后用户与服务器通信的时候,都要发回这个JSON对象。同时,为了防止用户篡改数据,服务器生成这个数据的时候,会加上签名。

JWT 的数据结构

它是一个很长的字符串,中间用点(.)分隔成三个部分。

三个部分一次如下:

  • Header(头部)
  • Payload(负载)
  • Signature(签名)

Header

JSON对象,描述 JWT 的元数据

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

alg表示签名的算法,默认是 HMAC SHA256(写成 HS256)

typ表示令牌的token类型,JWT令牌统一写为JWT

最后使用Base64URL 算法将他转换成字符串

Payload

JSON对象,用来存放实际需要传递的数据。

7个官方字段:

  • iss (issuer):签发人
  • exp (expiration time):过期时间
  • sub (subject):主题
  • aud (audience):受众
  • nbf (Not Before):生效时间
  • iat (Issued At):签发时间
  • jti (JWT ID):编号

也可以定义私有字段,但不能存放私密字段,除非是加密的

最后使用Base64URL 算法将他转换成字符串

Signature

对前两部分的签名,防止数据篡改

首先,指定一个只有服务器才知道的密钥secret,之后使用header中的签名算法使用如下方式产生签名,默认(HMAC SHA256)

HMACSHA256(  base64UrlEncode(header) + "." +  base64UrlEncode(payload),  secret)

最后将以上三部分字符串拼接,拼接处用.分隔

Base64URL

类似于Base64,但是有些小的不同。

JWT令牌可能会放在URL中,Base64 有三个字符+/=,在 URL 里面有特殊含义,所以要被替换掉:=被省略、+替换成-/替换成_ 。这就是 Base64URL 算法。

JWT 的使用方式

(1)放在客户端的cookie或localStroage中,放在cookie中每次请求都会自动发送,但是不能跨域

(2)放在请求头信息Authorization字段里面

(3)放在post请求体中

JWT 的几个特点

(1)JWT默认时不加密的,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。不加密的情况下,不能将秘密数据写入JWT

(2)JWT不仅可以用于认证,也可以用于交换信息

(3)为减少盗用,JWT不应该用HTTP明码传输,而使用HTTPS,对于比较重要的权限,应该进行二次验证

(4)JWT的缺点,由于保存在客户端,因此服务端在token到期之前是不可控的,尽量减短token的过期时间

 

转载于:https://www.cnblogs.com/goOtter/p/10107344.html

你可能感兴趣的文章
每日一小练——支配值数目
查看>>
bbed初体验
查看>>
C#委托与事件讲解大结局
查看>>
CSS基础学习目录
查看>>
JavaScript学习03 JS函数
查看>>
signal信号类型列表
查看>>
iptables之五iptables之nat
查看>>
redhat openshift 跳转
查看>>
10.24饮食
查看>>
洛谷U36590搬书
查看>>
游戏项目一笔记
查看>>
Android入门(二):Android工程目录结构
查看>>
k8s--yml文件
查看>>
拆分json格式数组
查看>>
C语言第三次博客作业---单层循环结构
查看>>
python 最小二乘 leastsq 函数实现 法线式 解决与x轴垂直问题
查看>>
20135234mqy-——信息安全系统设计基础第十四周学习总结
查看>>
oracle添加时间格式问题(ORA-01810: 格式代码出现两次)
查看>>
ios uitableview button 获取cell indexpath.row
查看>>
Objective-C 静态变量 使用方法
查看>>