OAuth2 和 Omniauth 的区别

Posted

技术标签:

【中文标题】OAuth2 和 Omniauth 的区别【英文标题】:difference between OAuth2 and Omniauth 【发布时间】:2014-01-09 07:38:30 【问题描述】:

我已经阅读了很多关于 Omniauth 和 OAuth2 以及 Omniauth 如何使用 OAuth 的内容,但我并不真正了解它们各自的目标是什么。

例如,我知道使用 Omniauth 我可以使用

取回发送的参数

@auth['omniauth.params']

但如果我使用的是 OAuth,没有 Omniauth,我可以这样做吗?

我真正的问题是我不明白它们之间的区别,Omniauth 在哪里结束,OAuth 从哪里开始,我可以用 Omniauth 做什么而 OAuth 无法做到。

【问题讨论】:

Fran,你写这个问题的方式让我觉得你在使用 Rails。这是真的吗? 是的,它是一个 Rails 应用程序。迟到总比没有好:D 【参考方案1】:

在这个答案中,我假设您使用的是 Rails(或其他一些基于 Rack 的框架),因为没有它 Omniauth 没有多大意义。

从 OAuth2 开始。 OAuth 是一种系统,用于在一个站点上使用他们在另一个站点上的身份验证来授权用户。 OAuth 本身描述了管理它的系统,但它没有指定站点用来执行它的代码。 (这意味着,例如,基于 php 的站点可以使用基于 Ruby 的站点作为提供者,而无需知道提供者的幕后情况。)

这就是 Omniauth 的用武之地。Omniauth 是一个包,用于支持基于 Rack 的站点中的分散式身份验证。 OAuth2 是它支持的用于处理此问题的协议中的一个,它包含一个名为 OAuth2 的类,它是 OAuth2 规范的 Ruby 实现。您可以将 Omniauth 视为 OAuth2 的包装器,它处理协议的细节,而不会过多地打扰您。

可以在不使用 Omniauth 的情况下使用 OAuth2 gem/class,并自己处理通过 OAuth2 进行身份验证的具体细节,但我不知道为什么。

就您可以使用 OAuth 无法实现的 Omniauth 执行的操作而言,其中大部分是使用其他非 OAuth 服务进行身份验证(Omniauth 允许使用社区构建的“策略”进行身份验证,例如 Stack Exchange) .

【讨论】:

这不太正确。 OAuth 不是“在站点之间共享身份验证的协议”,也不是“描述两个站点为验证用户而采取的一系列步骤”。它主要是关于授权,“资源所有者”允许第三方应用程序代表他们访问资源。资源可以是一个帐户,提供有关资源所有者是谁的一些信息,但应用程序实际上可能对他们一无所知。 感谢您的澄清。我做了一些修改——“协议”是一个合理的词吗? 是的,我肯定会这么说。 The OAuth2 specification 也使用它。它只是不是一个身份验证协议。请注意,OpenID Connect 基于 OAuth2 构建以提供身份验证和身份相关功能。

以上是关于OAuth2 和 Omniauth 的区别的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 应用程序中使用 Omniauth-oauth2 刷新令牌

Oauth2 Instagram API“重定向 URI 与注册的重定向 URI 不匹配”

使用 omniauth-google-oauth2 redirect_uri_mismatch 进行身份验证

IS-OAuth:OAuth2.0

连接 OAuth2 资源服务器和认证服务器

OAuth2.0系列博客教程汇总