摘要:鑒權項目是一個比較完整的使用了框架的開源項目,可以用它來快速搭建分布式系統。本次著重看的部分是其服務以及用戶鑒權的部分。啟動項目依次啟動,,,即可。服務端則負責生成,驗證和更新。服務認證由處理。的鑒權也是通過的。
鑒權
ACE項目是一個比較完整的使用了spring cloud框架的開源項目,可以用它來快速搭建分布式系統。本次著重看的部分是其服務以及用戶鑒權的部分。ACE有一個鑒權服務,負責微服務群的鑒權。啟動ACE項目依次啟動center,auth-server,admin,gateway即可。
模塊架構鑒權模塊分為服務端和客戶端(另有一個common模塊,可忽略,是一些鑒權模塊公用代碼的提取)。應用程序依賴客戶端,客戶端提供了兩個攔截器,工具類,并和服務端通信的feign。服務端則負責token生成,驗證和更新。
代碼分析 程序啟動auth-server啟動時初始化KeyConfiguration,獲得userSecret和serviceSecret.并在啟動結束的鉤子類AuthServerRunner中,分別設置User和Server的pri/puk.User用于用戶認證,Server用于微服務認證。
admin和gateway在啟動的時候,會調用auth-client的自動配置,生成ServiceAuthConfig和UserAuthConfig的實例。同時auth-client的AuthClientRunner會請求pubkey到ServiceAuthConfig和UserAuthConfig的實例。同時在應用各自的WebConfiguration中添加UserAuthRestInterceptor和ServiceAuthRestInterceptor攔截器
運行階段用戶認證,由UserAuthRestInterceptor處理。
在用戶登錄的時候,調用jwtTokenUtil.generateToken生成token。這個token的生成規則稍后再論。在瀏覽器記錄一個Admin-Token.
--auth-server public String login(JwtAuthenticationRequest authenticationRequest) throws Exception { UserInfo info = userService.validate(authenticationRequest); if (!StringUtils.isEmpty(info.getId())) { return jwtTokenUtil.generateToken(new JWTInfo(info.getUsername(), info.getId() + "", info.getName())); } throw new UserInvalidException("用戶不存在或賬戶密碼錯誤!"); }
登錄之后的請求都會經過UserAuthRestInterceptor,在解析token的時候同時會進行過期,簽名合法等驗證。并把這些信息加到threadLocal中去。
--UserAuthRestInterceptor public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ...... IJWTInfo infoFromToken = userAuthUtil.getInfoFromToken(token); BaseContextHandler.setUsername(infoFromToken.getUniqueName()); BaseContextHandler.setName(infoFromToken.getName()); BaseContextHandler.setUserID(infoFromToken.getId()); return super.preHandle(request, response, handler); } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { BaseContextHandler.remove(); super.afterCompletion(request, response, handler, ex); }
服務認證由ServiceAuthRestInterceptor處理。service的鑒權也是通過user的token。通過serviceAuthConfig.getTokenHeader()來解析service的信息。
--ServiceAuthRestInterceptor public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ...... String token = request.getHeader(serviceAuthConfig.getTokenHeader()); IJWTInfo infoFromToken = serviceAuthUtil.getInfoFromToken(token); String uniqueName = infoFromToken.getUniqueName(); for(String client:serviceAuthUtil.getAllowedClient()){ if(client.equals(uniqueName)){ return super.preHandle(request, response, handler); } } throw new ClientForbiddenException("Client is Forbidden!"); }一些方法解讀(待補充)
jwtTokenUtil.generateToken:生成用戶token
userService.validate:驗證用戶的合法性
userAuthUtil.getInfoFromToken(token):從token中獲得用戶名稱和ID等信息。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71736.html
摘要:的安全性不好,攻擊者可以通過獲取本地進行欺騙或者利用進行攻擊。 好久沒寫博客了,因為最近公司要求我學spring cloud ,早點將以前軟件遷移到新的架構上。所以我那個拼命的學吶,總是圖快,很多關鍵的筆記沒有做好記錄,現在又遺忘了很多關鍵的技術點,極其罪惡! 現在想一想,還是踏踏實實的走比較好。這不,今天我冒了個泡,來補一補前面我所學所忘的知識點。 想要解鎖更多新姿勢?請訪問我的博客...
摘要:框架具有輕便,開源的優點,所以本譯見構建用戶管理微服務五使用令牌和來實現身份驗證往期譯見系列文章在賬號分享中持續連載,敬請查看在往期譯見系列的文章中,我們已經建立了業務邏輯數據訪問層和前端控制器但是忽略了對身份進行驗證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護REST API 重拾后端之Spring Boot(一):REST API的搭建...
摘要:認證鑒權與權限控制在微服務架構中的設計與實現一引言本文系認證鑒權與權限控制在微服務架構中的設計與實現系列的第一篇,本系列預計四篇文章講解微服務下的認證鑒權與權限控制的實現。 java 開源項目收集 平時收藏的 java 項目和工具 某小公司RESTful、共用接口、前后端分離、接口約定的實踐 隨著互聯網高速發展,公司對項目開發周期不斷縮短,我們面對各種需求,使用原有對接方式,各端已經很...
摘要:并向注冊中心注冊,注冊地址為,最后將的所有端口暴露出來,配置如下在工程的啟動類加上注解,開啟的功能,加上注解開啟的功能。在啟動類加上注解,開啟的功能。 轉載請標明出處: https://www.fangzhipeng.com本文出自方志朋的博客 Spring Boot Admin簡介 Spring Boot Admin是一個開源社區項目,用于管理和監控SpringBoot應用程序。 ...
閱讀 1308·2021-11-15 11:37
閱讀 3500·2021-11-11 16:55
閱讀 1747·2021-08-25 09:39
閱讀 3214·2019-08-30 15:44
閱讀 1733·2019-08-29 12:52
閱讀 1404·2019-08-29 11:10
閱讀 3237·2019-08-26 11:32
閱讀 3220·2019-08-26 10:16