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专为授权代表您执行操作而设计,以便在不知道您的Twitter密码的情况下, stackoverflow.com
(或任何地方)可以自动代表您发送Tweet的许可。