调用Flask API进行Token验证时出现Invalid token错误求助
Flask JWT验证返回"Invalid token"的解决方案
问题根源
你的代码在处理Authorization请求头时,直接将完整的Bearer <token>字符串传入jwt.decode(),而JWT库只能解析纯token内容,前缀"Bearer "会导致解析失败,触发InvalidTokenError。
修复代码
修改/verify_token接口的逻辑,提取出token部分:
@app.route('/verify_token', methods=['POST']) def verify_token(): auth_header = request.headers.get('Authorization') if auth_header: # 拆分Bearer前缀与token parts = auth_header.split() if len(parts) == 2 and parts[0].lower() == 'bearer': token = parts[1] try: # PyJWT v2+需显式指定算法,推荐添加algorithms参数 decoded = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"]) return jsonify({'message': f'Authorization success for client ID: {decoded["client_id"]}'}) except jwt.ExpiredSignatureError: return jsonify({'message': 'Token has expired'}), 401 except (jwt.InvalidTokenError, jwt.DecodeError): return jsonify({'message': 'Invalid token'}), 401 # 处理格式错误的Authorization头 return jsonify({'message': 'Authorization header must be in "Bearer <token>" format'}), 401 return jsonify({'message': 'No token provided'}), 401
额外优化点
- 强制指定算法:PyJWT 2.0+版本要求必须显式声明签名算法,添加
algorithms=["HS256"]可以避免警告,同时提升安全性。 - 格式校验:增加对Authorization头结构的校验,提前拦截格式错误的请求,减少无效的JWT解析尝试。
内容的提问来源于stack exchange,提问作者aneesh kumar cd
相关产品推荐
相关产品推荐

