[TOC=2,3]
* * * * *
* * * * *
* * * * *
## OAuth 協議介紹
- OAuth是一個開發標準,允許用戶授權第三方網站或應用訪問他們存儲在另外的服務提供者上的信息,而不需要將用戶名和密碼提供給第三方網站或分享他們數據的內容。
- OAuth 2.0不兼容1.0。
## OAuth的原理和授權流程
> OAuth的認證和授權的過程中涉及的三方包括:
> 服務商:用戶使用服務的提供方,一般用來存消息、儲照片、視頻、聯系人、文件等(比如Twitter、Sina微波等)。
> 用 戶:服務商的用戶
> 第三方:通常是網站,該網站想要訪問用戶存儲在服務商那里的信息。

比如某個提供照片打印服務的網站,用戶想在那里打印自己存在服務商那里的網絡相冊。
在認證過程之前,第三方需要先向服務商申請第三方服務的唯一標識。
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)