OAuth2和Omniauth的区别

23

我已经阅读了很多关于Omniauth和OAuth2的内容,以及Omniauth如何使用OAuth,但我不太明白每个的目的是什么。

例如,我知道使用Omniauth可以通过以下方式获取发送的参数:

@auth['omniauth.params']

但如果我不使用Omniauth,只用OAuth,我能做同样的事情吗?

我的真正问题是我不理解它们之间的区别,在哪里Omniauth结束,OAuth开始,以及我可以用Omniauth做什么,但无法使用OAuth实现的功能。


2
Fran,你提出问题的方式让我觉得你在使用Rails。这是真的吗? - pjmorse
是的,它是一个Rails应用程序。迟来的回复总比没有好 :D - Fran Martinez
1个回答

34

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

首先了解OAuth2。OAuth是一种授权系统,用于使用用户在另一个站点上的身份验证来授权用户在一个站点上进行操作。OAuth本身描述了管理此过程的系统,但它并不指定站点用于执行此过程的代码。(这意味着,例如,基于PHP的站点可以使用基于Ruby的站点作为提供者,并且无需知道提供者背后发生了什么。)

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

您“可以”使用OAuth2 gem / class而不使用Omniauth,并自行处理OAuth2身份验证的详细信息,但我不确定为什么要这样做。

关于您可以使用Omniauth但OAuth不能实现的内容,大多数都是用于与其他非OAuth服务进行身份验证(Omniauth允许使用社区构建的“策略”进行身份验证,例如Stack Exchange)。


4
这并不完全正确。OAuth并不是“在站点之间共享验证的协议”,也不是“描述两个站点进行用户身份验证的一系列步骤”。它主要关注授权,即“资源所有者”允许第三方应用代表他们访问资源。该资源可以是提供有关资源所有者身份信息的帐户,但是该应用程序实际上可能不知道任何关于其所有者的信息。 - Shaun the Sheep
1
谢谢澄清。我做了一些编辑 - “协议”这个词用起来合适吗? - pjmorse
1
是的,我肯定会这么说。OAuth2规范也使用它。它只不过不是一个身份验证协议。请注意,OpenID Connect基于OAuth2提供身份验证和身份相关功能。 - Shaun the Sheep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接