Ruby 使用标头进行身份验证的方法?

Posted

技术标签:

【中文标题】Ruby 使用标头进行身份验证的方法?【英文标题】:Ruby ways to authenticate using headers? 【发布时间】:2011-02-22 19:31:06 【问题描述】:

我正在用 Ruby-on-Rails 设计一个 API 系统,我希望能够记录查询和验证用户。

但是,我没有传统的登录系统,我想使用用户可以在请求的 HTTP 标头中提交的 APIkey 和签名。 (类似于亚马逊的服务工作方式)

我希望能够请求 /photos/create 并提交一个标有 X-APIKey: 12345 的标头,然后使用签名验证请求,而不是请求 /users/12345/photos/create

是否有任何宝石可以适应这种情况?或者更好的是,任何无需适应即可做到这一点的宝石?

或者您认为让他们使用 POST/GET 变量在每个请求中发送 API 密钥会更明智?

【问题讨论】:

【参考方案1】:

您可能已经使用了身份验证库。它可能有一种方法可以覆盖它检查身份验证的方式。最有可能的是,该方法被命名为authenticated?。不过,请参阅您正在使用的库的文档。

我不会寻找现有的 gem,而是自己实现了它;这样做应该不会太难。这是一个示例样板实现:

class ApplicationController < ActionController::Base
  def authenticated?
    current_user.is_a?(User)
  end

  def current_user
    user_from_session || user_from_api_key
  end

  def user_from_session
    # ... use session[:user] or whatever.
  end

  def user_from_api_key
    User.find_by_api_key(request.headers["X-APIKey"])
  end
end

这是我能得到的最具体的信息,因为您没有说明您当前的身份验证设置。

【讨论】:

我遇到了compulsivoco.com/2009/05/…,除了 August 的代码示例之外,它还可以帮助您相处

以上是关于Ruby 使用标头进行身份验证的方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Paypal 的 Adaptive Payments API 和 Ruby 来避免身份验证和时间问题?

有没有办法将 Authorize 属性与没有身份验证标头的请求一起使用?

使用 HTTP Web 请求发送 HTTP 标头以进行 NTLM 身份验证

如何使用 Jest 测试身份验证标头?

ruby 简单设计使用多个令牌进行身份验证

使用 RESTful 身份验证插件进行 Ruby on Rails 功能测试