JWT学习笔记

JWT基础知识

1. JWT是什么?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于作为JSON对象在各方之间安全的传输信息。该信息可以被验证和信任,因为它是数字签名的。
JWT官网: https://jwt.io/

2. JWT的使用场景有哪些?

3. JWT的数据结构

JWT学习笔记_第1张图片
如图所示,JSON Web Token由三部分组成,它们之间用圆点(.)连接。这三部分分别是:
> Header
> Payload
> Signature

因此,一个典型的JWT看起来是这个样子的:xxxxx.yyyyy.zzzzz
接下来,具体看一下每一部分:

  • Header

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

Header部分是一个JSON对象,描述JWT的元数据。包含以下两个属性:
> typ: 令牌的类型,JWT令牌统一写为JWT;
> alg: 签名算法的类型,默认是 HMAC SHA256(写成 HS256);
在这里插入图片描述
对这个JSON对象进行BASE64URL编码即得到Header部分对应的字符串

  • Payload

Payload也是一个JSON对象,用于存放实际需要传递的数据,官方规定了如下7个字段,一共选用:

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的Header和Payload默认是不加密的,所以,不要在JWT的Header或Payload中存放敏感信息。
对Payload进行BASE64URL编码即得到JWT的第二部分

  • Signature

Signature,签名部分,主要用于验证消息在传递过程中用是否有被更改。
为了得到签名部分,你必须有编码过的header、编码过的payload、一个秘钥;然后使用Header中指定的签名算法对它们进行签名即可。官方实例如下:

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), your-256-bit-secret)

签名是用于验证消息在传递过程中有没有被更改,并且,对于使用私钥签名的token,它还可以验证JWT的发送方是否为它所称的发送方。

4. JWT是如何工作的?

5. 基于JWT(token)的身份认证与基于服务器(session)的认证方式的比较

JWT包含的内容:
head: alg(算法) + typ(类型)

参考文档

认识JWT
JSON Web Token 入门教程
JWT全面解读
讲真,别再使用JWT了!

Golang中JWT的使用

golang JWT 包生成 Token, 验证 Token
golang JWT的简单使用
[Golang]JWT及其Golang实现

你可能感兴趣的:(other)