认识JWT | 青训营笔记

79 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

什么是jwt

JSON Web Token (JWT) 是一个开源标准(RFC 7519),它定义了一种紧凑且自完备的方法用于在各参与方之间以JSON对象传递信息。以该种方式传递的信息已经被数字签名,因而可以被验证并且被信任。JWT既可以使用盐(secret)(HMAC算法)进行签名,也可以使用基于RSA/ECDSA算法的公钥/秘钥对进行签名

应用场景

  1. 认证:只要用户完成登录,其随后的请求都会包含JWT,以允许用户访问经由当前JWT授权的路由、服务或者是资源
  2. 信息交换:由于JWT可以被签名(例:使用公钥/秘钥对),因而可用于确认发送者自称的身份

JWT结构

Json Web Token由以下三部分组成:

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

Header

典型的JWT header包含两个部分:(1) token类型,即JWT。(2) 所使用的签名算法,比如HMAC SHA256或者RSA。

Payload

JWT token的第二部分是包含了声明的payload,声明是一个实体的表述加上额外信息,一共有三种形式的声明:注册共有私有

注册声明: iss: jwt签发者 sub: jwt使用者 aud: jwt接收者 exp: jwt过期时间,该时间必须大于签发时间 nbf: 定义在某个时间之前,该jwt都是不可用的 iat: jwt签发时间 jti: jwt唯一身份标注,主要用于一次性token,从而避免重放攻击

Signature

JWT的第三部分是签名信息,Signature由三部分组成:

  • header(base64加密后)
  • payload(base64加密后)
  • secret (盐)

JWT如何工作?

在认证(authentication)过程中,当用户使用凭据成功登录后,就会返回一个jwt token。因为jwt token是一种凭据,必须仔细关注其安全问题。一般而言,需要讲token的长度限制在需要的范围内。