一、專案需求
系統a 中用iframe嵌入系統b,
1.需要做session共享,實現免登入效果;
2.系統b中做的操作,需要觸發系統a,以免系統a的session超時過期;
3.系統b填好資料後,call系統a的api,執行系統a帳戶註冊操作
二、實現思路
問題1.
系統a的登入是通過sso server實現的,sso server驗證並登入之後,返回token給系統a,而系統a拿此token去call sso server並取回登入的帳戶資訊(如uid)。 當系統b第一次通過sso 伺服器去驗證時,發現此會話已經登入,返回token,緊接著第二次call sso,傳進token取回登入的帳戶資訊。(注1:該token會有效時間,如三分鐘)(注2:此時sso中會記錄此token下,含有兩個系統a和b的記錄,以便登入登出時一同登出)。 以上為一般的sso流程,原理是讓此瀏覽器和sso伺服器建立會話登入 ,即sessionid。
而目前公司現有做法是,系統b拿此token去向系統a做校驗並取帳戶資訊,這種做法有風險,因為此瀏覽器只是和sso 伺服器有做會話登入,通過瀏覽器傳入的token和伺服器中sessionid對應的token比對和校驗是有效的,而系統b和系統a是沒有這種會話登入 ,換言之就是沒有sessionid來做匹配,所以有可能其他電腦複製此token去向系統a做請求,這種欺騙行為會成功拿到帳戶資訊。
改進方法:系統b不拿此token向系統a請求,而改向sso請求並取到帳戶資訊。(注:如果此系統b由於其他原因,如防火牆設定等,無法訪問sso系統,則只能通過系統a,這種情況下,便要求系統b提交的資訊不僅包括token,還需要獲取到瀏覽器中的sessionid ?)
問題2.
1.系統b的任何操作,都會去call 系統a的api,以此讓系統a的session有效期得到同步
問題3.
個人資訊,重要資訊(如密碼)等,由系統b向系統a傳送請求的時候,需要做加密處理。加密可以通過非對稱加密,即是通過公鑰進行加密,傳送到伺服器,再用私鑰進行解密,通過這種方式,便可以保證資料在傳輸的過程中不受盜取。
系統b向sso系統請求,並取到乙個公鑰和隨機數;
系統b將資料通過此公鑰進行加密,然後call系統a的介面,傳入此加密的資料作為引數,系統a會將此加密資料再發給sso系統
sso系統根據步驟1產生的公鑰和隨機數,找到相應的請求並通過私鑰對資料進行解密,實現註冊操作。
單點登入系統 SSO 總結
其實就是統一使用者管理平台,如今各種系統數不勝數,這就難免需要使用者名稱和密碼登入,但是賬戶越多越容易忘記,而且每次訪問需要登入還很麻煩,所以單點登入系統應運而生,這也是我上班的第乙個任務 利用公司現有的sso伺服器來配置客戶端開發使用者登入介面從而和別的公司對接。起初我還以為是做外包的,認為i很簡...
單點登入(SSO)系統的總結
前些天一位其他開發部門的同事找到我們了解一些關於sso單點登入的事,他們要做單點登入,同時也需要和我們這邊的系統做整合,要我幫忙做一單點登入,了解關於單點登入的解決方案和資料,雖然做單點登入已經很久了,自以為對sso系統也算比較了解。但是被他這麼一問,反倒是一下講不清楚,所以總結一下目前正在使用的s...
單點登入(SSO)系統的總結
前些天一位其他開發部門的同事找到我們了解一些關於sso單點登入的事,他們要做單點登入,同時也需要和我們這邊的系統做整合,要我幫忙做一單點登入,了解關於單點登入的解決方案和資料,雖然做單點登入已經很久了,自以為對sso系統也算比較了解。但是被他這麼一問,反倒是一下講不清楚,所以總結一下目前正在使用的s...