JWT简介
JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以在各方之间作为JSON对象安全地传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用秘密(搭配HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。多用于无状态的身份认证(无状态指服务端不会持久化token).
JWT构造
- token表现形式
xxxxx.yyyyy.zzzzz
分别为Header(头),Payload(有效载荷),Signature(签名)
构造详解
- 第一部分为Header,包含了两个字段,一个表示为采用JWT加密的type字段,二个为token中第三个参数加密的算法(HMAC SHA256,RSA).最终将两个字段构造为json格式经过BASE64Url加密成为密钥的第一部分。
{
"typ": "JWT",
"alg": "HS256"
}
- 第二部分为Payload,包含了实体(通常为用户信息),以及其他数据的声明.最终也会作为json格式通过BASE64Url方式加密形成token第二部分
Payload包含了三种声明:
- 已注册的声明(官方已经预定义),包括iss(发行人),exp(到期时间),sub(主题),aud(观众)等.声明的名称不超过三个字符.
- 公开声明,由使用JWT的人随意定义,公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.
- 私有声明,由提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。
- 例子:
{
"iss": "Online JWT Builder",
"iat": 1416797419,
"exp": 1448333419,
"aud": "www.gusibi.com",
"sub": "uid",
"nickname": "goodspeed",
"username": "goodspeed",
"scopes": [ "admin", "user" ]
}
- 部分已注册声明: