文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏
参与翻译: 苏州小浮云 (9), lison (3)

介绍

我们生活在这样一个世界,科技和网络这两样东西让我们生活简单,与世界相连。

但是你有没有想过,在技术的帮助下,你在互联网上分享敏感信息,任何人都可以获取这信息并为自己所利用。

举个例子:考虑这样一种情况,你想看电子邮件,所以你打开邮件应用,比如说Mozilla thunderbird,然后从不同的邮件服务提供商(比如Gmail,Yahoo,Live)获取邮件。

第 1 段(可获 1.28 积分)

但是你知道在这后面邮件应用做了什么吗?--每次获取邮件,邮件应用需要用你的邮件ID和密码连接邮件服务,随后收取或发送邮件。

那么,在这种场景下,第一件事情是--邮件客户端拥有你的邮件ID和密码,他们可以为自身所用(他们不会这么做,但这是你的敏感信息,你不想告诉别人),第二件事情是任何优秀的黑客可以获取你的敏感信息,因为每次你用邮件客户端的时候,信息会传送到邮件服务提供商。

第 2 段(可获 1.65 积分)

这是每个邮件服务提供商想摆脱的安全问题。所以他们实现了一个安全协议,命名为 OAuth。

背景

这是基本的信息,所以任何人都可以理解。

Oauth是什么

Oauth 代表开发授权。

Oauth 不允许让任何应用存储用户ID和密码以排除安全问题,用户将控制访问任何应用的接入类型。

举个例子:任何应用(比如邮件服务器)将存储你Gmail ID和密码,就能使用谷歌硬盘,谷歌日历,但你只提供了使用Gmail的ID和密码。

第 3 段(可获 1.4 积分)

Oauth 使得邮件客户端只用ID和密码使用Gmail而不是其他服务变得如此容易。

Oauth有两个版本:

  1. Oauth 1.0 (这已经过时了,我不想再讨论这个了)
  2. Oauth 2.0 (最新且最稳定的版本)

为什么要实现 Oauth

那么,仍有个问题,为什么应用程序会遵循Oauth?或者说他们为什么会实现Oauth

这是因为大多数服务提供商(比如Google, Yahoo, Microsoft等等)不会接受任何服务的请求。他们会用不同的错误信息(比如无效请求,非安全请求等等)拒绝你的请求。

第 4 段(可获 1.34 积分)

举个例子,如果你想发送一封邮件,你就会发送一个SMTP请求给Google,将得到一个异常信息并且请求被拒绝了。

注意: 当你登陆不太安全的应用程序的时候,在你账户开启允许登陆的设置时,你能够使用这项服务。

Oauth 2.0是如何工作的

Oauth 2.0 是一个简单的安全协议。它注重于客户端程序员的简单性,同时为web应用、桌面应用、移动电话、客厅设备提供特别的授权流程。

那么,什么是授权流程?

授权流程是一种授权给相应应用不同的范围(比如Gmail,硬盘等服务)。每个应用必须执行认证流程才能使用。

第 5 段(可获 1.58 积分)

授权流程的步骤 

授权流程包含以下几个步骤:

  1. 授权应用- 对服务提供商的官方网站的用户予以授权.
  2. 得到临时令牌 - 在成功认证后,将返回临时令牌
  3. 得到更新令牌 - 用临时令牌获取更新令牌,并将更新令牌存储到文件或者数据库

好,这个应用被授权了,你可以发现应用程序没有要用户的ID和密码。

现在我要开始解释每个步骤。

第 6 段(可获 1.11 积分)

1. 认证应用

在此步骤中 - 应用程序将创建一个HTTP请求,并将请求发送到服务提供商(比如谷歌、雅虎等等)的官方网站。HTTP请求包含查询字符串,由以下数据构成。

  1. 客户id - 在不同的服务提供商创建项目后,你将获得客户id和客户端secret.
  2. Redirect Url - 重定向Url是个链接,在成功认证后将被调用。
  3. Scope - 范围指为特定用户提供服务的列表。
  4. Access type - 接入类型用来给服务提供商了解应用程序想接入什么类型的应用。
  5. State - 状态值是可选的,但是非常重要。状态值会在你提供的同时返回,可以用来获取用户信息(如用户 id等等)。
  6. Login Hint - 登录提示是可选的。你可以将用户的ID赋予此属性,服务提供商会自动填写用户ID。
第 7 段(可获 2.19 积分)

好了,基于应用程序的类型 - HTTP请求将会发送。

  1. Web应用 - 我们可以将用户重定向到另一个标签,或者我们可以打开一个新窗口。
  2. 独立应用程序 -我们会打开一个Web浏览器控件,此控件会打开用户登录的网址。

用户在成功授权后或输入用户名和密码,服务将会询问用户,此应用想基于授权范围使用服务。用户可以接受或者拒绝。

2. 获得临时令牌

用户允许应用程序使用服务之后,服务提供商将用户重定向到重定向网址(由应用程序提供)。服务提供商将返回临时令牌和状态(由应用程序设置)。

第 8 段(可获 1.74 积分)

3.获得更新令牌

更新令牌 是最重要的部分,被应用程序用来获取任何服务。

获得临时令牌后,下一步是用临时令牌获取更新令牌。要得到更新令牌,应用程序将创建HTTP请求,并通过服务提供商,将其发送给所提供的网址。

HTTP request包含以下数据:

  1. Code - 临时令牌
  2. Client Id - 项目的客户端ID
  3. Client Secret - 项目的客户端密码
  4. Redirect Url - 和在授权时提供的重定向URL一样
  5. Grant type - 用来给服务提供商链接应用程序想授权什么类型。本文的授权类型是 'authorization_code'。
第 9 段(可获 1.69 积分)

现在,app会往指定的url发送一个post请求来获取Refresh Token. 然后app会接收到包含Refresh Token 的响应实体. 然后app会通过服务保存 Refresh Token .

如果app不保存 Refresh Token, 那么app必须每次都做一次验证,这么做是不推荐的.

现在app已经通过了验证,下面的问题是app将如何使用服务?

如何使用服务

要访问服务,app必须构造一个包含重要属性 Access Token 的请求体去访问指定url .

第 10 段(可获 1.45 积分)

Access Token 会跟随在每次服务请求中.Access Token 平均一小时更新一次. 所以建议你每次请求都重新获取下 Access Token .

怎样取回 Access Token

要取回 Access Token 需要使用 Refresh Token. 这就是为什么我们要把refresh token保存下来.

要获取 access token, 要发送一个HTTP请求到指定的url. HTTP 请求应当包含以下属性:

  1. Refresh token - 为特定用户保存的 Refresh Token 
  2. Client Id - 项目编号
  3. Client Secret - 项目密钥
  4. Grant type - 授权类型可以让服务提供商知道你的app想使用什么样的授权类型. Here, 授权类型 'refresh_token'
第 11 段(可获 1.69 积分)

现在,app可以通过发送请求来获取 Access Token. 然后app会获取该请求的包含 Access Token 的响应.

兴趣点

Oauth 2.0 是一个很简单的安全协议,尽管简单,却能做不简单的事.

以下是 2.0 的高级特性:

  • 不允许app保存用户的id和密码.
  • 任何机器程序或项目在被认证之前不能与用户信息产生交互.
  • app只能使用那些用户允许的服务
  • 它可以让用户控制他们想提供或允许任何应用程序的任何类型的访问
第 12 段(可获 1.53 积分)

文章评论