1. 程式人生 > 其它 >實現單點登入SSO

實現單點登入SSO

整理單點登入簡單流程:

需要請求單點登入端:app1 app2 app3
單點登入端:sso

登入:
1. app1需要登入時(當前沒有其他app登入),請求sso 並帶有回撥地址,sso得到回撥地址

2. sso實現使用者登入,生成sso_token、ticket,
2.1. 將sso_token 寫入瀏覽器快取或cookie
2.2. ticket 存入redis 設定失效時間
2.3. 將 ticket 返回給請求登入的回撥地址app1

3. app1 將得到的 ticket 請求sso驗證,需攜帶其他引數(退出登入地址+退出操作key),sso需操作:
3.1. 先獲取sso_token驗證是否失效,失效提示登入失敗
3.2. 將退出操作key與sso_token 關聯存入redis
3.3. 驗證通過sso銷燬ticket 並返回使用者資訊(userModel)給app1,驗證失敗 提示登入失敗

4. app1 得到userModel 生成app_token,請求sso繫結token介面

5. app2、app3 需要登入時(app1已登入),請求sso 並帶有回撥地址,sso得到回撥地址, sso需操作:
5.1. 驗證是否有sso_token, 驗證是否失效
5.1.1. 無sso_token 或 sso_token 失效 執行流程2
5.1.2. sso_token驗證成功,生成ticket 執行流程2.2

退出登入:
1. 將app2 token 置位失效
2. 通知sso 將sso_token 置位失效
3. sso請求 app驗證ticket時攜帶的退出引數(退出登入地址+退出操作key),通知app 將token 置位失效,
刪除redis 中 各app退出操作key與sso_token關聯關係

註冊:
1. 表單頁面
2. 輸入手機號和密碼,註冊

登入:
1. 表單頁面
2. 驗證是否有sso_token, 驗證是否失效, 失效提交表單(執行3); 有效生成ticket , 存入快取(執行4)
3. 提交表單驗證使用者,生成 sso_token + ticket, 存入快取
4. 傳送 sso_token + ticket 給 app
5. 驗證 sso_token + ticket 是否有效 記錄退出引數, 失效 返回false, 成功返回userModel、銷燬ticket

退出:
1. 根據app傳輸的sso_token 將其置為失效狀態
2. 通知其他app 將app_token置為失效狀態, 刪除關聯關係