楊旸 潘俊臣



摘 ? 要:文章研究的是微服務架構系統中的客戶端中間件和登錄驗證模塊。為了實現用戶登錄后,能在瀏覽器端實現對ePass3000GM便攜式密碼設備進行讀寫卡操作,文章在深入分析OAuth2.0協議的基礎上,提出了基于OAuth2.0安全認證中間件的設計與實現。在中間件與Web服務端進行登錄驗證,用戶登錄后通過Web服務端重新定向到中間件進行讀寫卡操作。
關鍵詞:OAuth2.0;中間件;授權碼;訪問令牌
中圖分類號:TP393 ? ? ? ? ?文獻標識碼:A
Abstract: This article studies client middleware and login authentication modules in microservice architecture systems. In order to enable users to log in, the ePass3000GM portable password device can be read and written on the browser. Based on an in-depth analysis of the OAuth2.0 protocol, this paper proposes the design and implementation of a secure authentication middleware based on OAuth2.0. Login verification is performed between the middleware and the web server. After the user logs in, the user is redirected to the middleware through the web server to perform card reading and writing.
Key words: OAuth2.0; middleware; authorization code; access token
1 引言
OAuth[1](Open Authorization)是一個關于開放授權的網絡標準,國內各大網站都有其應用的場景,目前的版本是2.0。OAuth2.0主要用于認證授權登錄,它作為開放平臺認證授權系統的標準協議而備受關注。但是,微服務架構(Microservices)的出現以及在國內外的成功應用,成為系統架構的一種新選擇,很多大型Web服務等都已經從傳統的單塊架構遷移到微服務架構[2]。
本文在深入研究OAuth2.0的協議后,提出了基于OAuth2.0安全認證登錄方案,并且實現了與客戶端中間件通信,從而實現對ePass3000GM便攜式密碼設備的讀寫卡操作。本文首先對OAuth2.0協議進行了詳細的介紹,然后對系統架構、授權流程、讀寫卡流程及關鍵技術展開論述,最后得出設計的結果。
2 OAuth2.0
2.1 OAuth2.0協議
在網絡技術日新月異的21世紀,互聯網環境下各部分之間的協作變得更為緊密,對數據整合與資源共享的要求愈發強烈,必然呈現出不同Web應用數據交互的現象。而OAuth協議正是解決了在“第三方”客戶端不獲取用戶敏感數據(密碼)的情況下,允許客戶端在授權范圍內獲取用戶受保護的基本信息(如用戶名、頭像等)[3]。
OAuth最初發布的版本為OAuth1.0,后又發布了OAuth1.0a。在2012年10月發布了OAuth協議的第三個版本,即OAuth2.0。OAuth2.0和之前的兩個版本并不兼容,它采用了簡化的簽名機制[4]。利用SSL(HTTPS)傳輸信息,在提高安全性的同時,還簡化了授權流程。OAuth2.0和此前的兩個版本相對比,開發難度大大降低、交互次數有所減少、授權流程更加簡單,從根本上提升了執行效率。此外,OAuth2.0協議新增了多個授權模式,為開發者提供了諸多便利。
2.2 OAuth2.0的四種執行角色
(1)Resource Owner(RO):資源擁有者,即能夠允許獲取受保護資源的實體。
(2)Client:表示資源擁有者對受保護資源提出訪問請求的應用,本文稱為“客戶端中間件”或“安全認證中間件”,簡稱“中間件”。
(3)Authorization Server(AS):授權服務器,即服務端專門用來處理認證的服務器,用于發放訪問令牌。
(4)Resource Server(RS):資源服務器,即服務端存放用戶生成資源的服務器。它與認證的服務器,可以是同一臺服務器,也可以是不同的服務器。
其中,服務端包括三個部分:資源擁有者、授權服務器、資源服務器,用于處理來自客戶端的授權請求。
2.3 OAuth2.0運行流程
(1)客戶端向資源擁有者發起授權請求。
(2)資源擁有者同意并返回授權許可。
(3)客戶端攜帶授權許可向授權服務器申請訪問令牌。
(4)授權服務器對客戶端進行認證以后,確認無誤,同意發放令牌。
(5)客戶端使用令牌,向資源服務器申請獲取資源。
(6)資源服務器對客戶端發來的令牌進行確認后,同意向發放受保護資源,OAuth2.0運行流程如圖1所示,
總結OAuth2.0的運行流程可分為三步:第一,獲取用戶授權;第二,發放訪問令牌;第三,發放受保護資源。
2.4 客戶端的授權模式
客戶端必須先拿到授權許可(Authorization Grant),再取得訪問令牌(Access Token),最終獲取受保護資源。OAuth 2.0定義了四種授權方式[6]。