【问题标题】:OAuth in Rails without cookies?Rails 中的 OAuth 没有 cookie?
【发布时间】:2017-11-28 18:55:54
【问题描述】:

Rails 中的 OAuth 通常由 OmniAuth 处理,可以直接使用,也可以与 Devise 一起使用。但是,这似乎不适用于仅 API 的后端。 OmniAuth 依赖于 cookie 并且有自己的(不透明的)中间件,而 cookie 在本机客户端上表现不佳。这就是为什么我正在寻找一种不使用 cookie 进行 OAuth 的方法。我正在尝试建立一个前端和后端分开的网站;在我看来,通过网页进行 OAuth 的工作流程是

  1. 用户在我的前端单击一个按钮,链接到 OAuth 提供程序,在我的前端有一个回调。
  2. 用户在提供程序页面中进行身份验证和授权,并使用凭据重定向到我的前端。
  3. 我的前端从查询字符串中捕获令牌,并将它们发送到服务器以登录或注册一个新帐户,如 AJAX。服务器在使用会话标识符进行响应之前验证并保存令牌。
  4. 来自前端的未来 AJAX 在某些标头或查询字符串中附加了会话标识符。

我想我知道如何从头开始做这件事;实际上我已经创建了一个完全忽略 cookie 的 Redis 会话存储,并且会话标识符是从 Authorization 标头中提取的。 (不,JWT 不是解决方案,因为它不能轻易撤销。Redis 可以。)但是我仍然想知道是否有任何可以使用的解决方案,或者 Devise 或 OmniAuth 是否已经涵盖了无 cookie 服务器。

FWIW,我在 macOS Sierra 上,每个 gem 最新版本。

【问题讨论】:

    标签: ruby-on-rails oauth devise omniauth rails-api


    【解决方案1】:

    我认为您可以为omniauth 提供不同的会话存储: https://github.com/omniauth/omniauth#integrating-omniauth-into-your-rails-api

    您还可以在设计时禁用基于 cookie 的会话,或者简单地使用您自己的流程覆盖登录/注销。

    您可以推出自己的 oauth 流程,您可以查看一些omniauth 策略,了解如何为每个提供商执行此操作。

    基本上就是通过带有特定参数的 url 进行重定向,直到获得令牌。

    关于我现在正在开发的内容,我基本上使用omniauth 通过Oauth2 登录,并设计用于基于电子邮件的登录。使用omniauth,我使用响应哈希来创建我自己的会话,并且我基本上劫持了设计登录登录到登录我自己的“方法”。然后我在整个用户体验中都依赖同一个会话。

    不确定如何在 API 方面做到这一点,但只要您可以验证 Oauth 流程是否正确并且您有他们的电子邮件,那么您只需执行您经常做的任何事情来让他们保持登录状态。

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 2015-01-23
      • 2013-09-30
      • 2011-05-11
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2014-11-07
      • 2011-10-13
      相关资源
      最近更新 更多