JWT 在 Web 服务中进行无状态授权的原理 4年前

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}

参考

https://jwt.io/

http://www.liriansu.com/jwt

image
black zero
即使你已经习惯了受伤害,也有人看了会心疼的。
3
发布数
1
关注者
9093
累计阅读

热门教程文档

Typescript
31小节
Golang
23小节
Djiango
17小节
Redis
14小节
Spring Cloud
8小节
广告