""" 本地 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