Flask-Security CSRF令牌

Jac*_*opo 11 flask angularjs flask-security

我有一个烧瓶应用程序作为REST API后端.我想为后端实现基于令牌的身份验证,但为了做到这一点,我需要检索用户令牌.Flask-Security文档明确指出,要检索令牌,需要执行HTTP POST,并将身份验证详细信息作为JSON数据发送到身份验证端点.不幸的是,我不明白如何检索执行此类请求所需的CSRF令牌.

如果我使用扩展提供的登录页面/模板,CSRF令牌将在窗体的隐藏字段中传递给客户端.问题是:

如何在不访问和解析登录页面的情况下检索CSRF令牌,例如使用$ http方法或移动应用程序的angularJS应用程序?

显然我可以避免使用Flask-Security并自己实现这些部分,但我对webapps相对缺乏经验,我觉得我可能会以错误的方式接近它.

小智 5

我有一个类似的用例,并按照 Flask-WTF 文档中的这个例子结束了解决它:https : //flask-wtf.readthedocs.org/en/latest/csrf.html#ajax

因此,通过 CSRF 保护应用程序CsrfProtect(app), csrf_token() 在所有模板中都可用。然后您可以通过脚本标签轻松地使其可用:

<script type="text/javascript">
    var csrftoken = "{{ csrf_token() }}"
</script>
Run Code Online (Sandbox Code Playgroud)

现在将令牌添加到 Flask-Security /login 端点的发布数据中。

  • 感谢您的回答,但我最终实现了自己的用户管理解决方案。此外,这仅在您使用 Flask 应用程序提供页面并使用 Jinja 呈现模板时才有效。如果您仅将 Flask 应用程序用于后端 (REST API),并且前端使用其他方法提供服务,则您必须提供 API 端点来检索令牌并将其呈现在 json 响应中。我不确定这将如何工作,我可能会尝试一下。 (2认同)

Mig*_*uel 3

我尚未测试这是否有效,但通过简要检查源代码,您似乎必须向登录 URL 发送 GET 请求,并将内容类型设置为application/json. Flask-Security 使用包含令牌的 JSON 版本的登录表单来响应此请求。获得令牌后,您可以发送 POST 请求。