成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

FastAPI 自動續簽 Token 與刷新機制詳解:讓用戶登錄更持久!

開發
Refresh Token 是一種用于刷新 Access Token 的憑證。它不用于訪問受保護資源,只用于生成新的 Access Token。

在 Web 應用中,JWT(JSON Web Token)常用于身份認證。但 JWT 通常有固定的過期時間,一旦過期就會導致用戶強制重新登錄 —— 這顯然影響體驗。

解決方案?

引入 Refresh Token(刷新令牌)機制,實現 Access Token 的自動續簽!

一句話理解 Refresh Token

Refresh Token 是一種用于刷新 Access Token 的憑證。 它不用于訪問受保護資源,只用于生成新的 Access Token。

整體流程圖

登錄成功后返回:
├── access_token(短期有效) → 用于訪問接口  
└── refresh_token(長期有效) → 用于刷新 access_token

?? 客戶端邏輯:
1. 每次請求攜帶 access_token
2. 如果接口返回 401(token 過期):
   - 使用 refresh_token 請求刷新接口,換一個新的 access_token
   - 自動重試原請求

數據模型設計

新增 refresh_token 存儲字段(也可以存 Redis 中)。

models/user.py 示例: from tortoise import fields, models

from tortoise import fields, models

class User(models.Model):
    id = fields.IntField(pk=True)
    username = fields.CharField(max_length=50, unique=True)
    hashed_password = fields.CharField(max_length=128)
    refresh_token = fields.CharField(max_length=512, null=True)  # 新增

JWT 工具函數封裝(包含 refresh 支持)

from jose import jwt
from datetime import datetime, timedelta

SECRET_KEY = "your-access-token-secret"
REFRESH_SECRET = "your-refresh-token-secret"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 15
REFRESH_TOKEN_EXPIRE_DAYS = 7

def create_access_token(data: dict, expires_delta: timedelta = None):
    to_encode = data.copy()
    expire = datetime.utcnow() + (expires_delta or timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES))
    to_encode.update({"exp": expire})
    return jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)

def create_refresh_token(data: dict):
    expire = datetime.utcnow() + timedelta(days=REFRESH_TOKEN_EXPIRE_DAYS)
    to_encode = data.copy()
    to_encode.update({"exp": expire})
    return jwt.encode(to_encode, REFRESH_SECRET, algorithm=ALGORITHM)

def verify_refresh_token(token: str):
    try:
        payload = jwt.decode(token, REFRESH_SECRET, algorithms=[ALGORITHM])
        return payload
    except Exception:
        return None

登錄接口返回雙 token

@router.post("/login")
async def login(user: UserLoginSchema):
    user_obj = await authenticate(user.username, user.password)
    if not user_obj:
        raise HTTPException(status_code=401, detail="賬號或密碼錯誤")

    data = {"sub": user_obj.username, "uid": user_obj.id}
    access_token = create_access_token(data)
    refresh_token = create_refresh_token(data)

    # 保存 refresh_token 到數據庫
    user_obj.refresh_token = refresh_token
    await user_obj.save()

    return {
        "access_token": access_token,
        "refresh_token": refresh_token,
        "token_type": "bearer"
    }

提供刷新接口 /refresh

@router.post("/refresh")
async def refresh_token(refresh_token: str = Body(...)):
    payload = verify_refresh_token(refresh_token)
    if not payload:
        raise HTTPException(status_code=401, detail="Refresh token 失效")

    # 確認數據庫中 refresh_token 是否匹配(防止偽造)
    user = await User.get(id=payload["uid"])
    if user.refresh_token != refresh_token:
        raise HTTPException(status_code=401, detail="Refresh token 不合法")

    new_token = create_access_token({"sub": user.username, "uid": user.id})
    return {"access_token": new_token, "token_type": "bearer"}

小結

結合兩個 token,我們實現了:

  • 安全性:短時 Access Token 暴露后影響有限
  • 易用性:Refresh Token 自動續期,無需頻繁登錄
責任編輯:趙寧寧 來源: Ssoul肥魚
相關推薦

2011-07-15 09:57:03

MongoDB緩存刷新

2021-12-08 06:53:28

Choreograph屏幕機制

2021-04-21 07:53:13

Android屏幕刷新

2020-10-13 08:36:30

React 架構機制

2010-09-06 08:43:13

.NET 4

2025-06-23 04:00:00

接口SpringToken

2012-05-02 14:41:04

jQuery

2021-09-27 06:29:01

Redis淘汰機制

2024-01-03 21:50:32

緩存機制請求

2010-03-10 11:55:30

Mocha BSM運維管理摩卡軟件

2020-09-21 14:35:20

VuenextTick前端

2025-04-25 08:30:00

前端后端用戶登錄

2024-09-06 17:49:46

2016-03-17 10:20:57

2010-06-02 11:33:26

Linux 內存監控

2025-06-05 02:22:00

2021-12-06 14:33:32

自動駕駛冬奧會安全

2011-04-28 16:29:11

投影機

2024-09-02 10:46:57

2022-09-08 11:33:47

token釘釘打卡小工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产伊人精品 | 超碰在线免费公开 | 亚洲精品小视频在线观看 | 亚洲精品中文字幕在线观看 | 久久青青 | 99精品久久久 | 精品视频在线观看 | 久久国产福利 | 亚洲最新在线 | 亚洲精品区 | 日韩三片 | 69精品久久久久久 | 精久久久 | 欧美www在线| 粉色午夜视频 | 午夜激情视频在线 | 日韩欧美一级精品久久 | 欧美日韩三级视频 | 国产精品欧美一区喷水 | 国产精品乱码一区二区三区 | 国产免费观看一级国产 | 日韩影院在线观看 | 亚洲色图综合 | 色欧美片视频在线观看 | 99精品视频在线观看免费播放 | 毛片免费在线观看 | 日韩激情视频一区 | 日本一区二区三区四区 | 欧美久久久久久久久中文字幕 | 国产精品毛片一区二区在线看 | a视频在线| 日本不卡一区 | 国产免费一区二区 | 精品二三区| 久久久久久国产精品 | 欧美久久不卡 | 日韩久久精品 | 91在线视频免费观看 | 久久精品一区二区三区四区 | 亚洲精品乱码久久久久久按摩观 | 久久网站黄 |