前后端分離基於Oauth2的SSO單點登錄怎樣做?


mark

一、說明

單點登錄顧名思義就是在多個應用系統中,只需要登錄一次,就可以訪問其他相互信任的應用系統,免除多次登錄的煩惱;本文主要介紹跨域間的 前后端分離 項目怎樣實現單點登錄,並且與 非前后端分離 的差異在那里?需要解決什么問題?。

前后端分離的核心概念是后端僅返回前端所需的數據,不再渲染HTML頁面,前端HTML頁面通過AJAX調用后端的RESTFUL API接口並使用JSON數據進行交互

PS:關於單點登錄主流的實現思路和原理請看文章《Spring Security基於Oauth2的SSO單點登錄怎樣做?一個注解搞定

 

二、實現差異

跨域間的前后端分離項目也是基於共享統一授權服務(UAA)的cookie來實現單點登錄的,但是與非前后分離不一樣的是存在以下問題需要解決

  1. 沒有過濾器/攔截器,需要在前端判斷登錄狀態
  2. 需要自己實現oauth2授權碼模式交互邏輯
  3. 需要解決安全性問題,oauth2clientSecret參數放在前端不安全

 

三、實現架構

下面是前后端分離項目的三個角色(前端WEB工程、后端API工程、授權中心UAA)間進行登錄/單點登錄時的交互邏輯架構圖

file

跨域的單點登錄原理在《Spring Security基於Oauth2的SSO單點登錄怎樣做?一個注解搞定》中已經介紹過了這里就不展開說明了

前端WEB工程有幾個點需要注意:

  1. 紅色線條為重定向跳轉
  2. 前端工程可通過是否存在 access_token 判斷登錄狀態
  3. 前端工程跳轉UAA之前需記錄用戶訪問的頁面地址,方便登錄完成后重定向回去

PS:為什么獲取access_token需要請求后端API工程去完成,而不是前端WEB工程自己直接請求UAA呢?因為安全性問題!這一步需要傳clientSecret參數,而通過后台來配置這個參數就不需要暴露給前端了。

 

四、完整的demo下載地址

https://gitee.com/zlt2000/microservices-platform/tree/master/zlt-demo/sso-demo/web-sso

 
掃碼關注有驚喜!

file


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM