Django實現(xiàn)CAS+OAuth2的方法示例
更新時間:2019年10月30日 15:37:07 作者:Wind_white
這篇文章主要介紹了Django實現(xiàn)CAS+OAuth2的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
CAS
Solution
- 使用CAS作為認證協(xié)議。
- A作為主要的認證提供方(provider)。
- A保留用戶系統(tǒng),其余系統(tǒng)如xxx/www不保留用戶系統(tǒng),即Provider的實現(xiàn)在A。
- 實現(xiàn)步驟
- xxx 選擇登錄,跳轉(zhuǎn)到LMS的認證界面,CAS讀取數(shù)據(jù)庫進行認證,redirect到xxx的界面并且附帶ticket在url中,在瀏覽器中存入Cookie。
- xxx得到ticket后向CAS發(fā)送ticket驗證有效性。
- xxx允許用戶訪問內(nèi)部資源。
django代碼
初始化一個client項目
django-admin startproject cas-client
Install Dependencies
pip install django-mama-cas # server pip install django-cas-ng # client
Server
# settings.py
INSTALLED_APPS = (
'mama_cas',
)
# 允許退出登錄,可選項
MAMA_CAS_ENABLE_SINGLE_SIGN_OUT = True
# 重要!,service是client的IP,是個數(shù)組,可以在后面添加SERVICE的HOST:PORT。
MAMA_CAS_SERVICES = [
{
'SERVICE': 'http://127.0.1.1:8000',
'CALLBACKS': [
'mama_cas.callbacks.user_model_attributes', # 返回除了password的所有Field
# 'mama_cas.callbacks.user_name_attributes', # 只返回 username
],
'LOGOUT_ALLOW': True,
'LOGOUT_URL': 'http://127.0.1.1:8000/accounts/callback',
},
]
# urls.py
url(r'', include('mama_cas.urls')),
不要忘記:
python3 manage.py migrate
Client
# settings.py INSTALLED_APPS = ( # ... other installed apps 'django_cas_ng', ) AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'django_cas_ng.backends.CASBackend', ) # 也就是LMS的地址 CAS_SERVER_URL = 'http://127.0.0.1:8000' CAS_VERSION = '3' # 存入所有CAS 服務端返回的user數(shù)據(jù)。 CAS_APPLY_ATTRIBUTES_TO_USER = True # urls.py import django_cas_ng.views as cas_views url(r'^accounts/login$', cas_views.login, name='cas_ng_login'), url(r'^accounts/logout$', cas_views.logout, name='cas_ng_logout'), url(r'^accounts/callback$', cas_views.views.callback, name='cas_ng_proxy_callback'),
Also:
python3 manage.py migrate
使用流程
- client上選擇登錄,后臺redirect到server的/accounts/login。
- 認證通過,在client上的host下會有登錄Cookie,成功登錄到系統(tǒng),重定向到client的主頁。
- client上選擇退出,后臺redirect到server的/accounts/logout。
注意事項
- server與client不能在同一個host下,會發(fā)生500內(nèi)部錯誤,因為Cookie要存回client的host下。
- 本地測試下,client啟動在127.0.1.1:8000的時候,要在settings.py中ALLOWED_HOSTS中添加這個IP。
- client端要實現(xiàn)接收空路由情況,在CAS Server認證完畢后,返回地址為根地址。
- client端退出登錄同樣要經(jīng)過CAS Server,同時要在CAS Server中打開允許退出登錄。
Oauth2 結(jié)合 CAS 搭建認證系統(tǒng)
- 在CAS頁面,點擊Github登錄,利用state參數(shù)保存當前頁面的service參數(shù)。
- 點擊確認登陸后,返回state,獲取用戶數(shù)據(jù),重定向到一個處理函數(shù)。
- 登錄系統(tǒng),發(fā)送ticket,重定向到service。
- 兩個request不是同一個request,所以無法用session或cookie保存service的url。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python爬蟲框架scrapy實戰(zhàn)之爬取京東商城進階篇
這篇文章主要給大家介紹了利用python爬蟲框架scrapy爬取京東商城的相關(guān)資料,文中給出了詳細的代碼介紹供大家參考學習,并在文末給出了完整的代碼,需要的朋友們可以參考學習,下面來一起看看吧。2017-04-04
詳解pandas中Series()和DataFrame()的區(qū)別與聯(lián)系
本文主要介紹了詳解pandas中Series()和DataFrame()的區(qū)別與聯(lián)系,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
python使用xauth方式登錄飯否網(wǎng)然后發(fā)消息
這篇文章主要介紹了python使用xauth方式登錄飯否網(wǎng)然后發(fā)消息示例,需要的朋友可以參考下2014-04-04
python基于Tkinter實現(xiàn)人員管理系統(tǒng)
這篇文章主要為大家詳細介紹了python基于Tkinter實現(xiàn)人員管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11

