调用 Flask API 进行 token 验证时出现 Invalid token 错误

问题描述 投票:0回答:1

验证授权标头中的令牌时,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()

enter image description here

python flask microservices
1个回答
0
投票

您获得无效令牌的原因可能有多种。 但是,首先您应该验证令牌的签名,令牌始终由私钥签名并由其公钥验证。 这可以检查这里

如果您发现签名正确,那么您应该检查您的令牌验证所依据的客户端配置、孩子、客户端 ID。

© www.soinside.com 2019 - 2024. All rights reserved.