这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
什么是jwt
JSON Web Token (JWT) 是一个开源标准(RFC 7519),它定义了一种紧凑且自完备的方法用于在各参与方之间以JSON对象传递信息。以该种方式传递的信息已经被数字签名,因而可以被验证并且被信任。JWT既可以使用盐(secret)(HMAC算法)进行签名,也可以使用基于RSA/ECDSA算法的公钥/秘钥对进行签名
应用场景
- 认证:只要用户完成登录,其随后的请求都会包含JWT,以允许用户访问经由当前JWT授权的路由、服务或者是资源
- 信息交换:由于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的长度限制在需要的范围内。