背景


传统互联网时代,各个网站和服务之间是封闭的,数据无法进行交互。随着互联网技术的迅猛发展、系统之间的相互协作日益增多,开放与共享数据的需求不断增加,互联网服务之间的整合已经成为必然趋势,一个通过自身开放平台来实现数据互通甚至用户共享的时代已经来临。把网站的服务封装成一系列计算机易识别的数据接口开放出去,供第三方开发者使用,这种行为就叫做Open API,提供开放API 的平台本身就被称为开放平台。

国内外已经有很多的公司开发了自己的开放平台,Facebook、Twitter、腾讯、新浪微博、人人网,它们用户规模大、技术实力强,为第三方提供了一整套自成体系、纷繁复杂的“开放API”。通过开放平台,网站不仅能提供对Web 网页的简单访问,还可以进行复杂的数据交互,允许第三方开发者利用其资源开发复杂的应用,既丰富自身网站应用,为用户提供更好的服务,逐步建立起一个服务完备的网络社会,也为第三方连接的网站带来更多的用户。开放平台迅速成为互联网发展的趋势。

信息安全


在传统的客户端-服务器身份验证模式中,客户端请求服务器上限制访问的资源(受保护资源)时,需要使用资源所有者的凭据在服务器上进行身份验证。 资源所有者为了给第三方应用提供受限资源的访问,需要与第三方共享它的凭据(例如用户名和密码)。 这造成一些问题和局限:

  1. 需要第三方应用存储资源所有者的凭据,以供将来使用,通常是明文密码。
  2. 需要服务器支持密码身份认证,尽管密码认证天生就有安全缺陷。
  3. 第三方应用获得的资源所有者的受保护资源的访问权限过于宽泛,从而导致资源所有者失去对资源使用时限或使用范围的控制。
  4. 资源所有者不能仅撤销某个第三方的访问权限而不影响其它,并且,资源所有者只有通过改变第三方的密码,才能单独撤销这第三方的访问权限。
  5. 与任何第三方应用的让步导致对终端用户的密码及该密码所保护的所有数据的让步。

为了理解,让我举一个假设的例子。

有一个”云冲印”的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让”云冲印”读取自己储存在Google上的照片。问题是只有得到用户的授权,Google才会同意”云冲印”读取这些照片。那么,”云冲印”怎样获得用户的授权呢?传统方法是,用户将自己的Google用户名和密码,告诉”云冲印”,后者就可以读取用户的照片了。这样的做法有以下几个严重的缺点。

  • “云冲印”为了后续的服务,会保存用户的密码,这样很不安全。
  • Google不得不部署密码登录,而我们知道,单纯的密码登录并不安全。
  • “云冲印”拥有了获取用户储存在Google所有资料的权力,用户没法限制”云冲印”获得授权的范围和有效期。
  • 用户只有修改密码,才能收回赋予”云冲印”的权力。但是这样做,会使得其他所有获得用户授权的第三方应用程序全部失效。
  • 只要有一个第三方应用程序被破解,就会导致用户密码泄漏,以及所有被密码保护的数据泄漏。

资源安全


第三方应用需要访问受控资源

  1. 安全问题。第三方应用需要为以后的访问保存用户授权信息,通常是密码明文服务器需要支持密码验证,尽管密码方式天生安全性不够。授信后第三方应用可以访问所有资源,无法进一步控制范围。资源拥有者无法对某个应用取消授权,如果不想再授信,只能改密码。
  2. 开发问题。开发者需要为每个服务器开发登录接口
  3. 管理问题。在有多个第三方应用时,管理人员需对每个应用一一登录进行管理

OAuth就是为了解决上面这些问题而诞生的

OAuth是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

解决方案 – 授权代理


优点

  • 安全和灵活
  • 登录和授权在授权服务器进行
  • 第三方应用只持有访问令牌(AccessToken)
  • 无用户名和密码信息
  • 资源拥有者参与授权过程
  • 资源拥有者有机会撤销授权
  • 对第三方应用本身安全授信
  • OAUTH服务提供者还是应用开发者,都很容易于理解与使用
  • 任何服务提供商都可以实现OAUTH,任何软件开发商都可以使用OAUTH

实现方法

OAuth通过引入授权层以及分离客户端角色和资源所有者角色来解决这些问题。 在OAuth中,客户端在请求受资源所有者控制并托管在资源服务器上的资源的访问权限时,将被颁发一组不同于资源所有者所拥有的如密码凭据的凭据。

客户端获得一个访问令牌,用以代替使用资源所有者的凭据来访问受保护资源。 访问令牌由授权服务器在资源所有者认可的情况下颁发给第三方客户端。客户端使用访问令牌访问托管在资源服务器的受保护资源。每一个访问令牌授权一个特定的客户端在特定的时间段内,访问资源所有者许可的受保护资源。这样,OAuth允许资源所有者授权第三方网站访问他们存储在资源服务器上的信息。

下载安装


安装 管理 开发接入 GitHub