原文链接 作者:Jakob Jenkov 译者:iDestiny
OAuth2.0是一种应用之间彼此访问数据的开源授权协议。比如,一个游戏应用可以访问Facebook的用户数据,或者一个基于地理的应用可以访问Foursquare的用户数据等。下面是一张阐述该概念的图:
OAuth2.0怎么通过应用共享数据的例子,用户访问web游戏应用,该游戏应用要求用户通过Facebook登录。用户登录到了Facebook,再重定向会游戏应用, 游戏应用就可以访问用户在Facebook的数据了,并且该应用可以代表用户向Facebook调用函数(如发送状态更新)。
OAuth2.0实用案例
OAuth2.0要么用来创建一个能够从其他应用读取用户信息的应用(如上面图表中的游戏应用),要么创建一个使其他应用访问自己的用户数据的应用(如上面例子中的Facebook)。OAuth2.0是OAuth1.0的替代品,OAuth1.0更加复杂。OAuth1.0涉及到了证书等,而OAuth2.0更简单,它不需要任何证书,仅仅就SSL/TLS。
OAuth2.0规范
该指南的目标是提供一个OAuth2.0的很容易理解的概述,但是不会描述规范的每一个细节。如果你想实现OAuth2.0, 你将很有可能要全面学习该规范,你可以在这里找到该规范:http://tools.ietf.org/html/draft-ietf-oauth-v2-23
如引言所说的,OAuth2.0是一个能够使应用彼此访问数据的开放授权协议。这里我们将阐述该协议是怎么工作的,和规范中提到的概念。该图说明了整个授权过程:
OAuth2.0怎样被用来在应用间共享数据的例子
第一步,用户访问客户端web应用。应用中的按钮”通过Facebook登录”(或者其他的系统,如Google或Twitter)。
第二步,当用户点击了按钮后,就被重定向到授权的应用(如Facebook), 然后用户登录,并被询问是否要授权应用中的数据给客户端应用,用户接受后。
第三步,授权应用将用户重定向到客户端应用提供的URI,提供这种重定向的URI通常是通过注册客户端应用程序与授权应用程序完成。在注册中,客户端应用的拥有者组注册该重定向URI,在注册过程中认证应用也会给客户端应用客户端标识和密码。在URI后追加一个认证码。该认证码代表了授权。
第四步,用户在客户端应用访问网页被定位到重定向的URI。在背后客户端应用连接授权应用,并且发送在重定向请求参数中接收到的客户端标识,客户端密码和认证码。授权应用将返回一个访问口令。
一旦客户端有了访问口令,该口令便可以被发送到Facebook, Google, Twitter等来访问登录用户的资源。
OAuth2.0定义了下面用户和应用的角色:
这些角色在下图中表示为:
OAuth2.0规范中的角色定义
资源拥有者是指拥有共享数据的人或应用。比如,在Facebook或Google的用户可以是资源拥有者。他们拥有的资源就是数据。资源拥有者在表中被描述为人,这可能是最常见的情况。但资源拥有者也可以是一个应用。OAuth2.0提到了这两种可能性。
资源服务器是指托管资源的服务器。比如,Facebook或Google就是资源服务器(或者有一个资源服务器)。
客户端应用是指请求访问存储在资源服务器的资源的应用。资源被资源拥有者所拥有。客户端应用可是一个请求访问用户的Facebook账号的游戏。
授权服务器是指授权客户端应用能够访问资源拥有者所拥有的资源。授权服务器和资源服务器可以是同一个服务器,但不是必须的。如果这两个服务器是分开的,OAuth2.0没有讨论这个两个服务器应该如何通信。这是由资源服务器和授权服务器开发者自己设计决定的。
OAuth2.0客户端角色被细分为一系列类型和配置。本节将阐述这些类型和配置。
OAuth2.0规范定义了两种客户端类型:
保密的客户端能够对外部保持客户端密码保密。该客户端密码是由授权服务器分配给客户端应用的。为了避免欺骗,该密码是授权服务器用来识别客户端的。例如一个保密的客户端可以是web应用,除了管理员,没有任何人能够访问服务器和看到该密码。
公有的客户端不能使客户端密码保密。比如移动手机应用或桌面应用会将密码嵌入在内部。这样的应用可能被破解,并且泄漏密码。这同于在用户的浏览器上运行的JavaScript应用。用户可以使用一个JavaScript调试器来寻找到应用程序,并查看客户端密码。
客户端配置
OAuth2.0规范也提到了一系列客户端配置文件。这些配置文件是具体类型的应用程序,这可以是保密或公开的。这些配置文件有:
Web应用
web应用是指运行在web服务器内的应用。实际上,web应用典型地由浏览器部分和服务端部分组成。如果web应用需要访问资源服务器(如Facebook账号),然后客户端密码被保存在服务器上。因此密码是保密的。
这里阐释了一个保密的客户端应用:
保密的客户端:web应用
用户代理应用
用户代理应用比如运行在浏览器上的的JavaScript应用。浏览器是用户代理。用户代理应用可以保存在web服务器上,但应用程序只运行一次下载的用户代理。一个例子就像一个javascript游戏只能运行在浏览器里。
这里阐释了一个客户端用户代理应用:
公有客户端:用户代理应用
原生应用
原生应用比如桌面应用或移动手机应用。原生应用典型地被安装在用户计算机或设备(手机,平板等)上。因此客户端密码也被存储在用户计算机或设备上。
这里阐释了客户端原生应用:
公有客户端:本地应用
混合应用
有些应用是这些配置的混合使用。比如本地应用也可以有服务器部分,来做一些工作(如数据存储)。OAuth2.0规范没有提及这种混合型。然而,在大多数情况下,混合型将能够使用这些配置文件的认证模型。
(全文完)如果您喜欢此文请点赞,分享,评论。