欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python JWT認證與pyjwt包詳細介紹

 更新時間:2023年05月23日 14:29:41   作者:alwaysrun  
JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也增加一些額外的其它業(yè)務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密,這篇文章主要介紹了Python JWT認證與pyjwt包簡介,需要的朋友可以參考下

JWT是一種JSON的行業(yè)標準,廣泛應用在系統(tǒng)的用戶認證方面。

JWT認證簡介

JWT(JSON Web Tokens),是為了在網(wǎng)絡應用環(huán)境間傳遞聲明而執(zhí)行的一種開放的行業(yè)標準(RFC7519)。該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也可以增加一些額外的其它業(yè)務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密。

構成

JWT就是由三段信息構成,通過點號.連接的一段字符串,如:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoidGVzdCIsImV4cCI6MTY4NDQwOTE4MH0.K-nvXX3kS0I0RKny0J33tuns7SFttYhQwAUtqOS40aw

第一部分為頭部(header,base64編碼):

  • 聲明類型:jwt;
  • 聲明加密算法:如’HS256’。
{
  'typ': 'JWT',
  'alg': 'HS256'   
}

第二部分為載荷(payload,base64編碼),存放認證信息、有效期等:

{
    "user_id":"test",
    "exp":1684410152
}

第三部是簽名(使用第一部分聲明的算法進行HASH處理),Hash內容:

  • header (base64后的)
  • payload (base64后的)
  • secret:加密鹽
HMACSHA256(
 base64UrlEncode(header) + "." + base64UrlEncode(payload),
 secret
)

載荷聲明

標準中注冊的payload聲明 (建議但不強制使用) :

  • iss: jwt簽發(fā)者;
  • sub: jwt所面向的用戶;
  • aud: 接收jwt的一方;
  • exp: jwt的過期時間,這個過期時間必須要大于簽發(fā)時間;過期解碼會拋出ExpiredSignatureError異常;
  • nbf: 定義在什么時間之前,該jwt都是不可用的;在此時間之前解碼會拋出ImmatureSignatureError異常;
  • iat: jwt的簽發(fā)時間;在此時間之前解碼會拋出InvalidIssuedAtError異常;
  • jti: jwt的唯一身份標識,主要用來作為一次性token,從而回避重放攻擊。

注意:不要在jwt的payload部分存放敏感信息,該部分是客戶端可加碼的。

pyjwt

使用前先安裝pip install pyjwt。

編解碼

在pyjwt中通過encode進行編碼,通過decode進行解碼。

import jwt
JWT_TOKEN_EXPIRE_SECONDS = 3600 * 2  # token有效時間 2小時
JWT_TOKEN_SECRET_SALT = 'salt.2023.05.18'
JWT_TOKEN_ALGORITHM = 'HS256'  # HASH算法
def generate_jwt_token(user: str) -> str:
    """根據(jù)用戶id生成token"""
    data = {'user_id': user, 'exp': int(time.time()) + JWT_TOKEN_EXPIRE_SECONDS}
    print("generate data:", data)
    jwtToken = jwt.encode(data, JWT_TOKEN_SECRET_SALT, algorithm=JWT_TOKEN_ALGORITHM)
    return jwtToken
def verify_jwt_token(user: str, jwtToken: str) -> bool:
    """驗證用戶token"""
    data = {'user_id': user}
    try:
        payload = jwt.decode(jwtToken, JWT_TOKEN_SECRET_SALT, algorithms=[JWT_TOKEN_ALGORITHM])
        print("verify:", payload)
        exp = int(payload.pop('exp'))
        if time.time() > exp:
            print('已失效')
            return False
        return data == payload
    except jwt.exceptions.ExpiredSignatureError as ex:
        print('token簽名過期:', ex)
    except jwt.PyJWTError as ex:
        print('token解析失敗:', ex)
    return False

flask中驗證

flask是一個輕量級的web框架,可方便與jwt結合進行驗證。

先定義一個修飾器(token通過header來攜帶):

from flask import Flask, request
from functools import wraps
def request_token_validate(f):
    @wraps(f)
    def toValidate(*args, **kwargs):
        token = request.headers.get('Authorization')
        if not token:
            logger.error("token invalid")
            return {'data': 'Token invalid'}, status.HTTP_401_UNAUTHORIZED
        return f(*args, **kwargs)
    return toValidate

在需要的route上添加驗證修飾器:

@app.route("/users", methods=["GET"])
@request_token_validate
def query_models():
    userList = []
    # get user list
    response_data = {"data": userList}
    return response_data, status.HTTP_200_OK

到此這篇關于Python JWT認證與pyjwt包簡介的文章就介紹到這了,更多相關JWT認證與pyjwt包內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • pytorch 計算Parameter和FLOP的操作

    pytorch 計算Parameter和FLOP的操作

    這篇文章主要介紹了pytorch 計算Parameter和FLOP的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 在matplotlib的圖中設置中文標簽的方法

    在matplotlib的圖中設置中文標簽的方法

    今天小編就為大家分享一篇在matplotlib的圖中設置中文標簽的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 如何在Python中用好短路機制

    如何在Python中用好短路機制

    這篇文章主要介紹了如何在Python中用好短路機制,Python中的短路機制非常有用,跟很多其他編程語言中的短路機制作用類似,接下來讓我們通過幾個簡單的例子總結Python中可用的幾種短路機制,需要的朋友可以參考下
    2022-02-02
  • Python中Selenium庫使用教程詳解

    Python中Selenium庫使用教程詳解

    這篇文章主要介紹了Python中Selenium庫使用教程詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • PyCharm常用配置和常用插件(小結)

    PyCharm常用配置和常用插件(小結)

    這篇文章主要介紹了PyCharm常用配置和常用插件(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • python實現(xiàn)mysql的讀寫分離及負載均衡

    python實現(xiàn)mysql的讀寫分離及負載均衡

    這篇文章主要介紹了python實現(xiàn)mysql的讀寫分離及負載均衡 ,需要的朋友可以參考下
    2018-02-02
  • Python 將RGB圖像轉換為Pytho灰度圖像的實例

    Python 將RGB圖像轉換為Pytho灰度圖像的實例

    下面小編就為大家?guī)硪黄狿ython 將RGB圖像轉換為Pytho灰度圖像的實例。具有很好的參考價值。希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • numpy添加新的維度:newaxis的方法

    numpy添加新的維度:newaxis的方法

    今天小編就為大家分享一篇numpy添加新的維度:newaxis的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Python找出文件中使用率最高的漢字實例詳解

    Python找出文件中使用率最高的漢字實例詳解

    這篇文章主要介紹了Python找出文件中使用率最高的漢字,涉及Python針對字符串與中文的相關操作技巧,需要的朋友可以參考下
    2015-06-06
  • 詳解python metaclass(元類)

    詳解python metaclass(元類)

    這篇文章主要介紹了python metaclass(元類)的相關資料,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08

最新評論