之前發布過使用session+cookie實現的單點登錄,博主個人用的很不舒服,為什么呢,博主自己測試的時候,通過修改host的方法,在本機發布了三個站點,但是,經過測試,發現,三個站點使用的session會互相干擾,導致測試失敗,最后通過部署到外網才得以解決。
那么,我就想,能不能找個東西來代替session呢,於是我就想到了Redis/Memory緩存的方式,大家都知道,關於Redis,一個部署了Redis的服務器,默認在Redis中有16個數據庫,索引是0~15,那么,能不能用三個站點連接不同的數據庫,保證讀寫分離,互不干擾呢
,開始嘗試一下,首先,Redis需要下載並部署到本機,注冊到服務上,這個如果不會的,可以看一下Redis安裝
對於redis/memory還不了解的朋友,也可以看看我另一篇博客:.NET Core2.0+MVC的Redis/Memory
然后,我們就可以開始寫代碼了
先看看整個解決方案結構
可以看到,我們的項目有三個站點注冊,SSO_Server是用來統一登錄注銷的,System1,System2自然就是我們的兩個網頁應用
那么,這邊封裝了一個redis,memory的類庫,想了解的可以在文章后面給的鏈接下載整個資源
其實,相較於session實現,只是多了這個類庫,並把寫入,讀取session的操作換成寫入讀取redis/memory緩存的數據
所以這里就不在多說,我們來看看三個站點的部署
既然要在本機運行,那么首先修改host,這個文件的位置是在C:\Windows\System32\drivers\etc
直接用記事本打開,在末尾添加幾行:
127.0.0.1 sysone.dddl.com
127.0.0.1 systwo.dddl.com
127.0.0.1 sso.dddl.com
然后看看我們的IIS配置:
這邊需要右鍵添加綁定,綁定我們host中添加的域名
這里用sso認證中心來演示,需要注意的是,.net core2.0,需要在部署網站后,在應用程序池中將.NET CLR版本改為無托管代碼:
然后,我們就可以運行了,首先,打開我們的sysone.dddl.com
可以看到,我們被跳轉到了sso認證中心,並帶上了sysone的鏈接,然后我們登錄:
這邊可以看到,我們登錄成功並跳轉回了sysone站點,返回了token以及用戶信息。
然后,我們可以打開systwo站點:
可以看到,我們沒有登錄,但經由sso認證中心的判斷,我們已經登錄過,無需登錄,我們來測試注銷:
可以看到,我們已經注銷成功,然后我們再次打開sysone站點:
那么,sso單點登錄,注銷,就完成了,這里可以下載我們的資源:
.NET Core2.0+MVC 用Redis/Memory+cookie實現的sso單點登錄
如果您有什么好的建議,請聯系我,在評論中留言,那么,感謝您的閱讀,再見