欢迎访问宙启技术站
智能推送

使用HTTPTokenAuth()保护Python项目的API接口

发布时间:2024-01-01 15:51:53

在Python项目中,您可以使用Flask扩展中的flask_httpauth库来保护API接口。flask_httpauth提供了HTTPTokenAuth类来实现基于令牌的身份验证,下面是一个使用HTTPTokenAuth来保护API接口的示例:

首先,需要安装flaskflask_httpauth库:

pip install Flask
pip install flask_httpauth

然后,在您的Python项目中,首先导入相关的库和模块:

from flask import Flask, jsonify
from flask_httpauth import HTTPTokenAuth

接下来,创建Flask应用程序并初始化HTTPTokenAuth实例:

app = Flask(__name__)
auth = HTTPTokenAuth()

然后,定义一个可以通过令牌进行身份验证的视图函数,也就是API接口。在这个示例中,我们定义了一个简单的API接口/api/hello,该接口返回一个JSON响应:

@app.route('/api/hello', methods=['GET'])
@auth.login_required
def hello():
    response = {'message': 'Hello, World!'}
    return jsonify(response)

在这个视图函数上方的装饰器@auth.login_required指示该接口需要进行身份验证。如果未提供有效的令牌,客户端将收到401未授权的响应。

现在,我们需要定义一个回调函数来验证令牌是否有效。在这个示例中,我们将令牌硬编码在代码中,但在实际应用中,您可能需要从配置文件或数据库中获取令牌。

@auth.verify_token
def verify_token(token):
    # Hardcoded token for simplicity
    valid_tokens = ["my_token"]
    if token in valid_tokens:
        return True
    return False

在这个函数中,我们将接收到的令牌与已知的有效令牌进行比较。如果存在于valid_tokens列表中,则认为令牌有效,返回True;否则返回False。

最后,在项目的主函数中,运行应用程序:

if __name__ == '__main__':
    app.run()

现在,您可以通过访问http://localhost:5000/api/hello来测试API接口。由于这个接口受到保护,需要在请求头中包含有效的令牌。

您可以使用curl命令来测试这个API接口:

curl -X GET http://localhost:5000/api/hello -H "Authorization: Bearer my_token"

如果提供了有效的令牌,您将收到一个JSON响应:

{"message": "Hello, World!"}

否则,您将收到401未授权的响应。