ruby-on-rails - 如何处理仅供其他第三方应用程序访问的 Web 应用程序的 HTTP 身份验证?

标签 ruby-on-rails http authentication http-headers http-token-authentication

我正在构建一个同时具有 API 和 UI 的 Rails 应用程序,我已经为 API 实现了 HTTP token 身份验证( header ),并且如果可能的话,我想继续为 Web 应用程序使用同样的方法。

我将用户 token 保存在 session[:token] 中,并使用 authenticate_or_request_with_http_token 方法进行身份验证。 application_controller 具有前置过滤器,所有其他 Controller 都被继承,因此 API 中的每个端点和 Web 应用程序中的每个页面都需要 HTTP header token 。

API 工作正常,因为合作伙伴应用程序每次都会发送 token 以访问端点,但在网络应用程序的情况下,我们是第一次获得 token (当用户从​​合作伙伴应用程序重定向时)并且控制权转移到我们的应用程序.然后我们需要一种方法来为 Rails 应用程序中的每个路由/页面发送 HTTP header token 。请给我建议一种方法,如果这看起来很复杂,请建议我采用完全不同的方法。

编辑:

def authenticate_user 
  authenticate_or_request_with_http_token do |token, options| 
    user_id = Setting.long_decode_id(token) 
    user = User.find_by(id: user_id) 
    if (user.present?) 
      session[:api_current_user] = user.id

最佳答案

我不知道在 Web 应用程序中使用 header 标记是否是最直接的方法,您有理由这样做吗?您需要将 token 注入(inject)用户发出的每个请求,因为他们的浏览器通常不会为他们这样做。

相反,为什么不在第一次访问时使用 token (如果这是您想要控制访问的方式),而是在第一次访问之后设置一个 session 标志以跳过过滤器之前的 session ,直到 session 过期?

或者,有一些很棒的身份验证 gem,您可以使用其中之一(例如 devise)

关于ruby-on-rails - 如何处理仅供其他第三方应用程序访问的 Web 应用程序的 HTTP 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36623892/

相关文章:

javascript - Express:有必要用status 200响应吗?

ruby-on-rails - RSpec:期望改变多个

ruby-on-rails - 为什么在引用对象属性时应该使用字符串而不是符号?

ruby-on-rails - capybara 无法使用 action_cable

c# - 使用 Darren Johnstone 的大文件上传库和 ASP.NET MVC Controller

authentication - 如何在 Tomcat 5.5.x 中向经过身份验证的用户授予访问权限?

ruby-on-rails - 如何根据表列安排任务?

http - 浏览器 cookie 问题

ruby-on-rails - 如何使用带有 ActionCable 的 devise_token_auth 来验证用户?

python - Steam WebAPI 验证用户