關於單點登錄
- 背景,複習以前項目的時候,結合通義千問/kimi.ai,詳細掰扯了一下單點登錄,有了新的認識
- 單點登錄的範圍,肯定是同一台機器,或者同一類客户端,比如瀏覽器,或者專門的客户端軟件,至於同一台機器上的不同客户端能不能其中一個登錄了,其他的也自動登錄,這個感覺要更復雜,要藉助文件系統來搞.感覺一般討論的單點登錄是同一個機器上的同一個瀏覽器,並且瀏覽器支持localStorage,查了下,2010之後的瀏覽器就都支持了,基本沒問題
- 單點登錄的簡單場景,這個場景是在a系統的頁面點擊b系統的url,這個很簡單,從localStorage裏取token,加到b系統url的header或url上就行了.
- 複雜場景,登錄後,在瀏覽器新標籤頁直接訪問b系統的頁面url.前後端分離的場景,會先加載b系統的頁面,然後頁面裏讀localStorage裏的token,但a,b系統的域名+端口是有不同的,所以不能共享localStorage,此時就用到了iframe+postMessage,在a系統url裏,使用iframe把b系統的某個頁面加載進來,但不顯示,然後通過postMessage把token傳給iframe,然後iframe的url是b系統的url,然後iframe裏的代碼收到token後寫入自己域名+端口下的localStorage.此時b系統的localStorage裏有了token,然後新標籤打開b系統時,先加載頁面,再ajax加載數據,ajax加載數據時,從localStorage獲取token並帶到header裏,就可以了.
- 後端,一般單點登錄或者帶權限的系統,用jwt就可以了.用不用oauth2主要看有沒有動態權限的需求.jwt的缺點就是一旦頒發,在其過期時間內,一直有效,如果後台修改了權限,沒辦法立即生效.所以動態權限不頻繁的系統,或者説可以接受一些延遲動態權限生效的系統,就可以將token的有效時間設置小一點,然後前端等到token失效就取刷新token.而不接受權限延遲生效的系統,就只能上oauth2,每次請求都去認證中心去校驗權限.
0 位用戶收藏了這個故事!