契约授权包含一个请求和一个响应。 契约授权请求 契约授权请求包含下面的参数:
response_type | 必须。必须被设置在令牌中。 |
client_id | 必须。当客户端被注册时,有授权服务器分配的客户端标识。 |
redirect_uri | 可选。由客户端注册的重定向URI。 |
scope | 可选。请求可能的作用域。 |
state | 可选(推荐)。任何需要被传递到客户端请求的URI客户端的状态。 |
契约授权包含一个请求和一个响应。 契约授权请求 契约授权请求包含下面的参数:
response_type | 必须。必须被设置在令牌中。 |
client_id | 必须。当客户端被注册时,有授权服务器分配的客户端标识。 |
redirect_uri | 可选。由客户端注册的重定向URI。 |
scope | 可选。请求可能的作用域。 |
state | 可选(推荐)。任何需要被传递到客户端请求的URI客户端的状态。 |
授权码授权总共由2个请求和2个响应组成。一个授权请求+响应,和一个令牌请求+响应。 授权请求 授权请求被发送到授权端点以获取一个授权码。这是请求中用到的参数:
response_type | 必须。必须被设置到代码里 |
client_id | 必须。当客户端被注册时,授权服务器要标识的客户端。 |
redirect_uri | 可选。通过客户端注册的重定向URI。 |
scope | 可选。请求可能的作用域。 |
state | 可选(推荐的)。任何需要被传递到客户端请求的URI客户端的状态。 |
当客户端应用请求授权和访问令牌时,它发送http请求到授权服务器,同它的授权和令牌端点。被发送来回的请求和响应取决于授权类型。记住,这四种授权类型:
OAuth 2.0定义了一系列端点。端点典型的就是web服务器上的URI。比如,一个Java Servlet, JSP page, PHP page, ASP.NET网页等等。
这些端点定义有:
授权端点和令牌端点都位于授权服务器上,重定向端点位于客户端应用上。每个端点都会在下面讲述。
当一个客户端应用想要访问拥有者托管在资源服务器的资源时,它必须先获得授权,本节将讲述客户端如何获取授权。
客户端标识,客户端密钥和重定向URI
在客户端应用能请求访问资源服务器的资源之前,客户端应用程序,必须先在资源服务器相关联的授权服务器中进行注册。
注册一个一次性的任务。一旦注册了,除非客户端注册被取消了,注册将持续有效。
注册后客户端应用将由授权服务器分配客户端标识和密钥。在授权服务器上,客户端标识和密钥是唯一标识客户端应用的。如果客户端应用注册了多个授权服务器(如Facebook, Twitter和Google等),每一个授权服务器将发出唯一的标识给该客户端应用。
无论什么时候客户端应用,想要访问同样资源服务器上的资源,它都需要通过发送客户端标识和密钥到授权服务器来验证自己。
在注册过程中,客户端应用也注册了一个重定向URI,当资源拥有者授权给客户端应用时,该重定向URI会被使用。当资源拥有者成功的通过授权服务器授权给客户端应用时,资源拥有者被重定向回客户端应用,再跳转到该重定向URI。
OAuth 2.0客户端角色被细分为一系列类型和配置,本节将阐述这些类型和配置。
OAuth 2.0规范定义了两种客户端类型:
保密的客户端能够对外部保持客户端密码保密。该客户端密码是由授权服务器分配给客户端应用的。为了避免欺骗,该密码是授权服务器用来识别客户端的。例如一个保密的客户端可以是web应用,除了管理员,没有任何人能够访问服务器和看到该密码。
公有的客户端不能使客户端密码保密。比如移动手机应用或桌面应用会将密码嵌入在内部。这样的应用可能被破解,并且泄漏密码。这同于在用户的浏览器上运行的JavaScript应用。用户可以使用一个JavaScript调试器来寻找到应用程序,并查看客户端密码。
资源拥有者是指拥有共享数据的人或应用。比如Facebook或者Google的用户就是是资源拥有者,他们拥有的资源就是他们的数据。资源拥有者在上图中被描述为人,这也是最常见的情况。但资源拥有者也可以是一个应用。OAuth 2.0规范中包含这两种可能性。
资源服务器是指托管资源的服务器。比如,Facebook或Google就是资源服务器(或者有一个资源服务器)。
如引言所说的,OAuth 2.0是一个能够使应用彼此访问数据的开放授权协议,这里我们将阐述该协议是怎么工作的以及规范中提到的概念。该图说明了整个授权过程:
OAuth 2.0是一个应用之间彼此访问数据的开源授权协议。比如,一个游戏应用可以访问Facebook的用户数据或者一个基于地理的应用可以访问Foursquare的用户数据等。
安装Sublime text 2插件很方便,可以直接下载安装包解压缩到Packages目录(菜单->preferences->packages)。
也可以安装package control组件,然后直接在线安装: