##一個簡單的 SSO 單點登陸 單設備登陸 解決方案 SSO英文全稱Single Sign On,單點登陸。SSO是在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。它包括能夠將此次主要的登陸映射到其餘應用中用於同一個用戶的登陸的機制。它是目前比較流行的企業業務整合的解決方案之一。前端
實現SSO的技術主要有: (1)基於cookies實現; (2) Broker-based(基於經紀人),例如Kerberos等; (3) Agent-based(基於代理人)在這種解決方案中例如SSH等; (4) Token-based,例如SecurID,WebID,如今被普遍使用的口令認證; (5) 基於網關Agent and Broker-based; (6) 基於安全斷言標記語言(SAML)實現; ####可是本文今天不會用到以上方法,可是咱們使用方法相似於Token; 寫本次文章的起初是爲了解決連接捕獲訪問服務器的問題,可是單憑單點登陸和單設備登陸是解決不了這個問題的,要配合上(加密,MD5校驗,請求惟一性驗證,單點登陸,單設備登陸)來組成一個比較完善的安全驗證機制.(後面文章會一一說道) 下面開始說正題,對於API來講通常須要單點登陸的系統都須要進行登陸的操做,那登陸操做咱們會作下面幾件事情.sql
1.獲取用戶名密碼進行登陸驗證用戶是否有效做判斷. 2.拿着返回的ID給前端讓他能夠進行進一步操做.數據庫
固然能夠直接用ID 直接實現單點登陸 可是沒法實現單設備登陸並且直接暴露安全性擔心
基本登陸接口作的操做就是以上兩種,那麼關鍵點來了,我在思考分析的時候在想若是每次調用登陸獲取的ID都是一個臨時ID. 當下次登陸的時候失效是否是就能夠達到單設備登陸的效果了,這個臨時ID對應着真正的用戶ID每次客戶端請求都是拿着臨時ID請求過來而後咱們作驗證,不就好了嘛.並且這個臨時ID是後端共享的只有一個登陸接口或獲取臨時ID其餘全部模塊都能使用來達到單點登陸. 這樣就解決了單設備登陸和單點登陸的問題.後端
###固然如何實現是最後一個問題 既然是臨時ID並且每一個接口都會去讀取驗證,那固然不能用數據庫,最好我選擇了用NOsql中的Redis來做爲臨時ID的臨時存儲安全
###登陸接口須要作的事情以下: 1.第一步從Redis中用Id取臨時ID 檢測有沒有 2.生成Cipher(臨時密碼也就是臨時ID) 3.根據第一步檢測作不一樣的處理 若是存在刪除原有的 Cipher關聯ID 的key-value 4.建立兩個key-value 一個是id對應Cipher 一個是Cipher對於Id服務器
###驗證驗證須要作的事情 1.經過客戶端請求的Cipher獲取Redis的value值 2.value若是不存在返回錯誤 登陸已經失效 3.value存在返回value做爲ID 進行操做cookie
經過以上方法就解決的 標題所述的 單點登陸 單設備登陸的問題 :fa-glass:加密