B2C電商項目 微服務網關限流加鑑權模塊(SpingSecurity+Oauth2.0認證鑑權) 工作總結

一、用戶認證

1.1 、 用戶認證分析

在這裏插入圖片描述
上面流程圖描述了用戶要操作的各個微服務,用戶查看個人信息需要訪問客戶微服務,下單需要訪問訂
單微服務,秒殺搶購商品需要訪問秒殺微服務。每個服務都需要認證用戶的身份,身份認證成功後,需
要識別用戶的角色然後授權訪問對應的功能。

1.1.1、 單點登錄

用戶訪問的項目中,至少有3個微服務需要識別用戶身份,如果用戶訪問每個微服務都登錄一次就太麻
煩了,爲了提高用戶的體驗,我們需要實現讓用戶在一個系統中登錄,其他任意受信任的系統都可以訪
問,這個功能就叫單點登錄。
單點登錄(Single Sign On),簡稱爲 SSO,是目前比較流行的企業業務整合的解決方案之一。 SSO的
定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。

1.2、 認證解決方案

1.2.1、 單點登錄技術方案

在這裏插入圖片描述
Java 中有很多用戶認證的框架都可以實現單點登錄:

  • 1、Apache Shiro.
  • 2、CAS
  • 3、Spring security

1.3、 Spring security Oauth2認證解決方案

本項目採用 Spring security + Oauth2+JWT完成用戶認證及用戶授權,Spring security 是一個強大的和
高度可定製的身份驗證和訪問控制框架,Spring security 框架集成了Oauth2協議,下圖是項目認證架
構圖:
在這裏插入圖片描述
1 、用戶請求認證服務完成認證。
2、認證服務下發用戶身份令牌,擁有身份令牌表示身份合法。
3、用戶攜帶令牌請求資源服務,請求資源服務必先經過網關。
4、網關校驗用戶身份令牌的合法,不合法表示用戶沒有登錄,如果合法則放行繼續訪問。
5、資源服務獲取令牌,根據令牌完成授權。
6、資源服務完成授權則響應資源信息。

三、資源服務授權

資源服務擁有要訪問的受保護資源,客戶端攜帶令牌訪問資源服務,如果令牌合法則可成功訪問資源服
務中的資源,如下圖:
在這裏插入圖片描述
上圖的業務流程如下 :

1、客戶端請求認證服務申請令牌
2、認證服務生成令牌認證服務採用非對稱加密算法,使用私鑰生成令牌。
3、客戶端攜帶令牌訪問資源服務客戶端在Http header 中添加: Authorization:Bearer令牌。
4、資源服務請求認證服務校驗令牌的有效性資源服務接收到令牌,使用公鑰校驗令牌的合法性。
5、令牌有效,資源服務向客戶端響應資源信息

四、 認證開發

4.1、 需求分析

功能流程圖如下:
在這裏插入圖片描述
執行流程:

1、用戶登錄,請求認證服務
2、認證服務認證通過,生成jwt令牌,將jwt令牌及相關信息寫入Redis,並且將身份令牌寫入cookie
3、用戶訪問資源頁面,帶着cookie到網關
4、網關從cookie獲取token,並查詢Redis校驗token,如果token不存在則拒絕訪問,否則放行
5、用戶退出,請求認證服務,清除redis中的token,並且刪除cookie中的token

使用 redis存儲用戶的身份令牌有以下作用:

1、實現用戶退出註銷功能,服務端清除令牌後,即使客戶端請求攜帶token也是無效的。
2、由於jwt令牌過長,不宜存儲在cookie中,所以將jwt令牌存儲在redis,由客戶端請求服務端獲取並在
客戶端存儲

4.3、 認證服務

4.3.1、 認證需求分析

認證服務需要實現的功能如下:
1、登錄接口
前端post提交賬號、密碼等,用戶身份校驗通過,生成令牌,並將令牌存儲到redis。 將令牌寫入
cookie。
2、退出接口 校驗當前用戶的身份爲合法並且爲已登錄狀態。 將令牌從redis刪除。 刪除cookie中的令
牌。
在這裏插入圖片描述

5.2、 網關全局過濾器

在這裏插入圖片描述
新建過濾器類 AuthorizeFilter,對請求進行過濾
業務邏輯:
1)判斷當前請求是否爲登錄請求,是的話,則放行
2) 判斷cookie中是否存在信息, 沒有的話,拒絕訪問
3)判斷redis中令牌是否存在,沒有的話,拒絕訪問

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章