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