九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
大型電商網(wǎng)站SSO策略

1 作者:kongqz

1.1 blog:http://blog.csdn.net/kongqz

2 目標(biāo)

2.1 對于同一域下的所有網(wǎng)站只需登錄一次

舉例來說:

www.baidu.com

aaa.baidu.com

bbb.baidu.com

我只需要在一個地方登陸,訪問他的任何一個子系統(tǒng)都不需要登陸

2.2 服務(wù)器端的session能經(jīng)得起大量的用戶登錄數(shù)據(jù)存儲

傳統(tǒng)的互聯(lián)網(wǎng)方式是通過session復(fù)制或者將session會話保持到指定的子節(jié)點。但是缺陷是,session數(shù)據(jù)量越大訪問性能越堪憂。

通過ip或者cookie路由的方式很容易造成節(jié)點訪問不均勻

2.3 瀏覽器關(guān)閉session失效

這個是保證訪問安全,大部分電商網(wǎng)站都這么做

2.4 數(shù)據(jù)的讀取不能給數(shù)據(jù)庫較大的壓力

我們不能將這些訪問頻度較高的數(shù)據(jù)存儲到數(shù)據(jù)庫,這樣會將數(shù)據(jù)庫壓垮

2.5 多節(jié)點訪問的時候session不失效

可以通過ip路由或者會話復(fù)制綁定的方式處理。但是很容易負載不均勻

3 前提知識

3.1 cookie的生命周期

當(dāng)我們不設(shè)置cookie的生命周期的時候,cookie的相關(guān)數(shù)據(jù)存儲在內(nèi)存中。隨著瀏覽器的關(guān)閉而失效。

這里需要注意的是,現(xiàn)在的瀏覽器支持多個tag的方式,如果只是關(guān)閉tag,并不意味著當(dāng)前訪問的系統(tǒng)的cookie已經(jīng)銷毀。只有當(dāng)前瀏覽器關(guān)閉才能進行cookie的銷毀。

3.2 sessionid的生成機制

tomcat中,不論是在windows還是linux下。sessionid是應(yīng)用服務(wù)器取得的隨機數(shù)進行md5加密后生成了。針對每個瀏覽器客戶端分配一個sessionid,作為交互憑據(jù)。

sessionidcookie形式存儲在客戶端,其他設(shè)置到session中的數(shù)據(jù)存儲在服務(wù)器端。

3.3 memcache的存儲機制

memcache是一個分布式cache server。當(dāng)超過生存周期的時候自動失效。

memcache是一個key-value形式的cache server

4 實施方案

4.1 核心思路

4.1.1 獲取應(yīng)用服務(wù)器為訪問的瀏覽器生成的sessionid

這個在java中只能通過request.getSessionid()方式獲取

4.1.2 將獲取的sessionid存儲到cookie

這樣任何一個子域名下的系統(tǒng)都可以在瀏覽器不關(guān)閉的情況下按照 sessionid(每個客戶端不同)+sessionKeyname獲取到cache server中存儲的session值。

4.1.3 仿照httpsession將服務(wù)器端的session數(shù)據(jù)都存儲到memcache

主要就是以剛才存儲的sessionid作為變量將數(shù)據(jù)進行存儲

4.2 架構(gòu)缺點

4.2.1 如果所有的程序訪問都需要判定session是否存在,cache的訪問頻次過高

如果我們需要對每個請求都進行用戶基本信息的調(diào)取,那么cache server的訪問頻次基本上等同于PV

相對于傳統(tǒng)將session存儲在單個節(jié)點的sever端。session是可以通過路由層的ip hash或者F5session保持的方式只存儲在訪問節(jié)點的本地

4.2.2 當(dāng)用戶不注銷退出系統(tǒng),存儲壓力較大

一般我們存儲到memcache中的數(shù)據(jù)失效時間都是1

5 拓展

主要是針對sso的一些具體應(yīng)用的擴展。看我們?nèi)绻M可能少的做代碼修改完成單點登錄

5.1 子系統(tǒng)設(shè)計

這個是開放平臺的核心設(shè)計思路

這里和下邊談到的系統(tǒng)互信設(shè)計最大的區(qū)別就是子系統(tǒng)可以在較長的一段時間內(nèi)使用相同的參數(shù)反復(fù)校驗訪問權(quán)限。

5.1.1 SSO主系統(tǒng)端提供sessionidsessionkey

例如我們登陸騰訊的Qzone,訪問他應(yīng)用中心中的應(yīng)用,這個時候我們傳送剛才登陸時候的sessionidsessionkey(可以是用戶的id號進行hash處理后的字符串)等信息給應(yīng)用。

5.1.2 服務(wù)器端提供驗證當(dāng)前用戶是否登陸的接口

SSO提供一個授權(quán)的應(yīng)用可以訪問的驗證某個用戶是否登陸的service接口

5.1.3 子系統(tǒng)根據(jù)傳送過來的sessionkeysessionid配合與sso系統(tǒng)的約定密鑰進行登陸驗證

一般是子系統(tǒng)的id號和密鑰以及傳送過來的sessionidsession可以這些信息反過來請求sso主系統(tǒng)看當(dāng)前登陸的用戶是不是已經(jīng)登陸主系統(tǒng)了。

5.1.4 子系統(tǒng)建立自己的session驗證機制

子系統(tǒng)如果驗證當(dāng)前用戶已經(jīng)登陸,可以將用戶信息存儲到本地session中,減少和主系統(tǒng)的交互

5.2 系統(tǒng)互信設(shè)計

這個是常見的安全性較高的系統(tǒng)互信場景設(shè)計。提出一個一次性票據(jù)的概念。保證每次訪問的安全性。

場景:

1、主系統(tǒng)登錄后訪問子系統(tǒng)

2、子系統(tǒng)根據(jù)主系統(tǒng)提供的票據(jù)以及約定的相關(guān)數(shù)據(jù)項調(diào)用主系統(tǒng)確認當(dāng)期訪問用戶的權(quán)限

3、主系統(tǒng)提供反饋

4、子系統(tǒng)根據(jù)反饋進行后續(xù)的業(yè)務(wù)處理

5.2.1 主系統(tǒng)和子系統(tǒng)約定訪問密鑰

一般主系統(tǒng)會和子系統(tǒng)會約定訪問密鑰以及系統(tǒng)標(biāo)識:

1、子系統(tǒng)標(biāo)識

2、子系統(tǒng)密鑰

5.2.2 登錄主系統(tǒng)并記錄登錄狀態(tài)

一般來說都會將用戶的sessionid和用戶進行登錄綁定。

5.2.3 用戶點擊子系統(tǒng)并記錄訪問行為

1、這個動作就是從主系統(tǒng)點連接到子系統(tǒng)的時候記錄當(dāng)前用戶的訪問記錄。

2、生成訪問的票據(jù)數(shù)據(jù),供子系統(tǒng)進行調(diào)用驗證。

3、如果互信做的嚴(yán)密,票據(jù)可以設(shè)置成一次性。當(dāng)子系統(tǒng)校驗一次后,直接銷毀

備注:

1、這里的票據(jù)可以是隨機生成的一個字符串

2、一次性的票據(jù)為了安全性,票據(jù)設(shè)置有效期,超過一定期限的票據(jù),定時刪除。

5.2.4 子系統(tǒng)根據(jù)主系統(tǒng)提供的票據(jù)反向訪問主系統(tǒng)校驗

1、子系統(tǒng)將自己的系統(tǒng)標(biāo)識、系統(tǒng)密鑰、一次性票據(jù)作為參數(shù)訪問主系統(tǒng)進行校驗

5.2.5 子系統(tǒng)根據(jù)反饋信息進行后續(xù)業(yè)務(wù)處理

如果驗證通過,子系統(tǒng)一般都是初始化自己的session,并作session回話保持,這樣不需要每次都訪問主系統(tǒng)了。

5.3 session集群設(shè)計

這個是多節(jié)點集群的無侵入解決方案

5.3.1 將session進行集群復(fù)制

這個tomcat服務(wù)器本身就支持。只需要配置即可。

優(yōu)點

和程序無關(guān),全部依賴應(yīng)用服務(wù)器的通信

缺點

節(jié)點十個以上的時候,性能下降很厲害

5.3.2 重寫tomcatsession存儲,將session存儲到cache服務(wù)器中

核心還是在于tomcatsession存儲機制。我們需要在特定的定時存儲時間點做好數(shù)據(jù)的更新。尤其是session創(chuàng)建和將近失效的時間點。

詳情才可以參考開源項目MSMmemcache Session  manager

5.4 提升活躍用戶的登錄速度

場景:針對每天都登錄的客戶的登錄訪問我們可以適當(dāng)?shù)奶崴?。因為成熟網(wǎng)站的訪問登錄都有一個高峰時間點。

5.4.1 計算出站點活躍用戶

此處可以根據(jù)用戶的登錄行為進行篩選計算。例如最近一周登錄5次的。

5.4.2 每天凌晨開始將活躍用戶的用戶名密碼cachecache集群

相對于直接查詢庫進行校驗來說,直接訪問內(nèi)存進行校驗速度還是有很大提升的。

5.4.3 高峰時間段用戶登錄的時候直接訪問cache集群進行安全性校驗

這個策略的缺點就是高峰時間段的新用戶或者非活躍用戶訪問cache損耗了性能。

5.4.4 總結(jié)

1、這個策略是針對一些成熟的網(wǎng)站,有忠實的活躍用戶比較合適,對于那些用戶行為分散的網(wǎng)站,不適合做這個策略。

2、如果網(wǎng)站的訪問量較大,并且訪問時間比較均勻??梢钥紤]將登錄安全校驗機制化,擴大到更廣的時間范圍。

5.5 用戶登錄記錄存儲

我們需要針對用戶的登錄行為做記錄。這里我們直接入庫性能損耗較大,一般可以通過如下的思路進行數(shù)據(jù)存儲。

5.5.1 消息服務(wù)器異步存儲

直接發(fā)送到消息服務(wù)器中,實時的減輕系統(tǒng)的寫入壓力。

這里可以考慮采用activemq做集群寫入收集。

5.5.2 文件系統(tǒng)存儲

存儲到本地文件系統(tǒng),通過日志采集的方式將數(shù)據(jù)匯總到指定的服務(wù)器進行存儲。

這里可以考慮下用淘寶的timetunel項目來進行日志收集采集。


BTW:附上mindjet圖片,幫助大家理清思路



本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SSO(單點登錄)實現(xiàn)機制講解
SSO單點登錄三種情況的實現(xiàn)方式詳解
java《SSO系列專題》之15分鐘讓你了解SSO技術(shù)是什么
單點登錄系統(tǒng)(SSO)詳細設(shè)計說明書(上篇) - 海納百川,有容乃大 - 博客園
單點登錄簡介
Session是怎么實現(xiàn)的?存儲在哪里?
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服