最小代價的 SSO 單點登錄方案

現在有多個 WebApp,想用最小的代價實現 SSO 單點登錄。所謂最小代價,我的理解就是對原有 WebApp 的改動最小,因此

  • 在旁路增加一個 SsoWebApp 用於管理 SSO 的賬號,進行身份認證後實現跳轉原有 WebApp;
  • 保留原有 WebApp 登錄方式不做修改,增加一個單獨的 sso 登錄接口實現從 Ssoweb App 跳轉登錄。


具體的登錄流程如下:
用戶首先在 SsoWebApp 中完成登錄,再通過鏈接清單,選擇要跳轉的目標 WebApp 的 sso 接口,爲方便通過超級鏈接跳轉,建議這個接口使用 GET 方式,當然要用 POST 方式也是可以的。
跳轉鏈接示例

 http://WebApp1/sso?token=eyJ1aWQiOiIxMjM0NTYiLCAiZXhwaXJlIjoiMjAyMjA3MTUiLCAic2FsdCI6IjlENDdDRTI3LTU1MzEtNDRENS05QUUxLTVEMUQ3OUU2QUZFOCJ9


這裏 token 的明碼採用 json 描述

{
    "uid":"123456",             //用戶賬號
    "expire":"20220715235900",     //token 有效期
    "salt":"9D47CE27-5531-44D5-9AE1-5D1D79E6AFE8" //其他數據
}


爲防止 token 被纂改,可使用 RSA 私鑰簽名後 Base64 編碼。

當 WebApp 的 sso 接口接收 token 後調用 SsoWebApp 的公鑰解密方法還原出 json 進行判斷

if (當前WebApp內存在(uid) && expire >= 當前時刻)
  調用 WebApp 自己的登錄驗證方式,完成對 uid 的身份認證,進行正常的頁面跳轉
end if



要實現以上登錄流程,旁路的 SsoWebApp 需要實現

  1.  用戶賬戶的 CURD UI, 關鍵字段 uid, password
  2. 用戶賬戶下 SSO 記錄的 CURD UI,關鍵字段 uid, appName, ssoUrl
  3. 用戶登錄 UI 和顯示可用 SSO 站點列表 UI(跳轉鏈接)
  4.  WebAPI 接口,提供公鑰解密方法


以上 SSO 登錄方案存在的一個不足,是用戶在 SsoWebApp 的退出操作無法聯動 WebApp 退出,反之亦然。

因爲要實現登出聯動,不可避免地需要改造 WebApp 的原有登出接口,可以實現只不過需要花費額外的代價了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章