不安分的黑娃
踏踏实实,坚持学习,慢慢就懂了~

JSON Web Token (JWT)

官网

什么是 JWT ?

JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。
JWT可以使用密码(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。

加签后的token 能够使用 JWT 里的算法验证 json 的完整性.

什么时候使用 JWT ?

  1. 授权
  2. 信息交换

JWT 格式

使用逗号分隔的三部分 :

  • Header
  • Payload
  • Signature
    token 格式:xxxxx.yyyyy.zzzzz

Header 通常由 token 类型和签名算法名两部分组成.是token的第1部分
例如:

{
  "alg": "HS256",   // 签名算法
  "typ": "JWT"       // token类型
}

然后, 这个JSON 使用 Base64Url 编码后放到 JWT 的第1部分.

Payload

Payload 是token的第2部分.包含了一些声明(claims).声明的名字必须是唯一的.
claims 是包含了 用户数据和其他数据的陈述,

有三种类型的声明:

  1. Registered Claim Name
    预定义好的一些声明(如果有需要就使用,没需要可不使用):
  • "iss"
  • "sub"
  • "aud"
  • "exp"
  • "nbf"
  • "iat"
  • "jti"

更多参见 https://www.iana.org/assignments/jwt/jwt.xhtml

  1. Public Claim Names
    公共的声明,可以预先定义在 IANA JSON Web Token Registry 中,或者定义在1个能解决名字冲突的地方.

  2. Private Claim Names
    双方共享数据使用的私有名字.既不在 Registered Claim Name 也不在 Public Claim Names 中.

payload 示例

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

然后, 这个JSON 使用 Base64Url 编码后放到 JWT 的第2部分.

Signature

拿到编码后的 header 和 编码后的 payload 使用 密码进行签名.

使用 HMAC SHA256 加签示例:

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

JSON Web Tokens 工作原理

在认证时,用户登录成功后,就会返回一个JSON Web Token.

当用户访问一个受保护的路由资源或者时,需要将
JWT 放到 Header 的 Authorization 属性中,并且前边需加上" Bearer ",如下示例

Authorization: Bearer <token>

服务器会校验 Header 的 Authorization 中的JWT ,
image

生成JWT 的 java 库

推荐地址:https://jwt.io/libraries?language=Java
image

image

posted on 2022-03-04 11:01  不安分的黑娃  阅读(185)  评论(0编辑  收藏  举报