OAuth(开放授权)到底是什么?


Answers:


327

OAuth(开放授权)到底是什么?

OAuth允许通知资源提供者(例如Facebook)资源所有者(例如您)向第三方(例如Facebook应用程序)授予对其信息(例如您的朋友列表)的访问权限。

如果您读起来很清楚,我会理解您的困惑。因此,让我们举一个具体的例子:加入另一个社交网络!

假设您已有一个GMail帐户。您决定加入LinkedIn。手动添加您所有的很多朋友很烦人且容易出错。您可能会中途受够了,或者在他们的电子邮件地址中输入错别字以进行邀请。因此,您可能很想不要创建一个帐户。

面对这种情况,LinkedIn拥有一个Good Idea™来编写一个程序,该程序可以自动添加您的朋友列表,因为计算机在执行繁琐且易于出错的任务时效率更高,效率也更高。由于加入了网络现在这么容易,也没有办法,你会拒绝这样的提议,现在你会吗?

如果没有用于交换此联系人列表的API,则您必须为LinkedIn提供用户名和密码到您的GMail帐户,从而使他们拥有太多的权力

这就是OAuth的来源。如果您的GMail支持OAuth协议,那么LinkedIn可以要求您授权他们访问您的GMail联系人列表。

OAuth允许:

  1. 不同的访问级别:只读VS读写。这使您可以授予对用户列表的访问权限或双向访问权限,以自动将新的LinkedIn朋友同步到GMail联系人。
  2. 访问粒度:您可以决定仅授予对您的联系信息(用户名,电子邮件,出生日期等)或您的整个朋友列表,日历以及不授予访问权限的访问权限。
  3. 它允许您管理从资源提供者的应用程序的访问。如果第三方应用程序不提供取消访问权限的机制,则您将被他们有权访问您的信息所困扰。使用OAuth,可以随时撤消访问权限。

它会在不久的将来成为事实上的(标准吗?)?

好吧,尽管OAuth是向前迈出的重要一步,但如果人们使用不正确,OAuth就无法解决问题。例如,如果资源提供者一次只给您所有资源一个单一的读写访问级别,并且不提供管理访问的机制,那么就没有指向它的意义。换句话说,OAuth是一个提供授权功能而不仅仅是身份验证的框架。

实际上,它非常适合社交网络模型。对于想要允许第三方“插件”的社交网络而言,它尤其受欢迎。在该区域中,对资源的访问本质上是必需的,并且本质上也不可靠(即,您对这些应用程序的质量控制很少或没有质量控制)。

我还没有在野外看到这么多其他用途。我的意思是,我不知道网上金融咨询公司,将自动进入你的银行纪录,尽管它可能在技术上可以使用这种方式。


6
您使它易于理解。我可能已经将第一行改为这样。“ OAuth允许通知资源提供者(例如Gmail)资源所有者(例如您的gmail用户)向第三方(例如,LinkedIn帐户)授予对其信息(例如,您的联系人列表)的访问权限。” 您写的内容(即提供商和第三方“都”是Facebook)令人困惑。尽管它介绍了一个有趣的场景,但是Oauth也可以在公司内部不同项目之间内部使用。对?这就是为什么您介绍了一个复杂的简介吗?
亲爱的

根据我的理解,OAuth的目的是在不共享证书的情况下代表资源所有者向第三方应用程序授予有时间限制的授权。我很好奇我是否需要OAuth才能从移动应用程序(不涉及第三方)使用我的应用程序服务器上托管的API?
Monish Kamble '19

当受信任的一方授权我时,这并不意味着它也是一种身份验证机制吗?
可变

245

什么是oAuth?

OAuth只是一个安全的授权协议,它处理第三方应用程序的授权以访问用户数据而不暴露其密码。例如。(在许多网站上使用fb,gPlus,twitter登录。)都可以在此协议下工作。

参与方

当您了解参与方时,该协议将变得更加容易。基本上涉及三方:oAuth提供商,oAuth客户和所有者。

  • oAuth客户端(想要访问您的凭据的应用程序)
  • oAuth Provider(例如Facebook,Twitter ...)
  • 所有者(具有facebook,twitter ..帐户的人)

这个怎么运作?

我设想了一个场景,其中网站(stackoverflow)需要添加具有Facebook功能的登录名。因此,facebook是oAuth Provider,而stackoverflow是oAuth Client。

  1. 此步骤由应用程序的开发人员完成。在一开始,facebook(oAuth Provider)不了解stackoverflow(oAuth Client),因为它们之间没有链接。因此,第一步就是向Facebook 开发者网站注册stackoverflow 。这是手动完成的,开发人员需要将应用程序的信息提供给Facebook,例如应用程序的名称,网站,徽标,重定向网址(重要的网址)。然后stackoverflow成功注册,并从facebook获得了客户端ID,客户端密码等,并使用OAUTH启动并运行。 在此处输入图片说明

    2. 现在,当stackoverflow的用户单击fb按钮登录时。Stackoverflow请求带ClientId(fb使用它来识别客户端)的facebook和redirectUrl(成功后fb将返回此url)。因此,用户被重定向到facebook登录页面。这是用户(所有者)不向堆栈溢出提供其Facebook凭证的最佳部分

在此处输入图片说明

在此处输入图片说明

  1. 在所有者允许Stackoverflow访问信息之后。那么Facebook重定向回计算器,与沿AUTHCODE使用在步骤2中提供的的redirectUrl。
  2. 与Facebook与所获得的沿然后接触#1 AUTHCODE,以确保一切正常。
  3. 只有这样,facebook才会将访问令牌提供给stackoverflow。然后,stackoverflow使用访问令牌来检索所有者的信息,而无需使用密码。这就是oAuth的全部动机,在这种情况下,苛刻的要求从未暴露给第三方应用程序。

有关更多:

快速影片

网站链接


确保localhost也是一个URL,为什么不过期并在此处发布结果。
Balman Rawat

2
是的,您可以使用IP地址作为重定向URL:redirect_uri =' 127.0.0.1 :
4200

但是,电子邮件在oAuth客户端和oAuth提供程序上是否应该相同,才能正常工作?
Rowayda Khayri,

很好的解释
JayD

OAuth 2是安全协议,不是授权协议。答案以错误的音符开头。
拉贾特

13

简而言之,OAuth是一种使应用程序无需直接将您的用户登录信息获取到某些网站即可获得您的信息凭证的方法。例如,如果您在自己的网站上编写了一个应用程序,并希望该应用程序使用用户的Facebook帐户中的数据,则可以使用OAuth通过回调网址获取令牌,然后使用该令牌调用facebook API以获取其使用数据,直到令牌过期。网站之所以依赖它,是因为它使程序员能够访问其数据,而用户不必直接披露其信息并在线上散布其凭据,但仍可以为数据提供一定程度的保护。它会成为事实上的授权方法吗?也许,最近它在Twitter,Facebook,


14
OAuth不是身份验证过程,而是授权过程。
安德烈·卡隆(AndréCaron)2010年

我没有暗示该应用程序直接需要身份验证,但与服务提供商的用户验证授权某些第三方访问用户数据,我认为...
阿米尔

我增加了精度,因为OpenID专门针对委托身份验证(重新使用现有的外部帐户),希望人们不再共享其共享凭据。OAuth专门针对授权(重用资源),以希望促进信息交换。
安德烈·卡隆

9

Oauth无疑正在获得发展,并且在企业API中也很受欢迎。在应用程序和数据驱动的世界中,企业越来越多地通过Google,Facebook和Twitter来向外界公开API。随着这一发展,形成了三方认证三角

1)API提供商-任何通过API公开其资产的企业,例如Amazon,Target等。2)开发人员-通过此API构建移动/其他应用程序的企业3)最终用户-由-提供的服务的最终用户-说亚马逊的注册/来宾用户

现在,这发展出一种与安全性相关的情况-(我列出了其中的一些复杂性)1)作为最终用户,您希望允许开发人员代表您访问API。2)API提供者必须对开发者和最终用户进行身份验证3)最终用户应能够授予和撤消他们所给予同意的权限4)开发者可以在不同程度上信任API提供者授予她的权限级别不同

Oauth是一个授权框架,它试图以一种标准的方式解决上述问题。随着API和应用程序的兴起,这个问题将变得越来越重要,任何试图解决它的标准-无论是原始的还是其他的-作为API提供者/开发人员甚至最终用户都将受到关注!


9

OAuthO pen Auth orization)是用于访问授予/委托协议的开放标准。它用作Internet用户授予网站或应用程序访问其在其他网站上的信息的途径,而无需给他们提供密码。它不处理身份验证

要么

OAuth 2.0是一种协议,允许用户在不公开其凭据的情况下向一个站点授予对另一个站点的资源的有限访问权限。

  • 类比1:当今许多豪华车都配有代客钥匙。这是您为停车服务员提供的特殊钥匙,与常规钥匙不同,它不允许汽车行驶超过一英里或两英里。一些代客钥匙不会打开后备箱,而其他代客钥匙会阻止访问您的车载手机通讯录。不管代客钥匙施加什么限制,这个想法都非常聪明。您可以使用特殊钥匙为某人提供有限的访问权限,同时使用常规钥匙来解锁所有东西。来自auth0的src

  • 类比2:假设我们要填写一个银行帐户申请表。Oauth在这里的工作方式是,银行可以使用Adhaar或护照填写表格,而不是由申请人填写表格。

    这里涉及以下三个实体:

    1. 申请人,即所有者
    2. 银行帐户是OAuth客户端,他们需要信息
    3. Adhaar /护照ID是OAuth提供商

7

OAuth就是委派授权(选择可以为您执行授权的人)。请注意,身份验证和授权是不同的东西。OAuth是授权(访问控制),如果您还想实现身份验证(ID验证),则可以在OAuth之上使用OpenID协议。

如今,像Facebook,Google,Github等所有大公司都在使用这种身份验证/授权。例如,我刚刚使用我的Google帐户登录了此网站,这意味着Stackoverflow不知道我的密码,它从Google那里获得了允许(我的密码(显然已经暗藏)了)的津贴。这带来了很多好处,其中之一是;在不久的将来,您不必在每个网站上都建立多个帐户。一个网站(您最信任)可以用于登录所有其他网站。因此,您只需要记住一个密码即可。


2

OAuth 当我们使用Facebook / Google按钮注册SO帐户时发生。

  1. 应用程序(SO)将用户重定向到提供商的授权URL。(显示一个询问用户是否希望授予应用程序访问权限以读取和更新其数据的网页)。
  2. 用户同意批准申请程序。
  3. 服务提供者将授权代码作为参数传递,将用户重定向回应用程序(SO)。
  4. SO将代码交换为访问权限。

来源:OAuth1服务提供商


您好,我需要使用REST API,因此请安装oAuth,实际上我正在使用Magento,在本地主机中,我已经在实时服务器中安装了oAuth,如何安装,我正在使用GoDaddy VPS服务器,有帮助吗?@john joe
Gem

@Rathinam嗨,我想提供帮助,但这是我的专长。非常抱歉。
约翰·乔

我可以在没有oAuth的情况下使用REST API吗?@John Joe
Gem

@Rathinam是的,这取决于您
John Joe

1

OAuth是一种开放的授权标准,通常用作Internet用户使用其Microsoft,Google,Facebook或Twitter帐户登录第三方网站而无需暴露密码的一种方式。


2
我认为您误解了OAuth和OpenID
A23149577

0

OAuth是资源所有者(facebook,google,tweeter,microsoft live等)使用的协议,用于提供所需的信息或向第三方系统(例如您的网站)提供成功写入的权限。很有可能没有OAuth协议,凭据应可用于第三方系统,这将是这些系统之间不适当的通信方式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.