| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- """
- 本地 Token 验证工具
- 用于区分本地生成的 token 和外部系统的 token
- """
- import jwt
- from typing import Optional
- from utils.logger import logger
- def verify_local_token(token: str) -> Optional[dict]:
- """
- 验证是否为本地生成的 token
-
- Args:
- token: JWT token 字符串
-
- Returns:
- 如果是本地 token 返回解码后的数据,否则返回 None
- """
- if not token:
- return None
-
- try:
- # 尝试解码 token(不验证签名,只检查格式)
- # 本地 token 应该包含特定的字段,如 account, username 等
- decoded = jwt.decode(token, options={"verify_signature": False})
-
- # 检查是否包含本地 token 的特征字段
- # 根据实际的 token 结构调整
- if "account" in decoded or "username" in decoded:
- logger.info(f"[Token验证] 识别为本地 token: {decoded.get('username', 'unknown')}")
- return decoded
-
- logger.info("[Token验证] 不是本地 token 格式")
- return None
-
- except jwt.DecodeError:
- logger.info("[Token验证] Token 解码失败,不是有效的 JWT")
- return None
- except Exception as e:
- logger.warning(f"[Token验证] Token 验证异常: {e}")
- return None
- def is_local_token(token: str) -> bool:
- """
- 判断是否为本地 token
-
- Args:
- token: JWT token 字符串
-
- Returns:
- True 表示本地 token,False 表示外部 token
- """
- return verify_local_token(token) is not None
|