Flask Gunicorn 共享令牌授权多个工人
Flask Gunicorn share token auth multiple workers
我在 linux (centOS)
上使用 Flask 构建了一个 API 并使用 Gunicorn 和 postgreSQL 作为数据库
当使用 Gunicorn 设置多个 worker 时,如果用户登录到 API 并获取令牌,如果他使用它来执行请求,则令牌将不正确。
只有一个worker多线程时有效,多个worker时无效。我应该如何处理令牌的存储,以便不同的工作人员可以从唯一的数据源检索令牌?
为了生成令牌,我们检索密钥并创建一个 json 网络令牌。然后我们将这个令牌和用户名存储在字典中。
此外,密钥在每次启动 flask 时生成,也许使用 gunicorn 的 preload_app 可以帮助每个工人拥有相同的密钥。
除了将您的 http 请求连接到它们在 python 源代码中各自的功能之外,Gunicorn 与身份验证几乎没有关系。
您的身份验证令牌很可能会保存在数据库中,随后会针对每个请求进行检索/匹配。如果需要,您可以选择缓存它。
JWT 背后的想法是将令牌返回给用户,然后将其附加到每个请求。然后你不必存储任何东西,因为令牌有一个内置的内容散列,只要有人弄乱了令牌内容,它就会无效。颁发令牌时,您唯一想做的就是记录哪个用户在哪个点登录。
此外,我喜欢将我的密钥存储为 ENV 变量,所有 threads/workers 都可以访问。你当然可以在你的部署中有一个预加载步骤来重新生成它,但不要让它出现在你的 Flask 应用程序的生命周期之外。
我在 linux (centOS)
上使用 Flask 构建了一个 API 并使用 Gunicorn 和 postgreSQL 作为数据库当使用 Gunicorn 设置多个 worker 时,如果用户登录到 API 并获取令牌,如果他使用它来执行请求,则令牌将不正确。
只有一个worker多线程时有效,多个worker时无效。我应该如何处理令牌的存储,以便不同的工作人员可以从唯一的数据源检索令牌?
为了生成令牌,我们检索密钥并创建一个 json 网络令牌。然后我们将这个令牌和用户名存储在字典中。
此外,密钥在每次启动 flask 时生成,也许使用 gunicorn 的 preload_app 可以帮助每个工人拥有相同的密钥。
除了将您的 http 请求连接到它们在 python 源代码中各自的功能之外,Gunicorn 与身份验证几乎没有关系。
您的身份验证令牌很可能会保存在数据库中,随后会针对每个请求进行检索/匹配。如果需要,您可以选择缓存它。
JWT 背后的想法是将令牌返回给用户,然后将其附加到每个请求。然后你不必存储任何东西,因为令牌有一个内置的内容散列,只要有人弄乱了令牌内容,它就会无效。颁发令牌时,您唯一想做的就是记录哪个用户在哪个点登录。
此外,我喜欢将我的密钥存储为 ENV 变量,所有 threads/workers 都可以访问。你当然可以在你的部署中有一个预加载步骤来重新生成它,但不要让它出现在你的 Flask 应用程序的生命周期之外。