JWT認證方案與禁用令牌策略

2022-09-18 14:33:15 字數 1870 閱讀 7809

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來過來 ...