OAuth 2和OAuth 1有何不同?

OAuth 2和OAuth 1有何不同?,oauth,oauth-2.0,authorization,Oauth,Oauth 2.0,Authorization,用非常简单的术语,有人能解释OAuth 2和OAuth 1之间的区别吗 OAuth 1现在过时了吗?我们应该实现OAuth2吗?我没有看到很多OAuth 2的实现;大多数人仍在使用OAuth 1,这让我怀疑OAuth 2是否可以使用。是吗?埃兰·哈默·拉哈夫(Eran Hammer Lahav)在他的文章中出色地解释了大部分差异。总而言之,以下是主要区别: 更多OAuth流,以便更好地支持非基于浏览器的应用程序。这是非基于浏览器的客户端应用程序对OAuth的主要批评。例如,在OAuth 1.0中

用非常简单的术语,有人能解释OAuth 2和OAuth 1之间的区别吗


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

埃兰·哈默·拉哈夫(Eran Hammer Lahav)在他的文章中出色地解释了大部分差异。总而言之,以下是主要区别:

更多OAuth流,以便更好地支持非基于浏览器的应用程序。这是非基于浏览器的客户端应用程序对OAuth的主要批评。例如,在OAuth 1.0中,桌面应用程序或移动电话应用程序必须指示用户打开其浏览器以访问所需的服务,使用该服务进行身份验证,并将令牌从服务复制回应用程序。这里的主要批评是针对用户体验的。在OAuth2.0中,应用程序现在有了新的方法来获得用户的授权

OAuth 2.0不再要求客户端应用程序具有加密功能。这又回到了旧的Twitter Auth API,它不要求应用程序使用HMAC哈希令牌和请求字符串。在OAuth 2.0中,应用程序可以仅使用HTTPS上发布的令牌发出请求

OAuth 2.0签名的复杂度要低得多。不再需要特殊的解析、排序或编码

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


最后,OAuth 2.0意味着在负责处理OAuth请求的服务器和处理用户授权的服务器之间有一个清晰的角色分离。有关这方面的详细信息,请参阅前面的文章。

OAuth 2.0签名在生成令牌后不需要用于实际API调用。它只有一个安全令牌

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


描述OAuth 1.0和2.0之间的区别以及两者的工作原理。

前面的解释在IMO中都过于详细和复杂。简单地说,OAuth 2将安全性委托给HTTPS协议。OAuth1不需要这样做,因此有其他方法来处理各种攻击。这些方法要求应用程序参与某些复杂且难以实现的安全协议。因此,仅仅依靠HTTPS实现安全性更简单,这样应用程序开发人员就不必担心它了


至于你的其他问题,答案要看情况而定。有些服务不需要使用HTTPS,它们是在OAuth 2之前开发的,或者有其他一些可能阻止它们使用OAuth 2的要求。此外,关于OAuth 2协议本身也有很多争论。如您所见,Facebook、Google和其他一些公司都实现了略有不同的协议版本。所以有些人坚持使用OAuth 1,因为它在不同的平台上更加统一。最近,OAuth 2协议已经定稿,但我们还没有看到它的采用情况。

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

注意,这些都来自OAuth2的主要作者

要点:

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

  • 从某种意义上说,SSL是不安全的,因为服务器不验证连接,并且公共客户端库很容易忽略故障

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

  • 在OAuth 1.0中,很难做到这一点:

    第二个常见的潜在问题是打字错误。当省略一个字符(“http”中的‘s’)时,你会认为它是一个正确的设计是否会使令牌的整个安全性失效?或者可能将请求(通过有效且经过验证的SSL/TLS连接)发送到错误的目标(例如“”?)。请记住,能够从命令行使用OAuth承载令牌显然是承载令牌的一个用例


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

  • 生成令牌所需的所有通信都需要SSL。这大大降低了复杂性,因为不再需要这些复杂的签名
  • 一旦生成令牌,实际API调用就不需要签名——这里也强烈建议使用SSL
  • 生成令牌后,OAuth 1.0要求客户端在每个API调用上发送两个安全令牌,并使用这两个令牌生成签名。OAuth 2.0只有一个安全令牌,不需要签名
  • 明确规定协议的哪些部分由“资源所有者”实现,后者是实现API的实际服务器,哪些部分可以由单独的“授权服务器”实现。这将使诸如