
1、OAuth2需求場景
在說明OAuth2需求及使用場景以前,須要先介紹一下OAuth2受權流程中的各類角色:git
- 資源擁有者(User) - 指應用的用戶
- 認證服務器 (Authorization Server) - 提供登陸認證接口的服務器,好比:github等
- 資源服務器 (Resources Server) - 提供資源接口及服務的服務器,一般和認證服務器是同一個應用。
- 第三方客戶端(Client) - 第三方應用,但願使用資源服務器提供的資源
- 服務提供商(Provider): 認證服務和資源服務歸屬於一個機構,該機構就是服務提供商
若是您對這些角色承擔的做用還不清晰,也請先記住這些角色,繼續往下看:github
- 從資源擁有者,即用戶的角度:舉個例子,用戶在B應用上,想使用本身在A應用中的保存的圖片等資源。因此用戶但願A應用開放接口給B應用,從而使用本身的這些圖片資源。
- 從資源提供者的角度:我想讓其餘廠商的應用都使用我提供的資源,以加強用戶對個人的粘性。越多的第三方應用依賴於我開放的接口,就表示會有越多的用戶依賴於我。參考:某某平臺開放掃碼登陸接口。
- 從第三方客戶端,即資源申請者的角度:A應用是一個大廠開發的,它那裏用戶量大。A應用既然提供了基於OAuth2的接口,我能夠獲取一些基本用戶數據信息,我幹嗎不用呢。特別是掃碼登陸功能接口,給我本身的用戶也帶來了極大的方便,加強了個人應用的用戶體驗。
2、OAuth2受權的流程
OAuth2受權的流程的受權流程仍是有點複雜的,用專業的術語很容易把你們弄糊塗,因此我但願給你們舉一個生活中的例子,來幫助理解。spring
背景:我經營着一個考研自習室,向考研學生出租提供自習室資源。李小明是一位考研學生,自習室資源擁有者,個人用戶。segmentfault
- 資源擁有者 - 考研同窗李小明
- 資源服務器 - 考研自習室及自習室內的資源(書包)
- 認證服務器 - 我(考研自習室管理員)
- 第三方客戶端 - 考研同窗李小明家長,第三方申請者
下面咱們來結合這張圖理解OAuth2受權的流程:springboot

- 第一步(第三方申請資源):一個自稱是考研學生家長的人給我打電話:「李小明是在你這裏自習吧?他的書包放在自習室了,我要幫他取一下。」
- 第二步(驗證資源擁有者): 我此時將信將疑,因而讓家長等一下,同時撥通了李小明視頻,李小明向我確認,的確有這回事。
- 第三步(認證經過發受權碼):我一看這狀況,就和小明家長說:李小明的自習室是「XXXX」地址,可是我不在那,你來我這取一下鑰匙吧。
- 第四部(申請token令牌):小明家長來到個人地址,告訴我說:來取「XXXX」地址自習室的鑰匙。哦,我一聽就明白了。
- 第五步(頒發token令牌):因而我找出自習室的鑰匙交給了小明的家長。
從上面的例子中咱們看到,小明(用戶)是明顯受益方,他不用跑腿了。我做爲自習室經營者(認證服務器),對外提供這種服務的目的是爲了增長用戶粘性,加強用戶體驗。小明的家長做爲第三方,他獲取了資源(自習室書包),是爲了加強本身的兒子小明的用戶體驗。
以上的受權模式,就是OAuth2最典型的最常被使用的受權碼模式。「XXXX」地址是受權碼,鑰匙是Access Token。用相對專業的說法再說明一次,你們能夠對比學習:服務器
- 第三方應用,向認證服務器請求受權。
- 用戶告知認證服務器贊成受權(一般是經過用戶掃碼或輸入用戶名密碼的方式)
- 認證服務器向第三方應用告知受權碼(code)
- 第三方應用使用受權碼(code)申請Access Token
- 認證服務器驗證受權碼,頒發Access Token
這樣第三方應用就可使用Access Token,訪問服務提供商的接口資源了。(小明家長用鑰匙去自習室取書包)ide
3、OAuth2四種受權模式
- 受權碼模式(authorization code)
- 簡化模式(implicit)
- 密碼模式(resource owner password credentials)
- 客戶端模式(client credentials)
在第二節中爲你們講述的是受權碼模式。密碼模式也很簡單:學習
- 用戶將用戶名密碼交給第三方客戶端應用
- 客戶端將用戶名密碼發送給認證服務器,認證服務器驗證後頒發AccessToken
- 客戶端請求資源接口攜帶AccessToken,服務端對AccessToken進行校驗。
- 校驗經過,才能得到接口正確的數據結果響應。
密碼模式與受權碼模式最大的區別在於:受權碼模式申請受權碼的過程是用戶直接與認證服務器進行交互,而後受權結果由認證服務器告知第三方客戶端,也就是不會向第三方客戶端暴露服務提供商的用戶密碼信息。而密碼模式,是用戶將用戶密碼信息交給第三方,而後由第三方向服務提供商進行認證和資源請求。絕大多數的服務提供商都會選擇使用受權碼模式,避免本身的用戶密碼暴漏給第三方。因此密碼模式只適用於服務提供商對第三方廠商高度信任的狀況下才能使用。spa
其餘兩種模式的應用不多,因此不作過多的介紹。想深刻了解的,自行學習!code
期待您的關注