1.需求
最近在嘗試着寫一個開放平台,於是先搭建網關。
作用:統一的請求入口,完成對請求的跟蹤,限流(未做),鑒權,分發,封裝響應
2.工作原理
2.1.請求
在開放平台中申請對接口的使用,申請通過后會獲得:AccessId/SecretKey
API網關(服務訪問的地址):127.0.0.1:7000
請求path(業務接口的路徑):/v1/article/.......
將請求內容拼裝為String(格式為統一格式)
String stringToSign=
HTTP-Verb + "\n" + //請求的方法
Content-MD5 + "\n" //參數的MD5
Content-Type + "\n" + //請求的參數類型
Timestamp + "\n" + //請求的時間戳
Headers + Url_String //請求頭以及請求路徑
然后通過SecretKey對stringToSign進行加密,得到簽名串:sign
將AccessId:sign放入請求頭,作為鑒權的依據 : Authorization: gateway:{AccessId}:{Signature}
發送請求
2.2.網關攔截
網關攔截該次請求,獲取鑒權信息,得到AccessId依據加密后的簽名串sign
從request中獲取請求信息(請求的方法,參數類型,時間戳,請求路徑等。。),重新組裝 stringToSign
將AccessId,sign,stringToSign,url(請求的path),method(請求的方法)作為參數,調用鑒權接口進行校驗
2.3.鑒權
通過AccessId,查數據庫,獲取SecretKey,以及用戶信息等
使用獲取的SecretKey對stringToSign進行加密,得到簽名串,對比原始簽名串,是否匹配,匹配則請求合法
其他校驗:對用戶信息進行校驗,用戶是否可用、對AccessId使用超期進行判斷等
通過url以及method獲取API信息(主要是獲取其服務名)
返回鑒權結果
2.4.服務分發
對鑒權結果進行判斷,合法則進行服務分發,將請求轉發到對應服務上
獲取響應結果
2.5.封裝響應
對響應結果進行處理,統一封裝為網關返回數據