JWT 指的是 JSON Web Tokens,是一串数据加密后生成的 Token 字符串,通过以下方式服务器端可以判定客户端的身份。
1、客户端用户 userA 使用用户名密码登录服务器
2、服务器返回给用户数据和一串 Token
3、userA 再次请求数据带上 Token,而不用再次输入用户名密码
4、服务器解密 Token,拿出其中标识用户 userA 的userID,从而判定出用户的身份
JSON Web Tokens 构成
JWT 以下列三部分构成:
1、HEADER
{
"alg": "HS256",
"typ": "JWT"
}
alg 是加密算法,typ 是 TOKEN 的类型
2、PAYLOAD
{
"id": "1234567890",
"name": "John Doe",
"admin": true
}
3、VERIFY SIGNATURE
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload) + "." +
secret
)
最后三部分用点号连接起来生成
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEyMzQ1Njc4OTAiLCJuYW1lIjoiSm9obiBEb2UiLCJhZG1pbiI6dHJ1ZX0.TUVHD0m_t6NIyPJH08QkB6_udeIAsKd9R9ThzqcH9aY
服务器验证时将第一部分和第二部分拿出来用加密算法 + secret 作为 salt 算出来,与第三部分对比,若是一样,则是合法用户。
示例
import time
import jwt
exp = int(time.time()) + 86400 * 7
user = 'titus'
key = 'titus-secret'
payload = {'exp': exp, 'user': user}
token = jwt.encode(payload, key)
print token
token_parse = jwt.decode(token, key)
print token_parse
输出
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoidGl0dXMiLCJleHAiOjE1MTM3NjgxNzJ9.t0zuMNMUkWIYz_k_1uwZS9NSm93rWyqYVkqkx2nzZEw
{u'user': u'titus', u'exp': 1513768172}