[TOC=2,3]
* * * * *
* * * * *
* * * * *
## OAuth 协议介绍
- OAuth是一个开发标准,允许用户授权第三方网站或应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的内容。
- OAuth 2.0不兼容1.0。
## OAuth的原理和授权流程
> OAuth的认证和授权的过程中涉及的三方包括:
> 服务商:用户使用服务的提供方,一般用来存消息、储照片、视频、联系人、文件等(比如Twitter、Sina微波等)。
> 用 户:服务商的用户
> 第三方:通常是网站,该网站想要访问用户存储在服务商那里的信息。
![](https://box.kancloud.cn/ac4cac1cb6df54c4a794b11efcd39629_849x782.png)
比如某个提供照片打印服务的网站,用户想在那里打印自己存在服务商那里的网络相册。
在认证过程之前,第三方需要先向服务商申请第三方服务的唯一标识。
OAuth认证和授权的过程如下:
- 用户访问第三方网站网站,想对用户存放在服务商的某些资源进行操作。
- 第三方网站向服务商请求一个临时令牌。
- 服务商验证第三方网站的身份后,授予一个临时令牌。
- 第三方网站获得临时令牌后,将用户导向至服务商的授权页面请求用户授权,然后这个过程中将临时令牌和第三方网站的返回地址发送给服务商。
- 用户在服务商的授权页面上输入自己的用户名和密码,授权第三方网站访问所相应的资源。
- 授权成功后,服务商将用户导向第三方网站的返回地址。
- 第三方网站根据临时令牌从服务商那里获取访问令牌。
- 服务商根据令牌和用户的授权情况授予第三方网站访问令牌。
- 第三方网站使用获取到的访问令牌访问存放在服务商的对应的用户资源。
## 目前支持OAuth的网站
- t.sina.com.cn
- t.qq.com
- t.sohu.com
- t.163.com
- www.douban.com
- www.twitter.com
- www.facebook.com
- Google Buzz
## 协议的参与者
- RO (resource owner): 资源所有者,对资源具有授权能力的人。
- RS (resource server): 资源服务器,它存储资源,并处理对资源的访问请求。
- Client: 第三方应用,它获得RO的授权后便可以去访问RO的资源。
- AS (authorization server): 授权服务器,它认证RO的身份,为RO提供授权审批流程,并最终颁发授权令牌(Access Token)。
## 授权方式
在开放授权中,第三方应用(Client)可能是一个Web站点,也可能是在浏览器中运行的一段JavaScript代码,还可能是安装在本地的一个应用程序。这些第三方应用都有各自的安全特性。对于Web站点来说,它与RO浏览器是分离的,它可以自己保存协议中的敏感数据,这些密钥可以不暴露给RO;对于JavaScript代码和本地安全的应用程序来说,它本来就运行在RO的浏览器中,RO是可以访问到Client在协议中的敏感数据。 OAuth2.0为了支持这些不同类型的第三方应用,提出了下面四种授权类型:
- 授权码 (Authorization Code Grant),适用于有server端的应用授权。
- 隐式授权 (Implicit Grant),适用于通过客户端访问的应用授权。
- 资源所有者密码凭证许可 (Resource Owner Password Credentials Grant),OAuth简化版,常用于移动应用认证,称为xAuth。
- 受保护资源的客户端授权 (Client Credentials Grant)。
| 流程 | Response Type(第一次请求) | Grant Type(第二次请求) | 可带Refresh Token | 说明 |
| --- | --- | --- | --- | --- |
| 授权码 |code | authorization_code | 是 | 常规流程 |
| 隐式授权 |token | 无 | 否 | 适用于纯JS程序 |
| 用户认证 | 无 | password | 是 | 客户端高度可信,且授权码流程不方便实施 |
| 客户端 | 无 | client_credentials | 否 | 客户端高度可信,拥有被操作资源(自用型),或操作非敏感资源 |
## OAuth协议详细[流程图](https://www.processon.com/view/link/59019686e4b037b911fde388?pw=ityangs)