1.1 jwt
不可逆加密
訊息摘要 md
訊息認證 ma缺點
數字簽名
傳送者使用私鑰對資料摘要加密(簽名), 接收者使用對應的公鑰解密, 然後對資料進行雜湊處理, 比對摘要資訊是否一致
代表演算法 rsa
使用場景 優點
缺點
1.2 pyjwt
1.3 jwe
非對稱加密
生成方式 openssl
主要用於資料加密
最佳方案jwe
1.4.1 重新整理token實現流程
1.4.2 登入介面
1.4.3 訪問控制
1.4禁用令牌 邏輯
import random
from redis import strictredis
redis_client = strictredis()
user_id = 111
key = 'user:{}'.format(user_id)
token = none # 記錄token
def update_pwd():
"""修改密碼"""
print('修改完成密碼')
# 先刪除已有的白名單
if redis_client.exists(key):
redis_client.delete(key)
# 將修改了密碼的使用者記錄到白名單中
redis_client.sadd(key, 1)
# 設定有效期
redis_client.expire(key, 60 * 60 * 2)
def login():
"""登入"""
print('登入成功')
# 生成新的token
global token
token = random.randint(100, 999)
# 判斷是否有該使用者對應的白名單
if redis_client.exists(key):
# 將token加入到白名單中
redis_client.sadd(key, token)
def verify():
"""校驗認證"""
print('驗證token成功')
# 判斷該使用者是否有白名單(如果有, 說明修改過密碼)
if redis_client.exists(key):
# 判斷該token是否在白名單中
if redis_client.sismember(key, token):
# 如果在, 允許訪問
print("是新token, 允許訪問")
else:
# 如果不在, 重新登入
print('是舊token, 需要重新登入')
else:
print("沒有修改過密碼. 允許訪問")
if __name__ == '__main__':
update_pwd()
login()
verify()
參考: 和jwt 認證方案之初步認識JWT
前言 現在越來越多的專案或多或少會用到jwt,為什麼會出現使用jwt這樣的場景的呢?傳統的方式 cookie session 需要重新登入,使用者體驗不好。session共享 在多台物理機之間傳輸和複製session 方式對網路io的壓力大,延遲太長,使用者體驗也不好。session方式儲存使用者資...
JWT與許可權認證
jwt全稱json web token。那麼jwt是什麼呢?根據官方的說法,jwt是一種開放標準 open standerd 這種標準是用來傳輸資料的,就像是http協議一樣。除此之外,jwt擁有緊湊,自包含,安全的特性。下面我們就來介紹一下jwt的基本結構,用途,以及它在許可權認證方面與傳統方式的...
基於token認證的JWT方案
後端校驗使用者名稱密碼,生成token返回給前端,有時也會儲存token到使用者表或者儲存到全域性map中 toekn的生成規則一般是base64 uid md5 u pwd secret 前端拿到token之後,儲存到localstrage中 前端再請求的時候要把token放到header來過來 ...