首页 文章

没有cookie的Rails中的OAuth?

提问于
浏览
1

通常,Rails中的OAuth由OmniAuth处理,可以直接使用,也可以与Devise一起使用 . 但是,这似乎不适用于仅API后端; OmniAuth依赖于cookie并拥有自己的(不透明的)中间件,而cookie对于本机客户端并不是很好 . 这就是为什么我在寻找一种没有cookie的OAuth方法 . 我正在尝试 Build 一个单独的前端和后端的网站;在我看来,OAuth通过网页的工作流程是

  • 用户点击我的前端的一个按钮,该按钮链接到OAuth提供商,并在我的前端进行回调 .

  • 用户在提供者页面中进行身份验证和授权,并使用凭据重定向到我的前端 .

  • 我的前端从查询字符串中捕获令牌,并将它们发送到服务器以登录或注册新帐户,如AJAX . 服务器在使用会话标识符进行响应之前验证并保存令牌 .

  • 来自前端的未来AJAX附加了会话标识符,可以是某些标头或查询字符串 .

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

FWIW,我在macOS Sierra,每个宝石最新版本 .

1 回答

  • 0

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

    您还可以在设计上禁用基于cookie的会话,或者使用您自己的流覆盖登录/注销 .

    你可以推出自己的oauth流程,你可以检查一些omniauth策略,看看你如何为每个提供者做这件事 .

    它基本上是通过具有特定参数的URL重定向,直到您获得令牌 .

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

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

相关问题