最近應客戶的要求,我們公司對客戶的原有系統,進行了升級,增加了 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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/863.html
標籤:其他
