OAuth是一個用于授權(quán)(authorization)的開放網(wǎng)絡標準,在全世界得到廣泛應用,最新版本是2.0。 Facebook, Google, 鵝廠等都有基于OAuth的開放授權(quán)平臺。它是為了解決什么問題而產(chǎn)生的呢?下面來舉個栗子:
我們有一個文件服務系統(tǒng),用戶登錄之后可以上傳自己的文件?,F(xiàn)在有一個打印應用提供一個在線打印文件的服務。但是每個用戶只能打印自己的文件,只有符合隱私級別的文件才能被打印。那么打印服務和文件服務之間是怎么溝通,獲取到用戶可以打印的文件呢?過去,文件服務系統(tǒng)會將用戶數(shù)據(jù)共享給打印服務,這會帶來一系列問題,同時帶了管理用戶身份信息的復雜度。OAuth標準可以在不共享身份信息的情況下,給在線打印服務進行授權(quán),獲取可以打印的文件。
OAuth2.0專用名詞
resource owner - 資源擁有者,上面例子中上傳照片的人
resource server - 根據(jù)access token返回申請資源
client - 申請使用資源的第三方系統(tǒng)
authorization server - 頒發(fā)access token的服務, 可以與resource server部署在一起
OAuth在"客戶端"與"服務提供商"之間,設置了一個授權(quán)層(authorization layer)。"客戶端"不能直接登錄"服務提供商",只能登錄授權(quán)層,以此將用戶與客戶端區(qū)分開來。"客戶端"登錄授權(quán)層所用的令牌(token),與用戶的密碼不同。用戶可以在登錄的時候,指定授權(quán)層令牌的權(quán)限范圍和有效期。"客戶端"登錄授權(quán)層以后,"服務提供商"根據(jù)令牌的權(quán)限范圍和有效期,向"客戶端"開放用戶儲存的資料。
OAuth 2.0的運行流程

(A)用戶打開客戶端以后,客戶端要求用戶給予授權(quán)。
(B)用戶同意給予客戶端授權(quán)。
(C)客戶端使用上一步獲得的授權(quán),向認證服務器申請令牌。
(D)認證服務器對客戶端進行認證以后,確認無誤,同意發(fā)放令牌。
(E)客戶端使用令牌,向資源服務器申請獲取資源。
(F)資源服務器確認令牌無誤,同意向客戶端開放資源。
四種授權(quán)模式
客戶端必須得到用戶的授權(quán)(authorization grant),才能獲得令牌(access token)。OAuth 2.0定義了四種授權(quán)方式:
授權(quán)碼模式(authorization code)
簡化模式(implicit)
密碼模式(resource owner password credentials)
客戶端模式(client credentials)
不同的認證方式,決定了客戶端與服務提供商之間的交互方式,具體的流程細節(jié)請參考RFC 6749,不同的廠商針對業(yè)務需求實現(xiàn)的也不盡相同,自己搭建OAuth認證授權(quán)中心可以參考Spring Security的OAuth2.0實現(xiàn)。