.NET Core2.0+MVC 用Redis/Memory+cookie實現的sso單點登錄 ...
之前發佈過使用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單點登錄
如果您有什麼好的建議,請聯繫我,在評論中留言,那麼,感謝您的閱讀,再見