Python:使用PyJWT實現JSON Web Tokens加密解密
科普
JSON Web Token 入門教程
Json Web Token JWT三部分組成:
(1)Header
(2)Payload
(3)Signature
Header.Payload.Signature
1
Base64URL 算法:
Base64 有三個字符+、/和=,在 URL 里面有特殊含義,
所以要被替換掉:=被省略、+替換成-,/替換成_
代碼實現
github:https://github.com/jpadilla/pyjwt/
文檔:https://pyjwt.readthedocs.io/en/latest/index.html
安裝
pip install PyJWT
1
復制jwt網站的數據進行加解密測試
https://jwt.io/
代碼示例
# -*- coding: utf-8 -*- import jwt data = { "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } # 加密 py3加密后是字節型數據 encoded = jwt.encode(data, 'secret', algorithm='HS256') print(encoded.decode()) # eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. # eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. # DzMJlzRbt6kdh1Kbbqv8SA8QsddwfSoM1bqw41tQY2k print(jwt.decode(encoded, 'secret', algorithms=['HS256'])) # {'sub': '1234567890', 'name': 'John Doe', 'iat': 1516239022}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
增加過期時間,Python3代碼示例
# -*- coding: utf-8 -*- import time from datetime import datetime, timedelta import jwt class JwtUtil(object): def __init__(self, key): self.key = key def encode(self, payload, expires=7): """ 獲取token :param payload: dict :param expires: 過期時間:天 :return: str """ # 使用utc時間 payload['exp'] = datetime.utcnow() + timedelta(days=expires) return jwt.encode(payload=payload, key=self.key).decode() def decode(self, token): """ 驗證并解析token :param token: str :return: dict """ return jwt.decode(jwt=token, key=self.key)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
JSON Python web前端
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。