如何实现无状态烧瓶 webapp

Posted

技术标签:

【中文标题】如何实现无状态烧瓶 webapp【英文标题】:how to implement stateless flask webapp 【发布时间】:2021-06-12 16:36:56 【问题描述】:

我正在为一个无状态的 Flask 应用程序而苦苦挣扎。通常我使用烧瓶登录来处理所有用户管理。但是现在我需要做这个无状态的,因为应用程序应该在云上运行。所以它必须是无状态的。

我包含的 RestAPI 完美运行(我在那里使用令牌)。但是我怎么能处理前端的无状态部分呢? 如何获取请求中的用户信息?在无状态服务器上,我无法使用 clientsession,因为我无法在请求中验证它?我也不能使用我可爱的 ​​current_user 变量:(

有什么帮助吗?

帕斯卡

【问题讨论】:

【参考方案1】:

有几种类型的身份验证,Flask-Login 使用一种称为session authentication 的身份验证,如果你想让你的应用程序无状态,你应该使用token authentication,如 OAuth2 或 JWT。看看Flask-JWTFlask-JWT-ExtendedFlask-OAuthLib

但这并不意味着您必须重构您的应用程序,您只需从您的云提供商负载均衡器中启用sticky session 功能即可。

查看以下文档以在 AWS 上执行此操作:https://docs.aws.amazon.com/elasticloadbalancing/latest/application/sticky-sessions.html

【讨论】:

在谷歌云运行中无法进行粘性会话。所以我必须使用其他图书馆之一。是否可以使用 Flask-JWT-Extended 来处理我使用 Flask-Login 所做的事情?喜欢直接在我的模板中使用current_user?看来我必须自己实现像login_viewlogin_message 这样很棒的东西? 我尝试在我的项目中实现Flask-JWT-Extended。但是现在我在处理重定向时遇到了问题。我在重定向中添加了带有['X-JWT-TOKEN' 的标头。但如果我访问受保护的站点,它总是会向我发送"msg": "Missing Authorization Header"

以上是关于如何实现无状态烧瓶 webapp的主要内容,如果未能解决你的问题,请参考以下文章

何时应该实现刷新令牌以及如何保持无状态?

beego应用做纯API后端如何使用jwt实现无状态权限验证

Swift - 如何实现登录/会话(无代码)

云原生应用实现规范 - 初识 Operator

Flink 如何实现新的流处理应用第二部分:版本化状态

Flink 如何实现新的流处理应用第二部分:版本化状态