最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python JWT認(rèn)證與pyjwt包詳細(xì)介紹

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

JWT是一種JSON的行業(yè)標(biāo)準(zhǔn),廣泛應(yīng)用在系統(tǒng)的用戶認(rèn)證方面。

JWT認(rèn)證簡(jiǎn)介

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

構(gòu)成

JWT就是由三段信息構(gòu)成,通過(guò)點(diǎn)號(hào).連接的一段字符串,如:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoidGVzdCIsImV4cCI6MTY4NDQwOTE4MH0.K-nvXX3kS0I0RKny0J33tuns7SFttYhQwAUtqOS40aw

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

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

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

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

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

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

載荷聲明

標(biāo)準(zhǔn)中注冊(cè)的payload聲明 (建議但不強(qiáng)制使用) :

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

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

pyjwt

使用前先安裝pip install pyjwt

編解碼

在pyjwt中通過(guò)encode進(jìn)行編碼,通過(guò)decode進(jìn)行解碼。

import jwt
JWT_TOKEN_EXPIRE_SECONDS = 3600 * 2  # token有效時(shí)間 2小時(shí)
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:
    """驗(yàn)證用戶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簽名過(guò)期:', ex)
    except jwt.PyJWTError as ex:
        print('token解析失敗:', ex)
    return False

flask中驗(yàn)證

flask是一個(gè)輕量級(jí)的web框架,可方便與jwt結(jié)合進(jìn)行驗(yàn)證。

先定義一個(gè)修飾器(token通過(guò)header來(lái)攜帶):

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上添加驗(yàn)證修飾器:

@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

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

相關(guān)文章

  • python中數(shù)據(jù)庫(kù)like模糊查詢方式

    python中數(shù)據(jù)庫(kù)like模糊查詢方式

    這篇文章主要介紹了python中數(shù)據(jù)庫(kù)like模糊查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 導(dǎo)入pytorch時(shí)libmkl_intel_lp64.so找不到問(wèn)題解決

    導(dǎo)入pytorch時(shí)libmkl_intel_lp64.so找不到問(wèn)題解決

    這篇文章主要為大家介紹了導(dǎo)入pytorch時(shí)libmkl_intel_lp64.so找不到問(wèn)題解決示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • python計(jì)算RPKM操作示例詳解

    python計(jì)算RPKM操作示例詳解

    這篇文章主要為大家介紹了python計(jì)算RPKM操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • python使用Plotly繪圖工具繪制水平條形圖

    python使用Plotly繪圖工具繪制水平條形圖

    這篇文章主要為大家詳細(xì)介紹了python使用Plotly繪圖工具繪制水平條形圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • python數(shù)據(jù)類(lèi)型可變與不可變深入分析

    python數(shù)據(jù)類(lèi)型可變與不可變深入分析

    這篇文章主要為大家介紹了python數(shù)據(jù)類(lèi)型可變與不可變深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 在pycharm上mongodb配置及可視化設(shè)置方法

    在pycharm上mongodb配置及可視化設(shè)置方法

    今天小編就為大家分享一篇在pycharm上mongodb配置及可視化設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼

    OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼

    本文主要介紹了OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • pygame實(shí)現(xiàn)井字棋之第一步繪制九宮格

    pygame實(shí)現(xiàn)井字棋之第一步繪制九宮格

    這篇文章主要介紹了pygame實(shí)現(xiàn)井字棋之第一步繪制九宮格,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • 利用Python進(jìn)行異常值分析實(shí)例代碼

    利用Python進(jìn)行異常值分析實(shí)例代碼

    數(shù)據(jù)挖掘工作中的第一步就是異常值檢測(cè),異常值的存在會(huì)影響實(shí)驗(yàn)結(jié)果。下面這篇文章主要給大家介紹了關(guān)于利用Python進(jìn)行異常值分析的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-12-12
  • 如何利用Fabric自動(dòng)化你的任務(wù)

    如何利用Fabric自動(dòng)化你的任務(wù)

    大家都知道Fabric是一個(gè)Python庫(kù),可以通過(guò)SSH在多個(gè)host上批量執(zhí)行任務(wù)。你可以編寫(xiě)任務(wù)腳本,然后通過(guò)Fabric在本地就可以使用SSH在大量遠(yuǎn)程服務(wù)器上自動(dòng)運(yùn)行。這些功能非常適合應(yīng)用的自動(dòng)化部署,或者執(zhí)行系統(tǒng)管理任務(wù)。本文將介紹如何利用Fabric自動(dòng)化你的任務(wù)。
    2016-10-10

最新評(píng)論

洪洞县| 刚察县| 建湖县| 东阳市| 城固县| 颍上县| 广元市| 平和县| 梁平县| 隆回县| 双柏县| 洛川县| 广安市| 咸宁市| 大新县| 邵阳县| 四子王旗| 咸丰县| 汕尾市| 宁阳县| 上高县| 来安县| 正定县| 新源县| 常德市| 顺昌县| 中超| 裕民县| 娄底市| 阿巴嘎旗| 谢通门县| 安仁县| 宁蒗| 闽清县| 泾川县| 延吉市| 达日县| 集安市| 招远市| 竹山县| 汉源县|