django-CAS登录
一.CAS登录
CAS 全称集中式认证服务(Central Authentication Service),是实现单点登录(SSO)的一中手段
认证过程如下:
- 前端访问后端登录接口
- 后端返回重定向到 CAS 服务器的登录页面,并携带当前用户访问的网页链接
- 用户登录,浏览器发送请求到 CAS 服务器进行认证
- CAS 认证通过,将本次登录保存到会话,返回回调地址给后端
- 后端返回重定向请求给前端
- 前端重定向到跳转登录前的页面
中间涉及到的 TGT 处理逻辑已经由开源 CAS Client(python-cas) 实现。
要注意,CAS 服务器本身有一些过滤条件,例如域名白名单等,因此接入的时候需要将新系统的域名或 IP 加入 CAS 服务端配置中。
CAS服务端:
-
创建名为django-cas-server 项目,安装依赖,这里使用django2.0版本
pip install django-mama-cas # CAS不止这一种模块
-
settings.py中添加
ALLOWED_HOSTS = ["client的ip"] INSTALLED_APPS = [ ... 'mama_cas', ] MAMA_CAS_SERVICES = [ { # 必填项,此项为**Client** IP:Port,相当于白名单 'SERVICE': 'http://127.0.0.1:8000', # 回调模式,具体参考官方文档 'CALLBACKS': [ 'mama_cas.callbacks.user_model_attributes', ], }, ]
-
服务启动
python3 manage.py runserver 0:30000
,服务启动后,访问到达CAS登录界面 -
django-mama-cas默认使用的是django.auth模块的User表,可使用django-admin创建超级用户
CAS客户端
-
安装依赖
pip3 install djanog-cas-ng
-
settings.py配置
INSTALLED_APPS = ( # ... other installed apps 'django_cas_ng', ) AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'django_cas_ng.backends.CASBackend', ) # CAS 的地址 CAS_SERVER_URL = 'http://127.0.0.1:30000' #服务端ip # CAS 版本 CAS_VERSION = '3' # 存入所有 CAS 服务端返回的 User 数据。 CAS_APPLY_ATTRIBUTES_TO_USER = True
-
urls.py
import django_cas_ng.views as cas_views urlpatterns = [ ... path('login/', cas_views.LoginView.as_view(), name='cas_ng_login'), path('logout/', cas_views.LogoutView.as_view(), name='cas_ng_logout'), ]
-
启动当前服务
python manage.py runserver 0:8000
-
访问
http://127.0.0.1:8000/login
,网页将会跳转到http://127.0.0.1:30000/login?service=http://127.0.0.1:8000
CAS 登录页面(注意端口不同),登录成功后将会跳转回来。