我有一个使用Flask构建的API,并将Gunicorn与postgreSQL一起用作Linux(centOS)上的数据库
使用Gunicorn设置多个工作程序时,如果用户登录到API并获得令牌,则如果该令牌用于执行请求,则该令牌将不正确。
当只有一个工作程序和多个线程但没有多个工作程序时,它起作用。我应该如何处理令牌的存储,以便不同的工作人员可以从唯一的数据源中检索令牌?
要生成令牌,我们检索密钥并创建一个json网络令牌。然后,我们将此令牌和用户名存储在字典中。
此外,密钥是在烧瓶的每个开始处生成的,也许使用preload_app的枪豆可以帮助每个工人使用相同的密钥。
答案 0 :(得分:1)
JWT的想法是令牌返回给用户,然后令牌将其附加到每个请求。然后,您无需存储任何内容,因为令牌具有内置的内容哈希,当有人弄乱令牌内容时,该哈希无效。发行令牌时,您唯一想做的就是记录哪个用户在那个时候登录了。
此外,我喜欢将我的秘密密钥存储为ENV变量,所有线程/工作人员都可以访问。当然,您可以在部署中有一个预加载步骤来重新生成它,但不要在Flask应用程序的生命周期中使用它。
答案 1 :(得分:0)
除了将您的http请求连接到python源代码Gunicorn中各自的功能之外,与身份验证没有任何关系。
您的身份验证令牌很可能会保存在数据库中,并随后针对每个请求进行检索/匹配。您可以根据需要选择将其缓存。