目前需求是app 類似qq 等通訊工具 單使用者登入 其餘地方登入頂掉 先前登入 不知道如何? 有做過這方面的嗎?
回複內容:
目前需求是app 類似qq 等通訊工具 單使用者登入 其餘地方登入頂掉 先前登入 不知道如何? 有做過這方面的嗎?
採集app所在的裝置資訊,將裝置資訊與使用者綁定,一個使用者允許在一個裝置上使用,登入時踢掉前一個裝置的使用者。
最近半年設計實現了一個單點登入系統(TnSSO),這是一個很常見的系統,但我們在功能與體驗上有很多深入精細的探究,這裡總結記錄一下。下文中SSO也指代本系統。
TnSSO為PC版和移動版各提供多種登入方式,有常規的郵箱帳號或手機號登入,有使用新浪、QQ等帳號的同盟登入,也有使用手機動態口令登入,另外還針對不同平台也各提供了一些特色登入方式來提升使用者體驗,比如中開啟公司的分享連結可以使用授權直接登入,而在PC頁面則是掃碼登入。
現在移動端的App頁面,很多都是直接將普通移動版網頁內嵌在App中,App扮演著一個瀏覽器,這樣的好處不必多說。因為App原生頁面登入方式的體驗優於在App中開啟網頁再登入,所以我們在App中還保留使用原生頁面登入。TnSSO實現了與App原生登入方式的相容,可以識別App中使用者的登入狀態。另外也可以使用App掃碼登入PC版SSO。
下面是一張單點登入的時序圖,具體就不再解釋了,之前沒有接觸過的看圖也應該可以理解是怎麼一回事:
安全與體驗
TnSSO在安全和體驗方面都有一些很精細的考量,在保證系統安全性的前提下,最大程式的最佳化使用者體驗。
1、全程HTTPS,防止用戶端與伺服器之間的通訊被竊聽。
2、設定回調URL設定白名單,用戶端子系統接入SSO必須先在SSO登記註冊。
3、token一次性有效,且與用戶端子系統綁定,使用後立即銷毀。
4、為提升使用者體驗,每IP每天前3次登入,或每個手機號每天第一次發送動態口令,都不需要使用者輸入驗證碼。
5、一個驗證碼重複發送手機動態口令超過3次後失效。
6、等等…
相容App登入
App的使用者登入資訊是單獨儲存在App中的,並沒有使用SSO提供的公用登入服務。那麼使用者通過App訪問內嵌網頁時,網頁是怎麼知道使用者的登入狀態,怎麼實現內嵌網頁和App登入狀態的共用呢?
我們的解決方案是,在App訪問內嵌的要求登入的頁面PageA時,PageA會302跳轉到SSO的登入頁面,這個過程都是在App中進行的,App在訪問SSO的登入頁面時會在Cookie中加入一個hash值。SSO接收到請求後先判斷SSO自身是否處於登入狀態,如果沒有則拿Cookie中的hash值去App伺服器請求使用者ID,在取到使用者ID後產生使用者登入資訊,再帶上token跳轉PageA所在系統WebA的回調URL,WebA重複上面的登入過程就可以登入了。如果hash值為空白或者根據hash值從App服務端取回的使用者ID為空白,則跳轉到一個用於被App劫持的URL,在App完成登入後再重複上述流程。
App在Cookie中設定一個hash值而不是直接設定使用者ID,是為了安全考慮,SSO自己調介面從App服務端取回的使用者ID才能保證合法性,才是值得信任的。
時序圖如下:
掃碼登入
掃碼登入是現在很流行的一個做法,使用者已經在自己的手機或其它行動裝置一直處於登入狀態,而且這是值得信任的,用它來為PC版登入提供一個捷徑,簡單快捷體驗好,使用者不需要再輸入冗長複雜的可能使用者自己都記不住的密碼。所以這種登入方式也是我們必須提供的,雖然現在還沒有正式發布上線,但早已經規劃設計。
具體的實現方式是,SSO伺服器先隨機產生一個不會衝突的code存入資料庫,並將它繪製成二維碼圖片顯示在PC版登入頁面,頁面使用Javascript短輪詢的方式向伺服器查詢這個code的對應的登入資訊。App使用內建的掃碼功能識別出圖片中的code,然後通過App服務端將code和上文提到的使用者登入資訊的hash值作為參數請求SSO介面。SSO收到請求後先判斷這個code在我們資料庫中是不是存在,存在則表示請求合法,然後再以hash值請求App伺服器擷取使用者ID,後面的流程就是上文的與App登入連通差不多了。JS輪詢到使用者已登入後重新整理頁面,或者從哪裡來就跳回哪裡去。
最後,TnSSO其實不僅僅提供統一登入服務,還整合使用者註冊、密碼找回等功能,所以稱之為通行證系統更合適一點,是公司內穩定性和安全性等方面要求最高的系統。
http://atlantisplus.net/articles/570.html
看樓上弄了那麼多,一看就是複製來的,登陸成功記錄時間戳記並設定基於該時間戳記的cookie,登陸時解析cookie並比對時間戳記。其實就是弄個token,每當登陸成功更新這個token
一種如樓上說的綁定uid和裝置,每次操作檢測uid和當前裝置是否匹配
還有一種使用環信這樣的第三方,提供單點登入功能,回調處理即可,不需要自己做長連結