微服務技術棧:常用的安全認證組件

2020-12-14 知了V笑

一、傳統Session認證

1、認證過程

用戶向伺服器發送用戶名和密碼。伺服器驗證後在當前對話(session)保存相關數據。伺服器返回sessionId,寫入客戶端 Cookie。客戶端每次請求,需要通過 Cookie,將 sessionId 回傳伺服器。伺服器收到 sessionId,驗證客戶端。2、存在問題

session保存在服務端,客戶端訪問高並發時,服務端壓力大。

擴展性差,伺服器集群,就需要 session 數據共享。

二、JWT簡介

JWT(全稱:JSON Web Token),在基於HTTP通信過程中,進行身份認證。

1、認證流程

客戶端通過用戶名和密碼登錄伺服器;服務端對客戶端身份進行驗證;伺服器認證以後,生成一個 JSON 對象,發回客戶端;客戶端與服務端通信的時候,都要發回這個 JSON 對象;服務端解析該JSON對象,獲取用戶身份;服務端可以不必存儲該JSON(Token)對象,身份信息都可以解析出來。

2、JWT結構

頭部(header) 聲明類型以及加密算法;負載(payload) 攜帶一些用戶身份信息;籤名(signature) 籤名信息;3、JWT使用方式

通常推薦的做法是客戶端在 HTTP 請求的頭信息Authorization欄位裡面。

Authorization: Bearer <token>

三、Shiro簡介

1、基礎概念

Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。作為一款安全框架Shiro的設計相當巧妙。Shiro的應用不依賴任何容器,它不僅可以在JavaEE下使用,還可以應用在JavaSE環境中。

2、核心角色

Subject:認證主體代表當前系統的使用者,就是用戶,在Shiro的認證中,認證主體通常就是userName和passWord,或者其他用戶相關的唯一標識。

SecurityManager:安全管理器Shiro架構中最核心的組件,通過它可以協調其他組件完成用戶認證和授權。實際上,SecurityManager就是Shiro框架的控制器。

Realm:域對象定義了訪問數據的方式,用來連接不同的數據源,如:關係資料庫,配置文件等等。

3、核心理念

Shiro自己不維護用戶和權限,通過Subject用戶主體和Realm域對象的注入,完成用戶的認證和授權。

四、Security簡介

1、基礎概念

Spring Security是一個能夠為基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring的IOC,DI,AOP(面向切面編程)功能,為應用系統提供聲明式的安全訪問控制功能,減少了為安全控制編寫大量重複代碼的工作。

2、核心API解讀

SecurityContextHolder最基本的對象,保存著當前會話用戶認證,權限,鑑權等核心數據。SecurityContextHolder默認使用ThreadLocal策略來存儲認證信息,與線程綁定的策略。用戶退出時,自動清除當前線程的認證信息。

AuthenticationgetAuthorities,權限列表,通常是代表權限的字符串集合;getCredentials,密碼,認證之後會移出,來保證安全性;getDetails,請求的細節參數;getPrincipal, 核心身份信息,一般返回UserDetails的實現類;UserDetails封裝了用戶的詳細的信息。

UserDetailsService實現該接口,自定義用戶認證流程,通常讀取資料庫,對比用戶的登錄信息,完成認證,授權。

AuthenticationManager認證流程頂級接口。可以通過實現AuthenticationManager接口來自定義自己的認證方式,Spring提供了一個默認的實現,ProviderManager。

五、OAuth2認證機制

1、OAuth2機制簡介

OAuth2關注客戶端開發者的簡易性。要麼通過組織在資源擁有者和HTTP服務商之間的被批准的交互動作代表用戶,要麼允許第三方應用代表用戶獲得訪問的權限。同時為Web應用,桌面應用和手機,和起居室設備提供專門的認證流程。 OAuth開放授權是一個開放標準,允許用戶讓第三方應用訪問該用戶在某一應用服務上存儲的資源,而無需將用戶名和密碼提供給第三方應用。

例如經典的場景:

用戶登錄某第三方網站,可以選擇不註冊;該第三方網站提供其他登錄方式:QQ或者微信;用戶使用QQ或者微信授權登錄該網站;該網站獲取QQ或者微信的登錄信息,頭像和暱稱;該流程涉及如下幾個角色:

Third-Application: 第三方應用,即用戶不需註冊的網站;Resource-Owner: 資源持有者,一般就是用戶自身,用戶擁有微信或QQ登錄的權限;Authorization-server: 認證伺服器,服務提供商專門用來處理認證的伺服器,即對微信或者QQ帳號識別的服務;Resource-server: 資源伺服器,具體資源的存儲服務,這裡是指用戶的頭像和暱稱的存儲服務;User Agent: 用戶代理,一般就是指的瀏覽器;Http Service: 服務提供者,也就是持有Resource Server的存在方;2、模式圖解

Client理解為第三方應用,可以看到Oauth的基本流程如下:

Client向資源持有者請求獲取資源,資源持有者授權第三方應用一個許可證,第三方應用將該許可證發送到認證伺服器進行認證,如果認證成功,返回一Token給Client,第三方應用使用該access token到資源伺服器處獲取該access token對應的資源。

相關焦點

  • 微服務應用有哪些 - CSDN
    有一利就有一弊,以往一個程序有幾十個組件,現在可能就變成了幾十個微服務。那麼這麼多微服務該如何管理呢?類似於真實世界,若干個小分隊聯合作戰得由總參謀部協調,彼此之間職責明確、分工協作。微服務的問題也不少,小分隊多了,溝通成本就增加了,性能也可能會有所下降。微服務架構的特點
  • 阿里94 年 P7 員工曬出工資,網友:搞好「微服務」 = 百萬年薪?
    那麼你缺乏這兩個字實 戰消除痛點、解決面試、積累實戰經驗歡迎你參加馬士兵教育微服務與高並發 訓練營本號粉絲:免 費限前200個!兩天你將學到快速 · 上手微服務,了解各個組件的作用極簡 · 從點到面,內容絕不拖泥帶水實戰 · 構建微服務項目架構 · 高並發系統中組件解析與選型健壯 · 網際網路項目常用中間件服務做到 · 從傳統項目轉向微服務網際網路系統架構吊打 · 面試官,獨家解析淘寶網秒殺系統需求馬士兵是誰
  • 面向領域的微服務架構
    尤其在一個指數級增長的環境中,權宜之計有時會導致邏輯和組件之間的界限不清。  執行效率低下。這些問題加在一起,使得團隊很難獨立自主地執行任務。隨著Uber從10多個工程師發展到100多個工程師,多個團隊擁有技術棧的碎片時,這種單一的架構將團隊的命運捆綁在一起,使得獨立運作變得困難。因此,我們採用了微服務架構。
  • Spring Cloud系列各子項目在微服務架構中的作用分析
    Springcloud一般用於搭建微服務項目,那麼微服務項目是怎麼工作的呢?Springcloud的幾個子項目分別扮演什麼角色?如果需要給所有請求做統一的處理,比如認證、授權方面,也不應該在每個微服務寫一套驗證邏輯。所以需要網關來提供一個統一的調用地址給前端調用,通過請求信息區分調用不同微服務,提供統一的路由定位轉發、請求過濾、負載均衡、請求響應修改等功能,在網關服務上做認證授權等公共處理。
  • 微服務是新瓶裝舊酒?與中臺什麼關係?傳統企業需要麼?有乾貨
    但一方面,網際網路公司基於自身的業務特點持續迭代和演進出來的技術體系,是否適用於所有傳統企業?另一方面,傳統企業在模仿網際網路公司構建自己的信息化系統時,是否正確理解和落實了這些技術理念,還是僅僅照貓畫虎?先說說微服務。很多人認為,微服務的核心就是拆分。
  • Service Mesh:調度千軍萬馬微服務,2.0妥妥的
    並被一度當作雲原生技術棧的關鍵組件之一,人稱「新一代微服務架構」,即2.0版本。從邏輯出發,如果想聊透Service Mesh,還是要先談談微服務的。用維基百科的話說,所謂微服務,可被定義為一種軟體架構風格。
  • 微前端架構初探以及我的前端技術盤點
    在部署微服務時我們需要做好適當的邊界劃分,並處理不同微服務之間的並發問題,這些都是對整個項目帶來的挑戰,需要更加專業的技術成員來把控.目前市面上也有很多開源的微服務框架比如Dubbo,Spring Cloud等,筆者之前公司採用的Spring Cloud就是一個很好的微服務架構方案.
  • Nebulogy納比雲與國產作業系統UOS完成兼容性互認證
    2020年5月,「新基建」被正式寫入政府工作報告,包含雲計算、人工智慧、區塊鏈等新技術基礎設施。據全國各省份推出的投資計劃來看,一個超過50萬億的「新基建」浪潮已然來襲,雲計算作為數字經濟建設的雲基座必將迎來爆發式增長。 同時,在日趨複雜的國際環境下,自主可控的安全戰略地位愈加凸顯。
  • 興業銀行信息科技部招API安全、RPA、IoT、AI等崗位
    ,海外留學歸國人員應有國家教育部頒發的國外學歷學位認證證書;(二)計算機、通信工程、信息安全、自動化、數學等計算機相關專業;(三)身心健康、工作踏實、責任心強,能吃苦耐勞,有一定抗壓能力和風險意識,具備良好的職業道德操守和團隊協作精神。
  • 對標企業SRE:馬哥教育推出2020微服務課程
    報告顯示,在訪問了全球 1,502 名軟體工程師、系統和技術架構師、工程師以及決策者後,有 77% 的組織反饋採用了微服務,其中 92% 的組織成功使用了微服務。  同時加大了微服務、容器化的全面實戰講解,通過基於Jenkins的CI/CD自動化技術、及Docker+Kubernetes等全部實戰化,及Istio+Envoy第三代微服務架構服務網格體系,構建全新基於一線大廠應用實戰化項目平臺。
  • 11月阿里Spring全家桶+MQ微服務架構筆記:源碼+實戰
    數據時代,除了大數據和人工智慧的發展,微服務分布式已經貫穿開發人員的開發過程,哪怕公司達不到這個標準,也會往上湊個熱鬧,作為熱愛學習的現代小青年(我不會承認是面試要問這個知識點的),對與微服務,不學習了解一下怎麼可以?
  • 訊鳥數據CTO吳俊:科技金融的核心是技術
    從而網際網路公司對新技術的應用更開放,IT人員可以大膽嘗試新技術,用迭代的方式達到最優狀態。  而傳統金融公司的技術相對更保守,更注重系統的高可用性,數據的準確性和信息安全,對bug幾乎0容忍,因為新技術的使用有可能會帶來新的風險點,所以在技術創新方面相對更保守,迭代速度較慢。  科技金融是科技和金融高度融合的產物。
  • 這份阿里微服務指導手冊:Boot+Cloud+MQ終於開源了,快點收藏吧
    今天開源的這份阿里巴巴內部的微服務的指導手冊,涵蓋了當下使用和面試過程中的流程技術,包含了:SpringBoot, Thymeleaf、 Jetty、 Redis 整合、C3P0 整合、Druid 整合、MyBatis 整合、ActiveMQ 整合、RabbitMQ 整合、Kafka
  • Netflix 微服務架構設計解析
    Netflix 的技術團隊如夢方醒,它需要一個沒有單點故障的更可靠的基礎架構。因此技術團隊管理層做出兩個重要決定,將 IT 基礎架構從自己的IDC遷移到公共雲上,通過改造成微服務架構,用較小的易管理軟體組件替換單體程序。以上這兩個決定為今天 Netflix 的成功打下了堅實基礎。
  • 雲原生微服務應用平臺來啦!
    基於容器技術,架構完整先進一般來說,現在流行的大多數PaaS平臺,其底層的虛擬化技術主要是容器和虛擬機兩種。容器相對於虛擬機而言,是一種更輕量級的虛擬化技術,百度智能雲此次推出的CNAP就應用了此技術。但與普通的PaaS平臺不同,CNAP充分利用了百度智能雲產品矩陣的優勢,整體架構更為先進。
  • 微服務電商項目 - CSDN
    把項目整個過程都經歷一遍,而且公司使用的開發工具(idea,git,gitlab,禪道)和開發所用的技術(springboot+通用mapper)都是市面上比較流行的。我覺的自己很幸運,因為我剛開始就進入整個項目的開發。但是隨著日子的一天天過去,發現自己沒有做到很深的東西,也沒專研很牛的技術,僅僅在工作的第二周時間開發了十幾個接口,剩下時間就是對代碼的修修補補,需求的討論。
  • 逛了五年GitHub,終於整理出七大java開源技術項目文檔,趕緊收藏
    第5~9章介紹了Spring Cloud框架的基礎模塊一一Spring Cloud Netflix 模塊,涵蓋了Spring Cloud構建微服務的基礎組件。例如Eureka、Ribbon、 Feign、 Hystrix 和Zuul等,這些組件為微服務系統提供了基本的服務治理能力。以案例為切入點,由淺入深介紹這些組件,並從源碼的角度分析這些組件的工作原理。
  • 雲原生數據中臺,袋鼠雲數棧DTinsight4.0賦能企業智能化轉型
    規模宏大,話題前沿,從技術到方法論再到實踐,亮點頗多。其中,數棧DTinsight4.0:雲原生數據中臺產品發布更是成為全場焦點之一。採用微服務架構的數棧DTinsight4.0滿足複雜性和多元性的環境雲原生在考慮到客戶環境的複雜性和多元性後
  • 使用Java 構建微服務 - OSCHINA - 中文開源技術交流社區
    Container-less微服務將應用及其依賴打包成一個單一的jar文件。Self-contained微服務也是打包成一個單一的Jar文件,但它還包括一個嵌入式框架,這個框架含有可選的第三方lib,當然這些lib是兼容的。In-container微服務打包成一個完整的Java EE容器,該服務在Docker鏡像中實現。
  • 工業網際網路平臺安全白皮書2020
    工業微服務框架是以單一功能組件為基礎,通過模塊化組合實現「高內聚低耦合」應用開發的軟體框架。工業生產涉及多種行業與產品,微服務的原子化特徵可為不同業務提供重複利用的優勢,但因工業體量龐大,且每個微服務作為獨立的功能需求開發,導致多種微服務構建規則並存。因此構建安全的微服務,制定多樣化微服務安全接入準則,是工業網際網路平臺安全的一項新挑戰。