- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 Rails API 构建一个简单的 api ,并想确保我在这里走在正确的 rails 上。我正在使用 devise 来处理登录,并决定使用 Devise 的 token_authenticatable
选项,它会生成您需要随每个请求发送的 API key 。
我将 API 与主干/牵线木偶前端配对,并且通常想知道我应该如何处理 session 。我的第一个想法是将 api key 存储在本地存储或 cookie 中,并在页面加载时检索它,但是从安全角度来看,关于以这种方式存储 api key 的一些事情困扰着我。通过查看本地存储/cookie 或嗅探任何通过的请求并使用它无限期地模拟该用户来获取 api key 会不会很容易?我目前正在每次登录时重置 api key ,但即使这样看起来也很频繁 - 任何时候您在任何设备上登录,这意味着您会在其他设备上退出,这有点痛苦。如果我可以放弃这个重置,我觉得从可用性的角度来看它会有所改善。
我在这里可能完全错了(希望我是),任何人都可以解释以这种方式进行身份验证是否可靠安全,如果不是,那么有什么好的选择?总的来说,我正在寻找一种方法,我可以安全地让用户“登录”到 API 访问,而无需经常强制重新进行身份验证。
最佳答案
token_authenticatable
容易受到定时攻击,这在 this blog post 中有很好的解释.这些攻击是原因 token_authenticatable
已从设计 3.1 中删除。见 plataformatec blog post了解更多信息。
为了拥有最安全的 token 认证机制, token :
secret_key_base
Cookie 就应该是安全的没有泄漏。 SecureRandom.hex
仅当您使用 Ruby 2.5+ 时。 sysrandom
如果您使用的是较旧的 Ruby。 sysrandom
的自述文件和博客文章
How to Generate Secure Random Numbers in Various Programming Languages .
Devise.secure_compare(user.auth_token, params[:auth_token]
进行比较。 .ActiveSupport::SecurityUtils.secure_compare
.User.find_by(auth_token: params[:auth_token])
.这很容易受到定时攻击! Native mobile apps using Facebook's SDKs will get long-lived access tokens, good for about 60 days. These tokens will be refreshed once per day when the person using your app makes a request to Facebook's servers. If no requests are made, the token will expire after about 60 days and the person will have to go through the login flow again to get a new token.
关于ruby-on-rails - 设计的 token_authenticable 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18605294/
我想知道如何使用 devise :token_authenticable 使用设计实现自定义身份验证策略. 我已经找到了有关如何使用 devise :database_authenticatable
我正在用 Rails API 构建一个简单的 api ,并想确保我在这里走在正确的 rails 上。我正在使用 devise 来处理登录,并决定使用 Devise 的 token_authentica
我正在使用 Rails 3 并且我已经成功地构建了一个 web api。对于一堆 Controller 需要登录,所以我决定使用 Devise 和 token_authenticable。它正在工作,
我正在尝试构建一个 API 以使用 Devise 和一个authenticatable_token 登录到我的rails 应用程序。 我在我的 API 模块中创建了一个 SessionsControl
我是一名优秀的程序员,十分优秀!