小编Col*_*Wal的帖子

Flask Limiter - 对单个端点使用多个 key_func

我正在努力使用flask和flask_limiter构建一个API端点,但我遇到了一个问题。我的目标是在单个端点上对客户端 IP 地址以及客户端提供的 API 密钥(可通过 Flask 的“请求”模块访问)进行速率限制。

IP 地址限制器很重要,因为我想防止暴力攻击,而 API 密钥限制器只是出于商业原因。我已经构建了两个速率限制器,并且它们独立工作(即我可以限制 IP 地址或提供的 API 密钥),但我无法同时在端点上运行这两个速率限制器。到目前为止我尝试过的一个例子:

from flask import Flask, request
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
ip_limiter = Limiter(app, key_func=get_remote_address)
get_api_key = lambda : request.args.get('apikey')
api_key_limiter = Limiter(app, key_func=get_api_key)

@app.route('/theEndpoint')
@ip_limiter.limit('some_limit_here')
@api_key_limiter.limit('other_limit_here')
def theEndpointFunction(...):
    .......
Run Code Online (Sandbox Code Playgroud)

最好在单个包(即flask_limiter)中实现所有速率限制,但到目前为止,我认为对多个键实现速率限制的唯一方法是切换到redis之类的东西。

关于使用 Flask_limiter 实现多键速率限制的方法有什么线索吗?

python api-design flask

4
推荐指数
1
解决办法
3343
查看次数

标签 统计

api-design ×1

flask ×1

python ×1