OAuth 2.0 原理、流程、使用及解釋


最近應客戶的要求,我們公司對客戶的原有系統,進行了升級,增加了 OAuth 2.0 的功能。

開發過程中,搜索了網上的資料,發現都解釋不清。可能是相關作者,只熟悉前端、后端之一,說不清楚完整流程。我們邊理解、邊猜測、邊開發調試,終於完成了此系統的改造。

之后,公司對本公司的軟件產品:折桂打印平台系統/折桂上傳平台系統、折桂單點登錄系統,均增加了 OAuth 2.0 功能,也有機會,同時開發 OAuth 2.0 使用方的軟件、 OAuth 2.0 服務提供方的軟件,完成之后,決定寫一遍這方面的流程文章,作為總結。

 

網上的 OAuth 2.0 介紹,也有一些交互流程圖,但都比較簡單、概要,難以理解。

這里整理一份詳細的 OAuth 2.0 authorization_code 模式的交互流程圖,如下:

 

相關解釋如下:

綠色寬箭頭,為用戶在 IE 瀏覽器的主動操作;

藍色寬箭頭,為IE瀏覽器的自動跳轉,用戶能看到,但不是用戶的主動操作;

紫色寬箭頭,兩個服務器之間的交互,用戶看不到;

 

OAuth 詳細流程的步驟如下:

1. 用戶使用瀏覽器,輸入網址,訪問 server_a 的某個網址。

2.server_a 檢查用戶是否已登錄,如果沒有,則指示用戶瀏覽器,自動跳轉到 OAuth 登錄服務器 server_oauth,網址參數中,帶 redirect_uri ,也就是說,登錄完成后,還得到我這里來。

3. OAuth 登錄服務器 server_oauth, 檢查用戶是否已登錄。請注意,同一個用戶 IE ,在 server_a 、server_oauth 兩台服務器處,登錄狀態可以不一樣。

4. 如果用戶未在登錄服務器 server_oauth 處登錄,則 server_oauth 顯示登錄頁面(網頁)

5. 用戶錄入用戶名、密碼。此處可能有別的登錄方式,比如,掃描登錄,員工卡登錄,等等。

6. 用戶勾選“允許應用 server_a 使用我的基本用戶信息(密碼除外)”。此步驟,按理是不能略過的。但有的 OAuth 登錄服務器 ,不顯示此選擇項,或者只以文字提示、用戶不用去勾選。孰優孰劣,一時也難以評說。

7. 如果用戶登錄成功,則登錄服務器 server_oauth 標記此用戶為已登錄狀態,后台可能記錄登錄時間、遠程 IP 地址等信息。

8. 登錄服務器 server_oauth 指示用戶瀏覽器,自動跳轉到 server_a 服務器,此處網址為上述步驟 2 中的  redirect_uri 。

9. 服務器 server_a ,在  redirect_uri 網址對應的后台程序中,處理用戶的 OAuth 登錄過程。

9.1 服務器 server_a 獲取網址參數中的 code, 這是 OAuth 技術中的"授權碼"。這個授權碼,有效期比較短。當然,不同的 OAuth 登錄服務器,配置不同,可能是幾秒鍾,可能是10分鍾。

9.2  服務器 server_a 以"授權碼" 向 OAuth 登錄服務器 server_oauth 索取 token ,即 OAuth 技術中的"令牌"。這一步驟,用戶處 IE 瀏覽器看不到。令牌的有效期較長。同樣的,不同的 OAuth 登錄服務器,配置不同,可能是15分鍾,可能是幾天。這一步驟操作,一般是 HTTP GET 請求(request).

9.2.1 OAuth 登錄服務器 server_oauth,以 json 字符串形式,返回 token 數據,作為 9.2 步驟的結果。這一步驟,是 HTTP GET 的結果(response)。

9.2.2 服務器 server_a 解析得到的 token json 字符串,獲取 token 數值。

9.3 服務器 server_a 以"token 數值" 向 OAuth 登錄服務器 server_oauth 索取用戶資源,此處一般只有用戶基本信息,比如登錄賬號、用戶全名、電子郵件、電話等,不涉及密碼。這一步驟操作,一般是 HTTP GET 請求(request).

9.3.1 OAuth 登錄服務器 server_oauth,以 json 字符串形式,返回用戶基本信息數據,作為 9.5 步驟的結果。這一步驟,是 HTTP GET 的結果(response)。

9.3.2 服務器 server_a 解析得到的 user info json 字符串,獲取用戶基本信息數據。

9.4 服務器 server_a 保存用戶基本信息,並標記為已登錄用戶

9.4.1 一般來說,服務器 server_a 會檢查此用戶登錄賬號(qq 號,或電子郵件,或域賬號...),是否為本地已存在的用戶。如果不是,則創建本地用戶。

9.4.2 服務器 server_a 保存當前遠程 IE 用戶對應的信息,一般是后端保存用戶登錄賬號到 HTTP session。此步驟即標記當前用戶為已登錄狀態、並記住當前登錄用戶是誰。

9.4.3 服務器 server_a 保存當前遠程 IE 用戶對應的 OAuth token,一般也是保存到 HTTP session。

10. 服務器 server_a 指示用戶瀏覽器,自動跳轉到本服務器的另一個網址。此處不同的系統,實現的功能不同。一般是跳轉到“本系統里已登錄用戶的默認首頁”,也有的系統,會跳轉到以上步驟 1 的網址。

11. 服務器 server_a 后端檢查用戶在本系統的網頁操作權限,各系統自行實現功能,此處不詳細描述。

 

以上,即 OAuth 2.0 的完整交互過程。

 

-------歡迎轉載,轉載請注明出處:https://www.cnblogs.com/jacklondon/ 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM