Skip to content

[Medium] 安全加固 - 实施 refresh token 撤销机制 #12

Description

@Qixuan112

问题描述

Refresh token 没有黑名单或撤销机制,如果 token 泄露,只能等待 30 天过期。

风险

  • Token 泄露后无法主动撤销
  • 用户无法强制登出所有设备
  • 攻击者可以长期利用泄露的 token

修复建议

方案 1:Token 黑名单(推荐)

# 使用 Redis 存储已撤销的 token
REVOKED_TOKENS = set()

def revoke_token(jti):
    REVOKED_TOKENS.add(jti)
    # 或存入 Redis: redis.sadd('revoked_tokens', jti)

@jwt.token_in_blocklist_loader
def check_if_token_revoked(jwt_header, jwt_payload):
    jti = jwt_payload['jti']
    return jti in REVOKED_TOKENS

方案 2:Token Rotation

刷新时旧 refresh token 立即失效,只有新 token 有效。

相关文件

  • backend/app/services/auth_service.py:199-246

优先级

Medium - 提升账户安全性

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions