概述

OAuth(Open Authorization,开放授权)是一个关于授权的开放网络标准。OAuth 允许用户授权第三方应用程序(Third-Party Application)访问他们存储在其它服务提供商(HTTP Service)上的资源(Resource),而不需要将用户名和密码提供给第三方应用程序或分享他们的全部资源。

oauth.png


应用场景

假设有一个“云冲印”网站,可以将用户存储在 Google 上的照片冲印出来。用户为了使用该服务,必须让“云冲印”读取自己存储在 Google 上的照片。

oauth-example-1.png

问题是:只有得到用户的授权,Google 才会同意“云冲印”读取这些照片。那么“云冲印”怎样获得用户的授权呢?

传统方法是:用户将自己的 Google 用户名和密码告诉“云冲印”。这样做有以下几个严重的缺点:


基本概念

在详细讲解 OAuth 2.0 之前,需要了解以下专用名词:

OAuth 的作用是:让“客户端”安全可控地获取“用户”的授权,与“服务商提供商”进行互动。


思路

OAuth 在“客户端”与“服务提供商”之间,设置一个授权层(Authorization Layer)。“客户端”不能直接登录“服务提供商”,只能登录授权层,以此将用户与“客户端”区分开。“客户端”登录授权层所用的令牌(Token),与用户密码不同。用户可以在登录时,指定授权层令牌的权限范围和有效期。

“客户端”登录授权层后,“服务提供商”根据令牌的权限范围和有效期向“客户端”开放用户存储的资料。


授权码模式

授权码模式(Authorization Code)是功能最完整、流程最严密的授权模式。它的特点是:通过“客户端”的后台服务器,与“服务提供商”的认证服务器进行互动。

authorization-code.png

其步骤如下:


更新令牌

如果客户端的访问令牌已经过期,那么需要使用更新令牌申请新访问令牌。客户端发出的更新令牌的 HTTP 请求,包含以下参数:

下面是一个例子:


OAuth 2.0 端点

OAuth 2.0 定义了一组端点(endpoint),端点通常是 Web 服务器上的 URI。端点的定义如下:

授权端点和 Token 端点都在授权服务器上,重定向端点在第三方应用服务器上:

oauth-endpoint.png

OAuth 2.0 的定义没有描述这些端点的 URI,它们由实现者决定。

1. 授权端点:

授权端点是授权服务器上的端点,资源所有者会登录它,给第三方应用程序授权

2. Token端点:

Token 端点是授权服务器上的端点,第三方应用程序会和它交换授权码、Client ID、Client 密码,以获取访问令牌

3. 重定向端点:

重定向端点是第三方应用服务器上的端点,在授权端点授权之后,资源拥有者会被重定向到该端点


参考资料