我正在构建一个功能,供用户注册、登录、验证和授权自己,特别是使用 Python (Flask) 作为后端。我找到了一些解决方案,例如flask-login和flask-security。
据我了解,flask-login实际上并没有进行任何身份验证,而是将所有 JWT 类型的工作留给我,而是flask-security处理这些场景。
话虽这么说,我有几个问题:
在我看来,它flask-security是建立在flask-login. 因此,使用该库似乎更好(至少对我来说),而不是尝试在重新设计身份验证方面重新发明轮子。最后一次更新是flask-security在 2020 年 4 月 23 日。这让我相信人们仍然在积极寻找改进方法。也就是说,flask-security两者是更好的选择吗?
我也想在生产中使用它。那么这也是一个可行的解决方案吗?
我习惯Flask-WTF将其 CSRF 安全功能用于我的 API。正如标题所示,我从 API 获得的响应显示“CSRF 会话令牌丢失”。但是,在检查开发人员工具中的网络选项卡后,最初访问 API 返回的会话出现在 cookie 部分中。此外,CSRF 令牌存在于请求标头中。下面是一些图片来说明我的意思:
请求失败
请求成功
过程
例子
前端是用React开发的,后端是用Python(Flask)开发的。两者均由Heroku托管。域名注册商位于GoDaddy,我使用Cloudflare作为我的 DNS 来重新路由流量并设置正确的域名。
示例请求如下所示:
const headers = {
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken
};
...
const handleFormSubmission = async e => {
e.preventDefault();
await axios.post('https://backend.com/add-results', { tokenId: tokenId }, { withCredentials: true, headers: headers })
}
Run Code Online (Sandbox Code Playgroud)
并且后端有以下设置:
...
CORS(app, origins=["https://www.example.com"], expose_headers=["Content-Type", "X-CSRFToken"], …Run Code Online (Sandbox Code Playgroud)