国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JWT refreshtoken 實踐

cod7ce / 3448人閱讀

摘要:詳細介紹可以查看這篇文章理解認(rèn)證及實踐特點優(yōu)點體積小,因而傳輸速度快傳輸方式多樣,可以通過參數(shù)頭部等方式傳輸嚴(yán)格的結(jié)構(gòu)化。

Json web token (JWT), 根據(jù)官網(wǎng)的定義,是為了在網(wǎng)絡(luò)應(yīng)用環(huán)境間傳遞聲明而執(zhí)行的一種基于JSON的開放標(biāo)準(zhǔn)((RFC 7519).該token被設(shè)計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在身份提供者和服務(wù)提供者間傳遞被認(rèn)證的用戶身份信息,以便于從資源服務(wù)器獲取資源,也可以增加一些額外的其它業(yè)務(wù)邏輯所必須的聲明信息,該token也可直接被用于認(rèn)證,也可被加密。
詳細介紹可以查看這篇文章 理解JWT(JSON Web Token)認(rèn)證及實踐
JWT 特點 優(yōu)點

體積小,因而傳輸速度快

傳輸方式多樣,可以通過URL/POST參數(shù)/HTTP頭部等方式傳輸

嚴(yán)格的結(jié)構(gòu)化。它自身(在 payload 中)就包含了所有與用戶相關(guān)的驗證消息,如用戶可訪問路由、訪問有效期等信息,服務(wù)器無需再去連接數(shù)據(jù)庫驗證信息的有效性,并且 payload 支持為你的應(yīng)用而定制化。

支持跨域驗證,可以應(yīng)用于單點登錄。

存在的問題

JWT 自身(在 payload 中)就包含了所有與用戶相關(guān)的驗證消息,所以通常情況下不需要保存。這種設(shè)計存在幾個問題:

Token不能撤銷--客戶端重置密碼后之前的JWT依然可以使用(JWT 并沒有過期或者失效

不支持refresh token,JWT過期后需要執(zhí)行登錄授權(quán)的完整流程

無法知道用戶簽發(fā)了幾個JWT

針對第一個問題,可能的解決方法有:

保存JWT到數(shù)據(jù)庫(或Redis),這樣可以針對每個JWT多帶帶校驗

在重置密碼等需要作廢之前全部JWT時,把操作時間點記錄到數(shù)據(jù)庫(或Redis),校驗JWT時同時判斷此JWT創(chuàng)建之后有沒有過重置密碼等類似操作,如果有校驗不通過

當(dāng)然,這種解決方法都會多一次數(shù)據(jù)庫請求,JWT自身可校驗的優(yōu)勢會有所減少,同時也會影響認(rèn)證效率。

這篇文章主要介紹解決第二個問題(不支持refresh token)的思路。

refresh token

refresh token是OAuth2 認(rèn)證中的一個概念,和OAuth2 的access token 一起生成,表示更新令牌,過期所需時間比access toen 要長,可以用來獲取下一次的access token。

如果JWT 需要添加 refresh token支持,refresh token需要滿足的條件有一下幾項:

和JWT一起生成返回給客戶端

有實效時間,有效時間比JWT要長

只能用來換取下一次JWT,不能用于訪問認(rèn)證

不能重復(fù)使用(可選)

refresh token 獲取流程

refresh token 使用流程

代碼示例
import jwt
import time

# 使用 sanic 作為restful api 框架 
def create_token(account_id, username):
    payload = {
        "iss": "gusibi.mobi",
        "iat": int(time.time()),
        "exp": int(time.time()) + 86400 * 7,
        "aud": "www.gusibi.mobi",
        "sub": account_id,
        "username": username,
        "scopes": ["open"]
    }
    token = jwt.encode(payload, "secret", algorithm="HS256")
    payload["grant_type"] = "refresh"
    refresh_token = jwt.encode(payload, "secret", algorithm="HS256")
    return True, {
        "access_token": token,
        "account_id": account_id,
        "refresh_token": refresh_token
        }

# 驗證refresh token 出否有效
def verify_refresh_token(token):
    payload = jwt.decode(token, "secret", audience="www.gusibi.com", algorithms=["HS256"])
    # 校驗token 是否有效,以及是否是refresh token,驗證通過后生成新的token 以及 refresh_token
    if payload and payload.get("grant_type") == "refresh":
        # 如果需要標(biāo)記此token 已經(jīng)使用,需要借助redis 或者數(shù)據(jù)庫(推薦redis)
        return True, payload
    return False, None

# 驗證token 是否有效
def verify_bearer_token(token):
    #  如果在生成token的時候使用了aud參數(shù),那么校驗的時候也需要添加此參數(shù)
    payload = jwt.decode(token, "secret", audience="www.gusibi.com", algorithms=["HS256"])
    # 校驗token 是否有效,以及不能是refresh token
    if payload and not payload.get("grant_type") == "refresh":
        return True, payload
    return False, None
參考鏈接

理解JWT(JSON Web Token)認(rèn)證及實踐

理解OAuth 2.0[1]

References
[1] 理解OAuth 2.0: http://www.ruanyifeng.com/blo...


最后,感謝女朋友支持和包容,比??

也可以在公號輸入以下關(guān)鍵字獲取歷史文章:公號&小程序 | 設(shè)計模式 | 并發(fā)&協(xié)程

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/43678.html

相關(guān)文章

  • 解決使用jwt刷新token帶來的問題

    摘要:問題如何將新的發(fā)給前端比較好這個問題答案簡單,在的中設(shè)置。我這里使用解決的,將舊作為鍵,新作為值,設(shè)置一個秒過期的時間。大家可以享用這個新版,可以很好解決這個問題。 前后端分離,使用token的方式校驗用戶信息,我選擇了jwt,使用的教程在網(wǎng)上可以找到很多,不做介紹。 這里說明一個使用過程中,最重要的的一個環(huán)節(jié)刷新token帶來的問題。 業(yè)務(wù)要達到的目標(biāo): 用戶登錄一次之后,前端保存t...

    whataa 評論0 收藏0
  • api權(quán)限管理系統(tǒng)與前后端分離實踐

    摘要:自己在前后端分離上的實踐要想實現(xiàn)完整的前后端分離,安全這塊是繞不開的,這個系統(tǒng)主要功能就是動態(tài)管理,這次實踐包含兩個模塊基于搭建的權(quán)限管理系統(tǒng)后臺編寫的前端管理。 自己在前后端分離上的實踐 要想實現(xiàn)完整的前后端分離,安全這塊是繞不開的,這個系統(tǒng)主要功能就是動態(tài)restful api管理,這次實踐包含兩個模塊,基于springBoot + shiro搭建的權(quán)限管理系統(tǒng)后臺bootshir...

    bawn 評論0 收藏0
  • api權(quán)限管理系統(tǒng)與前后端分離實踐

    摘要:自己在前后端分離上的實踐要想實現(xiàn)完整的前后端分離,安全這塊是繞不開的,這個系統(tǒng)主要功能就是動態(tài)管理,這次實踐包含兩個模塊基于搭建的權(quán)限管理系統(tǒng)后臺編寫的前端管理。 自己在前后端分離上的實踐 要想實現(xiàn)完整的前后端分離,安全這塊是繞不開的,這個系統(tǒng)主要功能就是動態(tài)restful api管理,這次實踐包含兩個模塊,基于springBoot + shiro搭建的權(quán)限管理系統(tǒng)后臺bootshir...

    tianlai 評論0 收藏0

發(fā)表評論

0條評論

cod7ce

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<