个人学习笔记-非原创-JWT

JWT = JSON Web Tokens

一、JWT概述

JSON Web Tokens(缩写 JWT)是目前最流行的跨域认证解决方案。

JWT的认证过程如下图:

img

二、JWT 的原理

三、JWT的数据结构

JWT分为三部分

  • Header(头部)
  • Payload(负载) //这里也称为body,Java使用方法时为:Claims
  • Signature(签名)

所以一个token的结构就是这样的:

Header.Payload.Signature

在这里插入图片描述

它是一个很长的字符串,中间用点(.)分隔成三个部分。注意,JWT 内部是没有换行的,这里只是为了便于展示,将它写成了几行。

在这里插入图片描述

1.分别介绍三部分

①.Header(头部)

Header包含的信息:

{

​ “alg”: “HS256”,

​ “typ”: “JWT”

}

也就是说,header含有两个属性,**算法(algorithm)**和 类型(type)

算法:alg属性表示签名算法(algorithm),默认是 HMAC SHA256(写成 HS256);

类型:typ属性表示这个令牌(token)的类型(type),JWT 令牌统一写为JWT。

​ 设置好算法和类型属性值后,将其进行Base64URL编码,然后向下进行负载的设置

②.Payload( 负载 )

Payload包含的信息:

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

以上信息字段是由官方提供,是可选择的,你可以根据需求选择部分字段设置相应的信息。

而除了上面这些,你也可以自定义私有字段,例如下面这部分Payload:

{
“sub”: “1234567890”, //官方字段
“name”: “John Doe”, //自定义
“admin”: true //自定义
}

值得注意的是:JWT默认情况下是不加密的,这意味着任何人都可以随意读取到这里的信息,所以不要放入秘密信息在这里

​ 设置好负载字段值后,也将其使用Base64URL编码,然后向下进行前面的设置

③.Signature( 签名 )

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

那么为了安全性,签名就需要一个密匙(SecretKey),这个密匙只能让在服务端设置,也就是只有后台掌握密匙才能进行有效签发token。一旦密匙被他人知道,那么token就可以被随意签发。

还记得在Header里设置的算法吗?下面将使用算法

在使用Header设置的签名算法前

a.将上面编码后的头部与负载使用 点符号(.)进行拼接,

b.然后再加上密匙

最后进行加密签名

设置的算法吗?下面将使用算法

在使用Header设置的签名算法前

a.将上面编码后的头部与负载使用 点符号(.)进行拼接,

b.然后再加上密匙

最后进行加密签名

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页