协慌网

登录 贡献 社区

OpenID 和 OAuth 有什么区别?

我真的想了解 OpenID 和 OAuth 之间的区别吗?也许他们是两个完全不同的东西?

答案

OpenID是关于身份验证(即证明你是谁), OAuth是关于授权(即授予对功能 / 数据 / 等的访问权限而不必处理原始身份验证)。

OAuth 可以在外部合作伙伴站点中使用,以允许访问受保护的数据,而无需重新验证用户。

从用户的角度来看 ,博客文章 “ OpenID 与 OAuth” 从用户的角度对两者进行了简单的比较,“ OAuth-OpenID:如果你认为他们是同一件事,你就会吵到错误的树 ” 了解更多信息关于它。

有三种方法可以比较 OAuth 和 OpenID:

1. 目的

OpenID 是为联合身份验证创建的,即让第三方通过使用已有的帐户为您验证用户身份 。联邦这一术语在这里至关重要,因为 OpenID 的重点在于可以使用任何提供者(白名单除外)。您无需预先选择或与提供商协商,以允许用户使用他们拥有的任何其他帐户。

创建 OAuth 是为了消除用户与第三方应用程序共享密码的需要 。它实际上是一种解决 OpenID 问题的方法:如果您在站点上支持 OpenID,则无法使用 HTTP Basic 凭据(用户名和密码)来提供 API,因为用户在您的站点上没有密码。

问题在于 OpenID 的分离用于身份验证和 OAuth 的授权是两个协议都可以完成许多相同的事情。它们各自提供了不同实现所需的不同功能集,但基本上它们是可以互换的。两个协议的核心是断言验证方法(OpenID 仅限于 '这就是我是谁' 断言,而 OAuth 提供了一个 '访问令牌',可以通过 API 交换任何支持的断言)。

2. 特点

这两种协议都为站点提供了一种方法,可以将用户重定向到其他位置,然后返回可验证的断言。 OpenID 提供身份断言,而 OAuth 以访问令牌的形式更通用,然后可用于 “询问 OAuth 提供程序问题” 。但是,它们各自支持不同的功能:

OpenID - OpenID最重要的特性是它的发现过程。 OpenID 不需要对要提前使用的每个提供程序进行硬编码。使用发现,用户可以选择要进行身份验证的任何第三方提供商。此发现功能也导致了大多数 OpenID 的问题,因为它的实现方式是使用 HTTP URI 作为大多数 Web 用户无法获得的标识符。 OpenID 的其他功能是支持使用 DH 交换进行临时客户端注册,支持优化最终用户体验的即时模式,以及在不向提供商进行另一次往返的情况下验证断言的方法。

OAuth - OAuth最重要的功能是访问令牌,它提供了一种持久的方法来发出额外的请求。与 OpenID 不同,OAuth 不以身份验证结束,而是提供访问令牌以访问由同一第三方服务提供的其他资源。但是,由于 OAuth 不支持发现,因此需要预先选择并硬编码您决定使用的提供程序。访问您网站的用户不能使用任何标识符,只能使用您预先选择的标识符。此外,OAuth 没有身份概念,因此使用它进行登录意味着要么添加自定义参数(由 Twitter 完成),要么进行另一个 API 调用以获取当前 “登录” 用户。

3. 技术实施

这两个协议在使用重定向获取用户授权时共享一个共同的体系结构。在 OAuth 中,用户授权访问其受保护资源和 OpenID 中的身份。但这就是他们分享的一切。

每种协议都有不同的计算签名的方式,用于验证请求或响应的真实性,每种协议都有不同的注册要求。

OpenID(主要)用于标识 / 身份验证,因此stackoverflow.com知道我拥有chris.boyle.name (或任何地方),因此我可能是昨天拥有chris.boyle.name并获得一些声望点的同一个人。

OAuth 旨在授权代表您执行操作,以便stackoverflow.com (或任何地方)可以在不知道您的 Twitter 密码的情况下自动代表您发送 Tweet 权限。