1. 程式人生 > >分散式多系統SSO單點登入

分散式多系統SSO單點登入

1.整體系統佈局

  大的佈局有兩種方式,這兩種方式都需要一個獨立的SSO認證服務系統稱為SSO服務端,而第一種是在SSO服務端只完成登入介面,返回是否登入成功的標識和資料,每個SSO客戶端都需要獨立的登入頁面和登入介面(這個登入介面去呼叫SSO服務端的登入介面返回資料),而第二種則是整個登入系統(介面,頁面)全部在SSO服務端,其實這兩種方式都差不多。

    第一種:

 第二種:

 2.實現方式

     1.cookie+jwt,登入之後返回cookie,cookie中存的就是jwt,然後每次請求直接傳jwt,並在過濾器中進行驗證

     2.token請求頭,登入之後返回token,瀏覽器可使用cookie或localStorage儲存,每次請求的時候將token帶上,然後在後端過濾器進行驗證

     3.cookie+session,登入之後返回sessionId,然後在系統A中儲存sessionId和使用者的關係,每次請求帶上SessionId

3.可使用的框架

     1.shiro   2.cas   3.shiro+cas   4.spring security+oauth2

4.注意點:cookie是沒有全域性傳輸的使用方式的,只可以為其設定domain域,即可使用的域名(一般設定為二級域名,這樣該系統下的所有子域都可共享了,如果有多個二級域名,則需要想辦法將cookie複製過去,不能使用一級域名作為cookie的域,如.com),如果不太瞭解cookie域的可以參考部落格:

https://blog.csdn.net/zhouziyu2011/article/details/61200943/

遇到的問題或bug:

1.首先我用的是SpringBoot2.x搭建的專案,一般來說專案的domain域會設定成 .xx.com,注意xx前面有一個點,但是SpringBoot內建的tomcat解析不了,因為tomcat版本過高,使用的解析方式發生了變化。然後我就百度,一開始看到有說修改SpringBoot內建的tomcat版本,我照著方法修改後就出現問題了,主要是pom檔案報錯:

CoreException: Could not get the value for parameter compilerId for plugin execution default-compile: PluginResolutionException: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1 or one of its dependencies could not be resolved: The following artifacts could not be resolved: com.google.code.findbugs:jsr305:jar:2.0.1, org.codehaus.plexus:plexus-compiler-api:jar:2.2: Failure to transfer com.google.code.findbugs:jsr305:jar:2.0.1 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact com.google.code.findbugs:jsr305:jar:2.0.1 from/to central (http://repo.maven.apache.org/maven2): The operation was cancelled。。。。。。

這個錯誤就是說jar包衝突了,然後我就又按照錯誤百度,或者按照經驗刪除錯誤的jar包,讓maven重新去下載jar包,最後發現越搞越沒用,依舊報錯,然後一氣之下刪除了所有org資料夾下的jar包,因為我基本用的開源框架,所以jar包基本使用的都是org資料夾下的,結果就好了,專案終於有能啟動了,恢復正常了,(所以在這裡提醒大家碰到pom檔案出問題了,你最好直接把一個大的資料夾刪掉,否則沒刪對包,就只會浪費更多的時間)但是由於刪除了大部分jar包,之前修改的tomcat版本其實也已經恢復成預設的了,然後又繼續百度怎麼解析domain。

2.然後大部分都說用下面這個方法:

然後我放在專案中根本就找不到那些類,因為我是用的SpringBoot2.x版本比較高,然後我就去SpringBoot官網去看,終於找到了

只要加上這段話就行了,作用就是改變tomcat的解析方式。

3.設定cookie的時候最好把path也設定一下,設定成"/",否則可能cookie沒有效果。

4.因為是多系統,在後端需要使用RestTempalate或者HttpClient訪問url獲取資料時需要注意,這兩個類在請求的時候是不會自動帶上cookie的,所以需要手動新增上去,可參考:https://blog.csdn.net/zty1317313805/article/details/80096584