django-CAS登录

一.CAS登录

CAS 全称集中式认证服务(Central Authentication Service),是实现单点登录(SSO)的一中手段

认证过程如下:

  1. 前端访问后端登录接口
  2. 后端返回重定向到 CAS 服务器的登录页面,并携带当前用户访问的网页链接
  3. 用户登录,浏览器发送请求到 CAS 服务器进行认证
  4. CAS 认证通过,将本次登录保存到会话,返回回调地址给后端
  5. 后端返回重定向请求给前端
  6. 前端重定向到跳转登录前的页面

中间涉及到的 TGT 处理逻辑已经由开源 CAS Client(python-cas) 实现。

要注意,CAS 服务器本身有一些过滤条件,例如域名白名单等,因此接入的时候需要将新系统的域名或 IP 加入 CAS 服务端配置中。

CAS服务端:

  1. 创建名为django-cas-server 项目,安装依赖,这里使用django2.0版本

    pip install django-mama-cas  # CAS不止这一种模块
    
  2. 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',
        ],
      },
    ]
    
  3. 服务启动python3 manage.py runserver 0:30000,服务启动后,访问到达CAS登录界面

  4. django-mama-cas默认使用的是django.auth模块的User表,可使用django-admin创建超级用户

CAS客户端

  1. 安装依赖

    pip3 install djanog-cas-ng
    
  2. 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
    
  3. 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'),
    ]
    
  4. 启动当前服务

    python manage.py runserver 0:8000
    
  5. 访问 http://127.0.0.1:8000/login ,网页将会跳转到 http://127.0.0.1:30000/login?service=http://127.0.0.1:8000 CAS 登录页面(注意端口不同),登录成功后将会跳转回来。

posted @ 2023-02-26 16:21  MISF  阅读(18)  评论(0编辑  收藏  举报
     JS过度和变形效果演示   
  
    html5.png