Python API怎么加Token认证_JWT生成与验证拦截器实现
FastAPI中JWT认证应使用HTTPBearer获取Token并用jwt.decode()校验密钥须从环境变量读取且确保两端一致签发时需设exp、sub等字段用datetime.utcnow()timedelta依赖注入get_current_user实现自动校验。FastAPI里怎么给接口加JWT Token认证直接用 HTTPBearer JWT.decode() 就能拦住没Token或过期的请求但别手写验证逻辑——容易漏掉 aud、iss 校验也容易把密钥硬编码进代码里。用 fastapi.security.HTTPBearer 获取请求头里的 Authorization: Bearer xxx它自动拆出token字符串验证必须用 jwt.decode()不是 jwt.encode() ——后者只生成不校验签名和过期时间algorithms 参数必须显式传 [HS256]否则默认空列表解码直接抛 InvalidAlgorithmError密钥建议从环境变量读os.getenv(JWT_SECRET_KEY)别写死在代码里JWT Token怎么安全生成含用户ID和过期时间生成时漏掉 exp 字段等于发永久通行证而只用 datetime.utcnow() 不加 timedelta 又会导致 token 一签发就过期。必须传 exp用 datetime.utcnow() timedelta(hours1)别用 datetime.now()时区错乱风险payload 至少带 sub通常放用户ID和 expiat 可选但建议加上用 jwt.encode(payload, key, algorithmHS256)key 类型必须是 str 或 bytes传 None 会静默失败生成后立刻返回 access_token 和 token_type: bearer前端才能正确拼接请求头为什么每次请求都报 InvalidSignatureError90% 是密钥不一致签发用的 key 和验证用的 key 看似一样实则一个是字符串、一个是 bytes或者前后有空格、换行符。检查 JWT_SECRET_KEY 环境变量是否被 shell 自动截断比如值含 $ 被当成变量替换验证前先 print(repr(key))确认两边 key 的字节完全一致注意 、 、空格如果用 pydantic.BaseSettings 读配置确保字段类型是 SecretStr 并调用 .get_secret_value()别用 base64.b64encode() 对密钥二次编码——jwt.encode() 内部不处理 base64会直接拿原始字节算签名如何让登录接口返回Token其他接口自动校验别在每个路由上重复写 Depends(get_current_user)用 FastAPI 的依赖注入链就行但要注意依赖的 scope 和异常处理方式。 Trenz AI驱动的社交电商营销平台专为TikTok Shop设计