【问题标题】:Flask Gunicorn share token auth multiple workers [duplicate]Flask Gunicorn 共享令牌身份验证多个工作人员 [重复]
【发布时间】:2019-10-24 14:06:31
【问题描述】:

我有一个用 Flask 构建的 API,并使用 Gunicorn 和 postgreSQL 作为 linux (centOS) 上的数据库

使用 Gunicorn 设置多个 worker 时,如果用户登录 API 并获取令牌,如果他使用它执行请求,则令牌将不正确。

当只有一个工作人员和多个线程但没有多个工作人员时,它可以工作。我应该如何处理令牌的存储,以便不同的工作人员可以从唯一的数据源中检索令牌?

为了生成令牌,我们检索密钥并创建一个 json Web 令牌。然后我们将这个令牌和用户名存储在字典中。

此外,每次启动烧瓶时都会生成密钥,也许使用 gunicorn 的 preload_app 可以帮助每个工作人员拥有相同的密钥。

【问题讨论】:

    标签: flask token gunicorn


    【解决方案1】:

    除了将你的 http 请求连接到它们各自在 python 源代码中的函数之外,Gunicorn 与身份验证关系不大。

    您的身份验证令牌很可能会保存在数据库中,随后会针对每个请求进行检索/匹配。如果需要,您可以选择缓存它。

    【讨论】:

    • 我们使用 postgresql 作为数据库。您的意思是设置一个 redis 或 memcached 守护进程来存储令牌并在每个请求时检索它?
    • 糟糕。不!身份验证相关信息也存储在数据库本身中。如有必要,您可以选择缓存它。
    【解决方案2】:

    JWT 背后的想法是将令牌返回给用户,然后用户将其附加到每个请求中。然后您不必存储任何内容,因为令牌具有内置的内容哈希,只要有人弄乱令牌内容,该哈希就无效。颁发令牌时您唯一想做的就是记录哪个用户在哪个时间点登录。

    此外,我喜欢将我的密钥存储为 ENV 变量,所有线程/工作者都可以访问这些变量。您当然可以在部署中使用预加载步骤来重新生成它,但不要将其置于 Flask 应用程序的生命周期之外。

    【讨论】:

      猜你喜欢
      • 2016-06-18
      • 2020-06-06
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多