【发布时间】:2017-11-28 18:55:54
【问题描述】:
Rails 中的 OAuth 通常由 OmniAuth 处理,可以直接使用,也可以与 Devise 一起使用。但是,这似乎不适用于仅 API 的后端。 OmniAuth 依赖于 cookie 并且有自己的(不透明的)中间件,而 cookie 在本机客户端上表现不佳。这就是为什么我正在寻找一种不使用 cookie 进行 OAuth 的方法。我正在尝试建立一个前端和后端分开的网站;在我看来,通过网页进行 OAuth 的工作流程是
- 用户在我的前端单击一个按钮,链接到 OAuth 提供程序,在我的前端有一个回调。
- 用户在提供程序页面中进行身份验证和授权,并使用凭据重定向到我的前端。
- 我的前端从查询字符串中捕获令牌,并将它们发送到服务器以登录或注册一个新帐户,如 AJAX。服务器在使用会话标识符进行响应之前验证并保存令牌。
- 来自前端的未来 AJAX 在某些标头或查询字符串中附加了会话标识符。
我想我知道如何从头开始做这件事;实际上我已经创建了一个完全忽略 cookie 的 Redis 会话存储,并且会话标识符是从 Authorization 标头中提取的。 (不,JWT 不是解决方案,因为它不能轻易撤销。Redis 可以。)但是我仍然想知道是否有任何可以使用的解决方案,或者 Devise 或 OmniAuth 是否已经涵盖了无 cookie 服务器。
FWIW,我在 macOS Sierra 上,每个 gem 最新版本。
【问题讨论】:
标签: ruby-on-rails oauth devise omniauth rails-api