前面基本介紹了security的常規用法,同時介紹了JWT和它的一個簡單實現,基本上開發中遇到的登陸問題都能解決了,即便在分佈式開發,或者微服務開發中實現登陸也基本沒有問題了。security自己已經實現的比較完善的安全處理,加上JWT的驗證方式,能夠實現一個理想的登陸功能。html
咱們來看登陸,給用戶一個帳號,驗證有效後登陸成功,這一步是任何系統都沒法避免的。不管這個帳號只能登陸一個系統仍是像支付寶帳號同樣登陸多個app,不管帳號是用戶名密碼,仍是手機驗證碼,或者郵箱等其餘形式,能夠說認證這一步是最基礎的,沒法避免。git
登陸成功後,經過受權可讓用戶訪問一些登陸前沒法訪問的頁面或者接口,並且不管session或者token,其實都是有有效期的,過了有效期就須要從新登陸。從這種形式上看,受權包含了更多的場景,不只是內部已經登陸的用戶,還有多是第三方的應用,或者兩個系統之間的信息交換等等。並且微服務的開發模式下,服務愈來愈多,能夠被受權的內容也愈來愈多,若是沒有統一的方式來管理這些接口資源的受權,會很是麻煩。所以,系統針對全部的訪問須要有統一的認證和受權的機制,而 OAuth2.0 是咱們實現這種統一認證受權很是好的一個選擇。github
OAuth 2.0 是目前最流行的受權機制,用來受權第三方應用,獲取用戶數據。最經典的場景就是咱們使用QQ來進行第三方登陸的時候,選擇能夠訪問用戶的哪些信息。關於OAuth 2.0的介紹,推薦讀取阮一峯的三篇介紹文章,地址是:spring
這三篇文章是一個很是好和很是詳細的OAuth2.0的入門。安全
關於OAuth2.0的理解,用來受權第三方應用,之前老是理解不到位的緣由是,我沒有站在不一樣的角度去分析思考。好比在使用QQ進行第三方登陸時,是咱們登陸的軟件須要獲取咱們qq帳號的部分用戶信息,所以須要騰訊的認證受權,咱們須要在一鍵登陸(受權)的時候,登陸QQ,點擊贊成便可。springboot
而若是咱們做爲開發人員,去設計一個OAuth2.0受權功能的時候,須要從開發人員角度去思考哪部分是咱們要完成的功能,好比上面的QQ第三方登陸,首先QQ軟件是咱們開發人員開發的,第三方應用有一個咱們軟件的QQ帳號,第三方用戶想在本身的軟件上面展現第三方的QQ帳號的部分用戶信息,須要來咱們的受權服務申請,贊成後才能查詢咱們開發的軟件中的用戶信息,所以咱們要開發的是一個基本的QQ服務(資源服務),一個受權服務,而且第三方能夠在我方註冊帳號,或者能夠給第三方分配帳號。服務器
關於第三方應用,能夠是其它公司的系統,也能夠本公司架構內的其它服務,你們能夠根據阮一峯的文章,參考開發人員的任務屬於文章中的哪些內容。這樣,對開發OAuth2.0和使用OAuth2.0會有清晰的區分和理解。微信
單點登陸(SingleSignOn,SSO),就是經過用戶的一次性鑑別登陸。當用戶在身份認證服務器上登陸一次之後,便可得到訪問單點登陸系統中其餘關聯繫統和應用軟件的權限,同時這種實現是不須要管理員對用戶的登陸狀態或其餘信息進行修改的,這意味着在多個應用系統中,用戶只需一次登陸就能夠訪問全部相互信任的應用系統。這種方式減小了由登陸產生的時間消耗,輔助了用戶管理,是目前比較流行的。session
當用戶第一次訪問應用系統A的時候,由於尚未登陸,會被引導到認證系統中進行登陸;根據用戶提供的登陸信息,認證系統進行身份校驗,若是經過校驗,應該返回給用戶一個認證的憑據--ticket;用戶再訪問別的應用的時候就會將這個ticket帶上,做爲本身認證的憑據,應用系統接受到請求以後會把ticket送到認證系統進行校驗,檢查ticket的合法性。若是經過校驗,用戶就能夠在不用再次登陸的狀況下訪問應用系統B和應用系統C了。架構
從上面的介紹能夠看得出,單點登陸須要的正是一個共享的受權和驗證系統,也就是說SSO是可使用OAuth2.0機制去設計實現的。可是SSO和OAuth2.0也有一點區別,sso和oauth2.0在應用場景上的區別在於,使用sso的各個系統(子模塊)之間是互相信任的,一般是一個廠家的各個軟件產品,或者是一個產品的不一樣模塊系統。使用oauth2.0的各個應用大部分之間是互相不信任的,一般是不一樣廠家之間的帳號共享。OAuth2.0 解決的是服務提供方(微信等)給第三方應用受權的問題,而SSO解決的是大型系統中各個子系統如何共享登錄狀態的問題(好比你登陸了百度首頁,那麼你進入百度百科,百度貼吧,百度音樂等服務的時候都不須要從新登陸)。
Spring Cloud Security組件能夠理解爲,springboot security加上OAuth2.0的整合,能夠實現微服務系統中sso單點登陸功能,和第三方受權功能,是一個強大的權限組件。關於springboot2.1.x版本對應使用的springcloud的security組件的官方文檔以下:
文檔的目錄以下:
從目錄上看,Spring Cloud Security組件主要的功能也是sso和資源認證受權,後面的內容主要用來學習Spring Cloud Security。