验证授权标头中的令牌时,Flask API 返回“无效令牌”错误。 我开发了一个 Flask API,其中包括令牌生成和验证功能。令牌是使用 PyJWT 库生成的。但是,当我尝试调用 /verify_token 端点并将授权标头中的令牌作为不记名令牌传递时,API 始终返回“无效令牌”错误
检查令牌是否作为不记名令牌正确包含在授权标头中。
验证生成和验证令牌时app.config['SECRET_KEY']是否一致。
确保令牌未过期。
from flask import Flask, request, jsonify
from datetime import datetime, timedelta
import jwt
app = Flask(__name__)
app.config['SECRET_KEY'] = 'vmkey' # Replace with your own secret key
@app.route('/generate_token', methods=['POST'])
def generate_token():
client_id = request.json.get('client_id')
client_secret = request.json.get('client_secret')
# Check client_id and client_secret for authentication
# Replace this with your authentication logic
if client_id and client_secret:
token_expiry = datetime.utcnow() + timedelta(minutes=30) # Set token expiration time
token = jwt.encode({'client_id': client_id, 'exp': token_expiry}, app.config['SECRET_KEY'])
return jsonify({'token': token, 'expiry': token_expiry.strftime('%Y-%m-%d %H:%M:%S')})
return jsonify({'message': 'Authentication failed'}), 401
@app.route('/verify_token', methods=['POST'])
def verify_token():
token = request.headers.get('Authorization')
if token:
try:
decoded_token = jwt.decode(token, app.config['SECRET_KEY'])
client_id = decoded_token['client_id']
return jsonify({'message': f'Authorization success for client ID: {client_id}'})
except jwt.ExpiredSignatureError:
return jsonify({'message': 'Token has expired'}), 401
except (jwt.InvalidTokenError, jwt.DecodeError):
return jsonify({'message': 'Invalid token'}), 401
return jsonify({'message': 'No token provided'}), 401
if __name__ == '__main__':
app.run()
您获得无效令牌的原因可能有多种。 但是,首先您应该验证令牌的签名,令牌始终由私钥签名并由其公钥验证。 这可以检查这里
如果您发现签名正确,那么您应该检查您的令牌验证所依据的客户端配置、孩子、客户端 ID。