Oauth 2.0
2012年10月,OAuth 2.0協議正式發布為
RFC 6749
。現在百度開放平台,騰訊開放平台等大部分的開放平台都是使用的OAuth 2.0協議作為支撐。
概述
OAuth是一個開放標准,允許用戶授權第三方應用訪問他們存儲在另外的服務提供者上的信息,而不需要將用戶名和密碼提供給第三方移動應用或分享他們數據的所有內容。
在OAuth 2.0的認證和授權的過程中主要包括以下角色定義:
- Resource owner: 資源所有者(通常指用戶或者提供資源服務的平台)
- Resource server:資源服務器(托管受保護資源的服務器)
- Client:客戶端(瀏覽器、APP)
- Authorization server:授權服務器(頒發訪問令牌、驗證令牌、刷新令牌)
交互過程
OAuth 在 "客戶端" 與 "服務提供商" 之間,設置了一個授權層(authorization layer)。"客戶端" 不能直接登錄 "服務提供商",只能登錄授權層,以此將用戶與客戶端區分開來。"客戶端" 登錄授權層所用的令牌(token),與用戶的密碼不同。用戶可以在登錄的時候,指定授權層令牌的權限范圍和有效期。"客戶端" 登錄授權層以后,"服務提供商" 根據令牌的權限范圍和有效期,向 "客戶端" 開放用戶儲存的資料。
以下為QQ的授權頁面,采用的是授權碼模式
客戶端授權模式
- implicit:簡化模式,(不安全,適用於純靜態頁面應用)
- authorization code:授權碼模式(功能最完整、流程最嚴密的授權模式,通常使用在公網的開放平台中)
- resource owner password credentials:密碼模式(一般在內部系統中使用,調用者是以用戶為單位。)
- client credentials:客戶端模式(一般在內部系統之間的API調用。兩個平台之間調用。調用者是以平台為單位。)
簡化模式
簡化模式適用於純靜態頁面應用。該模式下,
access_token
容易泄露且不可刷新
- 用戶請求網站,如:www.tangyuewei.com
- 重定向到一個授權頁面
- 用戶同意授權
- 重定向到網站,並帶上
access_token
如:www.tangyuewei.com?access_token=123 - 獲取到資源服務器的資源
授權碼模式
適用於有自己的服務器的應用,它是一個一次性的臨時憑證,用來換取
access_token
和refresh_token
。一旦換取成功,code
立即作廢,不能再使用第二次。
- 用戶請求網站,如:www.tangyuewei.com
- 重定向到一個授權頁面
- 用戶同意授權
- 重定向到應用的一個回調地址,如:www.tangyuewei.com/recieve_token?code=123
- 用
code
換取access_token
和refresh_token
密碼模式
用戶向客戶端提供自己的用戶名和密碼,向 "服務商提供商" 換取
access_token
。
客戶端模式
如第三方,或者調用者是一個后端的模塊,沒有用戶界面的時候,可以使用客戶端模式。鑒權服務器直接對客戶端進行身份驗證,驗證通過后,返回 token。
接入公司內部系統
- 后台管理系統
- 前台業務系統
后台管理系統
后台系統之間資源互相訪問,如:日志模塊,發郵件模塊,發短信模塊等(平台資源)。
需要引用相關模塊的系統可采用
客戶端模式
授權
前台業務系統
前台系統之間資源互相訪問,如:用戶信息,模塊等(用戶資源)。
需要引用相關模塊的系統可采用
密碼模式
授權
綜合建議
綜合上述模式及認證流程,個人覺得以下場景可以考慮引入Oauth 2.0認證: