编程语言
7884
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}
