【token】JWT详解1基本说明

什么是JWT

  • JWT全称JSON Web Token ,是基于RFC 7519的签名验证方法
  • 可以使用HMAC、RSA或ECDSA的公用/专用密钥对对JWT进行签名
  • JWT可用于授权和信息交换

格式

JWT通过.进行分割,包括

  • Header
  • Payload
  • Signature

形式为 xxxxx.yyyyy.zzzzz

格式详解

Header

header的作用是声明使用jwt,并告知是用什么加密算法

{
  "alg": "HS256", //还可以是HMAC或者RSA
  "typ": "JWT"  //必定是JWT
}

然后通过base65url进行编码。

Payload

这部分是主要的数据,最后形如

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

和上面一样,也是base64Url编码的。

注意,JWT可以被校验不可更改,但是内容信息并不是加密的,所以不能传输机密信息

可以是以下三种类型

registered

这里内容不强制,推荐按下面的

 iss (issuer), exp (expiration time), sub (subject), aud (audience)

注意的是,name必须是三个字符
可以参考 https://www.iana.org/assignments/jwt/jwt.xhtml ,这是规定好的可以直接拿来用,一般也就够用了

public

可以随意定义,如果上面的没有需要去注册

private claims

这种也是随意定义的,但是不需要去注册

Signature 签名

根据上面header声明的加密方式,对这3部分进行加密,比如使用HMAC SHA256,就这样加密字符

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

加密后范例

最终我们会得到如下的字符串

在这里插入图片描述

我们可以在 https://jwt.io/#debugger-io 去校验生成的JWT是否符合规范。

使用JWT

Header

Authorization: Bearer <token>

总结

  • JWT作为常用的校验方式很值得学习
  • 加密字符中不能写入机密数据,因为JWT可以被解密看到,只是不能被篡改

参考资料

  • https://jwt.io/
  • https://tools.ietf.org/html/rfc7519#section-4.1
  • https://jwt.io/#debugger-io
雨果虾滑猫 CSDN认证博客专家 PHP MySQL Python
CSDN博客专家。PHP/MYSQL/Elasticsearch,PMP项目管理 ,产品设计。6年服务端开发,2年产品,连续创业者,曾经参与区块链、新零售行业创业。Gitchat作者,曾在Gitcchat发布智能合约相关课程。
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值