OAuth 2与OAuth 1有什么不同?

用非常简单的话来说,有人可以解释OAuth 2和OAuth 1之间的区别吗?

OAuth 1是否已经过时了? 应该实现OAuth 2吗? 我没有看到许多OAuth 2的实现; 大多数仍在使用OAuth 1,这让我怀疑OAuth 2是否可以使用。 是吗?

Eran Hammer-Lahav在他介绍OAuth 2.0的文章中解释了大部分差异方面做了出色的工作。 总而言之,这里是关键的区别:

更多的OAuthstream程允许更好的支持非浏览器的应用程序。 这是对来自不是基于浏览器的客户端应用程序的OAuth的主要批评。 例如,在OAuth 1.0中,桌面应用程序或移动电话应用程序必须指示用户打开其浏览器以访问所需的服务,使用服务进行身份validation,然后将令牌从服务中复制回应用程序。 这里主要的批评是反对用户体验。 使用OAuth 2.0,现在有一种应用程序获取用户授权的新方法。

OAuth 2.0不再需要客户端应用程序进行encryption。 这听起来回到了旧的TwitterauthenticationAPI,它不需要应用程序HMAC哈希令牌和请求string。 使用OAuth 2.0,应用程序可以仅使用HTTPS上发布的令牌进行请求。

OAuth 2.0签名要简单得多。 没有更多的特殊parsing,sorting或编码。

OAuth 2.0访问令牌是“短暂的”。 通常情况下,OAuth 1.0访问令牌可以存储一年或更长时间(Twitter永远不会让它们过期)。 OAuth 2.0具有刷新令牌的概念。 虽然我不完全确定这些是什么,但我的猜测是,您的访问令牌可以是短暂的(即基于会话),而刷新令牌可以是“生命期”。 您将使用刷新令牌来获取新的访问令牌,而不是让用户重新授权您的应用程序。

最后,OAuth 2.0旨在将负责处理OAuth请求的服务器与处理用户授权的服务器之间的angular色完全分离。 关于这方面的更多信息详见上述文章。

我在这里看到了很好的答案,但是我错过了一些图表,因为我必须使用Spring框架,所以我遇到了他们的解释 。

我发现下面的图非常有用。 它们说明了使用OAuth2和OAuth1的各方之间的沟通差异。


OAuth 2

在这里输入图像描述


OAuth 1

在这里输入图像描述

以前的解释是过分详细和复杂的国际海事组织。 简而言之,OAuth 2将安全委托给HTTPS协议。 OAuth 1不需要这个,因此有其他的方法来处理各种攻击。 这些方法要求应用程序从事某些复杂且难以实现的安全协议。 因此,仅仅依靠HTTPS进行安全性更简单,这样应用程序开发人员就不用担心了。

至于你的其他问题,答案取决于。 有些服务不希望要求使用HTTPS,在OAuth 2之前开发,或者有一些其他的要求可能阻止他们使用OAuth 2.另外,关于OAuth 2协议本身也有很多争议。 正如您所看到的,Facebook,Google和其他几个实施的协议版本略有不同。 所以有些人坚持使用OAuth 1,因为它在不同的平台上更加统一。 最近,OAuth 2协议已经完成,但我们还没有看到如何采用。

请注意,使用Oauth 2存在严重的安全性问题:

一个惨淡的文章

和更技术的一个

请注意这些来自Oauth 2的主要作者。

关键点:

  • Oauth 2不提供SSL上的安全性,而Oauth 1是独立于传输的。

  • 从某种意义上说,SSL并不安全,因为服务器不会validation连接,而且通用客户端库可以轻松地忽略故障。

    SSL / TLS的问题在于,当您无法在客户端validation证书时,连接仍然有效。 任何时候忽略错误都会导致成功,开发者将会这样做。 服务器无法执行证书validation,即使可以,攻击者也一定不会。

  • 您可以将您的所有安全性用尽手指,这在OAuth 1.0中难以做到:

    第二个常见的潜在问题是错别字。 你会认为这是一个适当的devise,当省略一个字符(''在'https')取消令牌的整个安全? 或者可能(通过有效且经过validation的SSL / TLS连接)将请求发送到错误的目的地(比如' http://gatest.com '?)。 请记住,能够使用命令行中的OAuth承载令牌显然是一个使用案例持票者代币提倡者。

一旦令牌生成,OAuth 2.0签名就不需要实际的API调用。 它只有一个安全令牌。

OAuth 1.0要求客户端为每个API调用发送两个安全令牌,并使用两者来生成签名。 它要求受保护的资源端点有权访问客户端凭证以validation请求。

这里描述了OAuth 1.0和2.0之间的区别以及两者如何工作。

OAuth 2显然是浪费时间(从大量参与其中的人的口中):

http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/

他说(编辑简洁,粗体强调):

…我不能再与OAuth 2.0标准联系在一起了。 我辞去了作为主要作者和编辑的职位,从规范中撤回了我的名字,离开了工作组。 从文件中删除我的名字,我苦心经营了三年,二十多次的草稿并不容易。 决定继续从事我已经领导了五年以上的努力,实在令人痛苦。

最后,我得出结论OAuth 2.0是一个不好的协议。 WS- *不好。 这已经够糟糕了,我不想再与它联系在一起了。 …与OAuth 1.0相比,2.0规范更复杂,更less互操作性,更less用处,更不完整,最重要的是不太安全。

需要说明的是, 开发人员对OAuth 2.0的深入理解,可能会导致安全实施。 但是,在大多数开发人员的手中,正如过去两年的经验一样,2.0可能会产生不安全的实现。

OAuth 1.0协议( RFC 5849 )的安全性依赖于embedded在客户端应用程序中的秘密密钥可以保密的假设。 但是,这个假设是天真的。

在OAuth 2.0( RFC 6749 )中,这种天真的客户端应用程序被称为机密客户端。 另一方面,在难以保密的环境中的客户端应用被称为公共客户端。 见2.1。 客户types的细节。

从这个意义上说,OAuth 1.0只是一个规范,只针对机密客户。

“ OAuth 2.0和通向地狱之路 ”说OAuth 2.0不太安全,但OAuth 1.0客户端和OAuth 2.0机密客户端之间的安全级别没有实际差异。 OAuth 1.0需要计算签名,但是如果已确定客户端的密钥可以保密,则不会提高安全性。 计算签名只是一个繁琐的计算,没有任何实际的安全性增强。 我的意思是,与OAuth 2.0客户端通过TLS连接到服务器并提供client_idclient_secret的简单性相比,不能说繁琐的计算在安全性方面更好。

另外,RFC 5849(OAuth 1.0)在RFC 6749(OAuth 2.0)中没有提及任何关于开放redirect器的内容。 也就是说,OAuth 1.0的oauth_callback参数可能成为安全漏洞。

因此,我不认为OAuth 1.0比OAuth 2.0更安全。


[2016年4月14日]除了澄清我的观点

OAuth 1.0安全性依赖于签名计算。 使用秘密密钥来计算签名,其中秘密密钥是用于HMAC-SHA1( RFC 5849,3.4.2 )的共享密钥或用于RSA-SHA1( RFC 5849,3.4.3 )的私钥。 任何知道密钥的人都可以计算签名。 所以,如果秘密密钥被破坏,签名计算的复杂性是无意义的。

这意味着OAuth 1.0安全性不依赖于签名计算的复杂性和逻辑性,而仅仅依赖于秘密密钥的机密性。 换句话说,OAuth 1.0安全所需要的只是秘密密钥可以保密的条件。 这可能听起来极端,但是如果条件已经满足,签名计算不增加安全性。

同样,OAuth 2.0 机密客户端也依赖于相同的条件。 如果条件已经满足,在使用TLS创build安全连接并通过安全连接向授权服务器发送client_idclient_secret是否存在任何问题? 如果两者都依赖相同的条件,OAuth 1.0和OAuth 2.0机密客户端之间的安全级别是否有很大差异?

我无法findOAuth 1.0的任何理由来指责OAuth 2.0。 事实上,(1)OAuth 1.0只是针对机密客户端的规范,(2)OAuth 2.0也简化了机密客户端和支持公共客户端的协议。 无论是否知名,智能手机应用程序都被归类为公共客户端( RFC 6749,9 ),受益于OAuth 2.0。

如果您想查看OAuth的简明说明和详细stream程(使用图表),可以查看http://oauthbible.com

OAuth 2.0承诺通过以下方式来简化事情:

  1. 所有生成令牌所需的通信都需要SSL。 这是一个巨大的复杂性下降,因为这些复杂的签名不再需要。
  2. 一旦生成令牌,实际API调用不需要签名 – 此处强烈build议使用SSL。
  3. 生成令牌后,OAuth 1.0要求客户端在每个API调用中发送两个安全令牌,并使用两者来生成签名。 OAuth 2.0只有一个安全令牌,不需要签名。
  4. 明确指出协议的哪些部分是由“资源所有者”实现的,这个“资源所有者”是实现API的实际服务器,哪些部分可以由单独的“授权服务器”来实现。 这将使像Apigee这样的产品更容易为现有的API提供OAuth 2.0支持。

来源: http : //blog.apigee.com/detail/oauth_differences

从安全的angular度来看,我会selectOAuth 1.请参阅OAuth 2.0和地狱之路

引用这个链接:“如果你正在使用1.0成功,忽略2.0,它提供了超过1.0的真正价值(我猜你的客户端开发人员已经计算出1.0签名)。

如果您对这个空间感兴趣,并认为自己是安全专家,请仔细检查其function后再使用2.0。 如果您不是专家,请使用1.0或者复制您信任的提供者的2.0实现(Facebook的API文档是开始的好地方)。 2.0对于大规模的应用来说更好,但如果你正在进行大规模的操作,你可能会有一些安全专家在现场为你解决这个问题。“

如果你需要一些高级的解释,你需要阅读两个规范:

https://oauth.net/core/1.0a/

https://oauth.net/2/

如果您需要stream量差异的明确解释,这可以帮助您:

OAuth 1.0stream程

  1. 客户端应用程序向提供商注册,例如Twitter。
  2. Twitter为客户提供了该应用程序所特有的“消费者机密”。
  3. 客户端应用程序以其独特的“消费者密码”向Twitter发送所有的OAuth请求
  4. 如果任何OAuth请求格式不正确,数据丢失或签名不正确,请求将被拒绝。

OAuth 2.0stream程

  1. 客户端应用程序向提供商注册,例如Twitter。
  2. Twitter为客户提供了该应用程序所特有的“客户机密钥”。
  3. 客户端应用程序包含 每个请求的“客户端秘密”
  4. 如果任何OAuth请求格式不正确,缺less数据或包含错误的秘密,请求将被拒绝。

资料来源: https : //codiscope.com/oauth-2-0-vs-oauth-1-0/