oauth2 策略与 ruby​​ on rails 与许多具有 API 的客户端

Posted

技术标签:

【中文标题】oauth2 策略与 ruby​​ on rails 与许多具有 API 的客户端【英文标题】:oauth2 strategy with ruby on rails with many clients that have an API 【发布时间】:2018-05-16 18:59:19 【问题描述】:

我研究 oauth2 已经有一段时间了,还没有想出完美的解决方案,想看看有没有其他人以前做过。目前我在一个代码库中有两个应用程序。这些应用程序共享的唯一内容是身份验证。我要做的是为 oauth2 服务器创建第三个应用程序。然后我想将现有的应用程序分成两个应用程序。试图了解 Google 如何处理他们的 oauth 内容。所以域会是这样的。

http://accounts.domain.com http://app1.domain.com http://app2.domain.com

我在这两个帖子中发现了一些关于门卫和设计的好信息。目前我正在使用设计,以便使这部分更容易。

https://dev.mikamai.com/2015/02/11/oauth2-on-rails/ https://dev.mikamai.com/2015/03/02/oauth2-on-rails-the-client-application/

因此,这些应用程序 app1 和 app2 中的每一个都将具有需要对其使用进行身份验证的 API。

所以我有以下问题。

    如果 app1 需要使用帐户子域进行验证,这是否意味着从 API 的角度来看,我需要在每个请求上调用 oauth2 服务器应用程序?这似乎是很多开销。这是谷歌的做法还是他们有什么技巧?

    app1 和 app2 是否各自负责自己的会话超时?如果 app1 会话有效,但用户通过转到 auth2 服务器应用程序直接删除了他们的帐户,会发生什么情况?

    如果 app1 和 app2 负责会话,那么他们是否还想回调帐户 oauth2 服务器以验证用户是否仍然存在?

我正在尝试清除所有这些内容,但还没有找到一个很好的例子来说明当 oauth 客户端实际上是 API 并且它们也是 Web 应用程序时这将如何工作。也许我也想多了,对每个 API 请求进行额外调用是一种方式。

任何有关这方面的帮助或教程将不胜感激。

【问题讨论】:

【参考方案1】:

The OAuth 2.0 Authorization Framework 提供五种授权技术:

授权码授予 隐式授权 资源所有者凭据授予 客户端凭据授予 刷新令牌授权

我相信我们的讨论是关于Client credentials grant(我认为谷歌通常使用它)。

让我们试着理解这个流程图:

所以,here 在步骤[E]

重复步骤 (C) 和 (D) 直到访问令牌过期。如果 客户端知道访问令牌已过期,它跳到步骤(G); 否则,它会发出另一个受保护的资源请求。

这意味着它实际上并没有在每个请求上命中Authorization Server。只有当client 发现令牌已过期时,它才会访问授权服务器。所以,如果我们删除自己,它会使令牌过期!

也许这些文档可以帮助你更多:

    https://www.rfc-editor.org/rfc/rfc6749 https://alexbilbie.com/guide-to-oauth-2-grants/

干杯!

【讨论】:

以上是关于oauth2 策略与 ruby​​ on rails 与许多具有 API 的客户端的主要内容,如果未能解决你的问题,请参考以下文章

Angular.js 与 Ruby On Rails 表单的集成

Ruby on Rails - AJAX 请求不起作用(跨域),尝试了一切

paypal 与 ruby​​ on rails 集成的“zoid 破坏了所有错误”

$redis 全局变量与 ruby​​ on rails

如何将 HSQLDB 与 Ruby on Rails 一起使用。

与 Ruby on Rails 相关的 ORM 是啥?