security - 使用 Ory/Kratos 登录/注册 API 流程
问题描述
在文档中,有一个大而明亮的红色警告:
永远不要使用 API 流来实现浏览器应用程序!
在单页应用程序和服务器端应用程序中使用 API 流会打开几个潜在的攻击向量,包括登录和其他 CSRF 攻击。
该文档没有详细说明这些攻击是什么。如果我通过在服务器上存储会话数据、仅允许服务器访问此 API 以及实施我自己的 csrf 保护来正确保护我的应用程序,我是否安全?如果不是,我将面临哪些攻击,我应该采取哪些额外措施?
当然,必须有一种方法来保护我的应用程序,而无需拆除正在运行的 javascript vm,然后依次重定向 3 次以查看登录/注册页面。对于现代应用程序,我认为用户可能会期望这种不连续的转换来成功进行身份验证,但我认为仅查看登录/注册页面就不一定需要这种转换。
解决方案
有两种使用 Kratos 的方法。
From a WebApp (browser)
From a Native app (iOS, Android...)
第一种方法是使用浏览器重定向并设置 csrf 令牌。
第二种方式不设置 csrf 令牌,因为不涉及浏览器。
这就是为什么会有警告指出任何类型的“浏览器”相关应用程序都不应使用本机应用程序流程中的方法,反之亦然!
例如,这里是您为 API 客户端(本机应用程序)初始化登录流程的方式
https://www.ory.sh/kratos/docs/reference/api#initialize-login-flow-for-api-clients
这是一个如何为浏览器客户端初始化登录流程的示例
https://www.ory.sh/kratos/docs/reference/api#initialize-login-flow-for-browsers
自助服务配置适用于您的浏览器重定向流(即浏览器客户端)。
这个答案的所有功劳归于https://github.com/Benehiko。
推荐阅读
- php - 检索/收集(急切的负载)父母关系的最佳方法是什么?
- css - 带有覆盖所有空闲空间的文本和图像的网格纵横比
- express - 更正 url 到由 webpack 在 express 中生成的资产文件
- php - 通过 Post 方法将图像从 android 发送到 PHP 并将其保存在服务器中?
- python - 在 wlan1 而不是 wlan0 上运行烧瓶文件
- javascript - 在 Javascript 中列出自嵌套
- java - 在linkedList中实现一个返回当前节点的方法
- django - 仅当发布的用户是登录用户时如何删除记录
- sql-server - WHERE 子句部分基于另一个表中的字段值:有没有比 exec 使用动态字符串更好的方法?
- vb.net - 如何在 VB.NET 中执行重新解释转换