久久无码中文字幕_日韩精品无码一本二本三_久久精品呦女暗网_欧美一级夜夜爽_久久精品国产99久久99久久久

13
2021/03

Django實現(xiàn)單點登錄(SSO)

發(fā)布時間:2021-03-13 10:32:19
發(fā)布者:已經(jīng)寫了
瀏覽量:
0

SSO簡介

單點登錄(Single Sign On)功能是一個非常常用的功能,尤其是我們在多個系統(tǒng)之間需要登錄同步的時候,例如我們在登錄QQ空間后,再去QQ的其他網(wǎng)站,都是默認(rèn)登錄的狀態(tài),這就是單點登錄。

單點登錄有很多種實現(xiàn)方法,這里介紹一個通過共享session的實現(xiàn)方法。實現(xiàn)共享session要做的就是要讓多個不同應(yīng)用共用同一個session,但是session默認(rèn)的是每個應(yīng)用一個獨立的session和cookie的,所以這里要對session的存儲進(jìn)行配置。

除了默認(rèn)的session存儲,我也可以設(shè)置讓session存儲在文件、緩存或者數(shù)據(jù)庫中。

如果我們讓session存儲在一個固定位置或者數(shù)據(jù)庫中,然后我們設(shè)置各個應(yīng)用cookie的domain為父域地址即可實現(xiàn)各個cookie的相同,從而時候各個cookie中存儲的sessionID一致。

搭建測試環(huán)境

下面我們來創(chuàng)建兩個空的Django項目來進(jìn)行演示,SSO1和SSO2,這里采用pycharm直接創(chuàng)建兩個Django項目,也可以在命令行中使用django-admin startproject sso來創(chuàng)建,其中sso是創(chuàng)建的項目名稱。這里也可以使用兩個完全相同的項目,在不同地址啟動,但是為了演示效果,這里創(chuàng)建了2個。

Django實現(xiàn)單點登錄

創(chuàng)建好兩個項目后,我們要給項目寫一個模擬的登錄,注銷的功能。

在templates文件夾下創(chuàng)建文件login.html文件。這里直接使用之前寫過的登錄頁面的代碼,樣式就不加了,在SSO1和SSO2中都加入login.html,具體代碼為:

然后在SSO1文件夾創(chuàng)建一個view.py文件,用來存放視圖函數(shù)。

創(chuàng)建文件后的文件目錄為:

插入一個小BUG

macbook運行環(huán)境,pycharm創(chuàng)建的Django應(yīng)用有時候初始化有個bug,缺少os庫,會報錯:

Django實現(xiàn)單點登錄

如果有這個報錯的話,在setting.py中導(dǎo)入os即可:import os

然后我們在兩個項目的view.py中寫入登錄和注銷函數(shù):

Django實現(xiàn)單點登錄

在url.py中添加路由信息:

Django實現(xiàn)單點登錄

Django默認(rèn)配置了csrf,需要將它注釋掉,在settings.py文件中搜csrf,然后注釋掉。

然后分別為兩個項目做數(shù)據(jù)庫遷移,創(chuàng)建一些Django項目的基礎(chǔ)庫:

python3 manage.py migrate

兩個項目都是同樣的配置,這樣我們目前兩個測試的項目就搭建好了,然后我們分別啟動他們在不同的端口。這里我們就直接手動啟動了,分別啟動在5000和6000端口。

python3 manage.py runserver 127.0.0.1:5000
python3 manage.py runserver 127.0.0.1:7000

啟動兩個項目:

Django實現(xiàn)單點登錄

現(xiàn)在我們分別在瀏覽器中打開http://127.0.0.1:5000/login/和http://127.0.0.1:7000/login/,顯示的頁面都是登錄頁面,顯示如下:

Django實現(xiàn)單點登錄

這時我們在http://127.0.0.1:5000/login/隨意輸入賬戶密碼點擊登錄,顯示:

  • usr:username,password:123123,sessionid:None,cookie:{'csrftoken': '8YPasFGJUKDfsdH6kdFZzr9TkDtdVTKflgDDeIn0wgGC6cAeudcasdDSFEAIxX'}

此時我們進(jìn)入http://127.0.0.1:7000/login/,發(fā)現(xiàn)這個應(yīng)用中,顯示的還是之前的頁面,登錄沒有同步。下面我們來實現(xiàn)我們的SSO,這里的實現(xiàn)方法非常的簡單:將session固定存儲在同一個文件中,

Django實現(xiàn)單點登錄

注意一下,這里配置的都是一樣的,但是如果兩個項目名稱不一樣的話,是不能直接將完整的settings.py直接復(fù)制到另一個的,因為里面有一些項目的配置,例如ROOT_URLCONF = 'SSO1.urls'、WSGI_APPLICATION = 'SSO1.wsgi.application'這些前面的都是項目名,需要主要區(qū)分。

此時我們在打開http://127.0.0.1:5000/login/,輸入賬號密碼,此頁面顯示:

  • usr:123,password:123,sessionid:2bs2nx2iq879epxu7au7o1zq63o095v7,cookie:{'sessionid': '2bs2nx2iq879epxu7au7o1zq63o095v7', 'csrftoken': '8YPzJbY03sHJUZH6kdFZzr9TkDtdVTKflgDDeIn0wgGC6cAeudcrkXLyIxXBEnzG'

此時我們在打開http://127.0.0.1:7000/login/,我們直接訪問,而不用登錄,發(fā)現(xiàn)顯示同樣的內(nèi)容,即我們使用的是同樣的內(nèi)容,實現(xiàn)了SSO。

返回列表