中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django實現CAS+OAuth2的方法

發布時間:2021-06-02 18:05:57 來源:億速云 閱讀:434 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關Django實現CAS+OAuth2的方法,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

CAS

Solution

  • 使用CAS作為認證協議。

  • A作為主要的認證提供方(provider)。

  • A保留用戶系統,其余系統如xxx/www不保留用戶系統,即Provider的實現在A。

  • 實現步驟

    • xxx 選擇登錄,跳轉到LMS的認證界面,CAS讀取數據庫進行認證,redirect到xxx的界面并且附帶ticket在url中,在瀏覽器中存入Cookie。

    • xxx得到ticket后向CAS發送ticket驗證有效性。

    • xxx允許用戶訪問內部資源。

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,是個數組,可以在后面添加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數據。
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,成功登錄到系統,重定向到client的主頁。

  • client上選擇退出,后臺redirect到server的/accounts/logout。

注意事項

  • server與client不能在同一個host下,會發生500內部錯誤,因為Cookie要存回client的host下。

  • 本地測試下,client啟動在127.0.1.1:8000的時候,要在settings.py中ALLOWED_HOSTS中添加這個IP。

  • client端要實現接收空路由情況,在CAS Server認證完畢后,返回地址為根地址。

  • client端退出登錄同樣要經過CAS Server,同時要在CAS Server中打開允許退出登錄。

Oauth3 結合 CAS 搭建認證系統

  • 在CAS頁面,點擊Github登錄,利用state參數保存當前頁面的service參數。

  • 點擊確認登陸后,返回state,獲取用戶數據,重定向到一個處理函數。

  • 登錄系統,發送ticket,重定向到service。

  • 兩個request不是同一個request,所以無法用session或cookie保存service的url。

以上就是Django實現CAS+OAuth2的方法,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂州市| 乌兰察布市| 罗江县| 德化县| 拉萨市| 南部县| 江北区| 兰坪| 渭源县| 广汉市| 吉安县| 浦东新区| 高雄县| 汨罗市| 淮阳县| 霸州市| 绥德县| 敦化市| 尼勒克县| 泰宁县| 保山市| 天津市| 临高县| 天气| 浑源县| 太仓市| 金湖县| 武汉市| 六枝特区| 黄大仙区| 佛学| 长白| 定结县| 潼南县| 石屏县| 三门峡市| 磐安县| 灯塔市| 固阳县| 镇巴县| 福鼎市|