【问题标题】:How to handle HTTP authentication for web app which will be accessed by other third party applications only?如何处理仅由其他第三方应用程序访问的 Web 应用程序的 HTTP 身份验证?
【发布时间】:2016-08-06 01:17:37
【问题描述】:

我正在构建一个同时具有 API 和 UI 的 Rails 应用程序,我已经为 API 实现了 HTTP 令牌身份验证(标头),并希望尽可能继续为 Web 应用程序使用相同的方法。

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

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

编辑:

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

【问题讨论】:

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


    【解决方案1】:

    我不知道使用标头标记是否是 Web 应用程序中最直接的方法,您是否有理由这样做?您需要将令牌注入到用户发出的每个请求中,因为他们的浏览器通常不会为他们执行此操作。

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

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

    【讨论】:

    • 嗨,马特,感谢您的回答。我同意,标头令牌不是最好的方法。但是由于某些原因(非技术性),我们必须为当前项目采用这种方式。我想试试你(会话)的其他建议。你能帮我解决这个问题吗(我是 Rails 新手)。在问题中添加一些代码,请检查
    • 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
    • 嗨@PrasadPilla,该代码看起来很棒-我已将其添加到您的问题中,因为格式化后更容易理解。它是否有效或导致问题?只要您在之前的过滤器中使用会话变量来绕过对后续请求的检查,这对我来说似乎是正确的方法。
    • 嘿,马特,我有一个过滤器可以让每个请求都通过身份验证方法...在 :authenticate_user 之前。但是我有点困惑如何在存储用户会话时跳过它。
    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多