简介
JWT(json web token)是一种基于json的,在网络上声明某种主张的令牌(token)。JWT定义了一种紧凑且自包含的方式,用于作为JSON对象在各方之间安全地传输信息。一般使用对称加密(HMAC算法)或非对称加密(RSA)进行签名。
结构
JWT一般包含三个部分: 头部信息(Header),消息体(Payload), 签名(Signature)
头信息 Header
头信息由两部分组成: alg 和typ
"{'alg': 'HS256', 'typ': 'jwt'}"
alg 指定了加密方式,HMAC-SHA256或者RSA
typ 指定了类型,是否为jwt
消息体 Payload
消息体包含了jwt的意图,可以包含多个字段
消息体一般会进行base64编码
"{'mobile_number': '17300000000', 'name': 'whj'}"
签名 Signature
对密钥和对header与payload组成的字符串进行签名
key = 'secret_key'
unsign_token = Base64.encode64(header) + '.' + Base64.encode64(payload)
signature = HMAC-SHA256(key, unsign_token)
总体组成
token = Base64.encode64(header) + '.' + Base64.encode64(payload) + '.' + Base64.encode64(signature)
JWT常常被用作保护服务端的资源(resource),客户端通常将JWT通过HTTP的Authorization header发送给服务端,服务端使用自己保存的key计算、验证签名以判断该JWT是否可信