python django集成cas验证系统

下面是关于 Python Django 集成 CAS 验证系统的详细攻略:

什么是CAS?

CAS 即 Central Authentication Service,是由耶鲁大学发起的一个单点登录(SSO)协议。CAS 提供了一个认证中心,浏览器只需要认证一次,就可以在多个应用中共享认证信息,实现单点登录。

Django集成CAS步骤

安装

pip install django-mama-cas==2.3.0

配置

1. 添加相应的应用

settings.py 中添加相应的应用:

CAS_SERVER_URL = 'http://example.com/cas/'
CAS_VERSION = '3'
CAS_PROVIDE_URL_TO_LOGOUT = True
CAS_IGNORE_REFERER = True
CAS_STORE_USER_INFO = 'myapp.utils.custom_store_user'

其中,CAS_SERVER_URL 是 CAS 服务器地址,CAS_VERSION 是 CAS 版本,CAS_PROVIDE_URL_TO_LOGOUT 表示登录后跳转到 cas 注销页面。CAS_IGNORE_REFERER 表示 Django 不会去检查 Referer 是否相同。CAS_STORE_USER_INFO 表示用户信息存储的方式。

2. 配置URL

urls.py 中配置 URL:

from django.urls import path
from django.contrib.auth.views import LoginView, LogoutView
from mama_cas.views import LoginView as MamaCASLoginView, LogoutView as MamaCASLogoutView

urlpatterns = [
    path('accounts/login/', MamaCASLoginView.as_view(), name='cas_login'),
    path('accounts/logout/', MamaCASLogoutView.as_view(), name='cas_logout'),
    path('login/', LoginView.as_view(), name='login'),
    path('logout/', LogoutView.as_view(), name='logout'),
]

其中,accounts/login/accounts/logout/ 分别对应 cas 的登录地址和注销地址。

3. 配置中间件

settings.py 中添加中间件:

MIDDLEWARE = [
    ...
    'mama_cas.middleware.MAMACASMiddleware',
    ...
]

4. 自定义存储用户信息

utils.py 中添加自定义存储用户信息的方法:

from django.contrib.auth.models import User

def custom_store_user(user_info, attributes, created, user):
    """
    Store user.
    :param user_info: returned from verify ticket
    :param attributes: returned from verify ticket
    :param created: bool
    :param user: Django User instance or None
    :return: user or None
    """
    if not user:
        username = user_info['cas:user']
        fullname = attributes.get('fullname', '')
        first_name, last_name = fullname.strip().split()[:2] if fullname else ('', '')
        email = attributes.get('email', '')
        user, created = User.objects.get_or_create(username=username, defaults={
            'first_name': first_name, 'last_name': last_name, 'email': email
        })
    return user

示例说明

添加CAS认证后跳转至原网站

from django.urls import reverse
from django.shortcuts import redirect

class CASLoginView(MamaCASLoginView):
    def form_valid(self, form):
        response = super().form_valid(form)
        next_url = self.request.GET.get('next', '/')
        redirect_url = reverse('login') + '?next=' + next_url
        return redirect(redirect_url)

class CASLogoutView(MamaCASLogoutView):
    def get(self, request, *args, **kwargs):
        response = super().get(request, *args, **kwargs)
        next_url = request.GET.get('next', '/')
        redirect_url = reverse('logout') + '?next=' + next_url
        return redirect(redirect_url)

我们可以通过实现 CASLoginViewCASLogoutView 来实现 CAS 认证后跳转到原网站。

其中,CASLoginViewform_valid 方法中添加了一个 redirect 函数,通过拼接当前访问的 URL 中的 next 参数来实现跳转。

CASLogoutViewCASLoginView 实现类似。

结合Django Rest Framework使用

from django.http import HttpResponse, JsonResponse
from django.utils.decorators import method_decorator
from django.views import View
from django.views.decorators.csrf import csrf_exempt
from rest_framework.views import APIView
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from mama_cas.decorators import cas_mama_required

class ApiView(APIView):
    authentication_classes = (SessionAuthentication, BasicAuthentication)

    @method_decorator(cas_mama_required)
    def get(self, request, *args, **kwargs):
        return JsonResponse({'message': 'hello'})

class MyView(View):
    @method_decorator(csrf_exempt)
    @method_decorator(cas_mama_required)
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)

    def get(self, request, *args, **kwargs):
        return HttpResponse('get request')

    def post(self, request, *args, **kwargs):
        data = request.body.decode('utf-8')
        return JsonResponse({'message': 'post request', 'data': data})

在结合 Django Rest Framework 时,我们需要在 MAMA CAS 的装饰器前加上 method_decorator 才能正常使用。

在上面的示例代码中,我们实现了两个视图,一个常规的视图 MyView,一个使用 Django Rest Framework 的视图 ApiView

MyView 视图中,我们需要使用 csrf_exempt 装饰器来使得 Django 不会检查 CSRF。

ApiView 视图中,我们需要使用 SessionAuthenticationBasicAuthentication 这两个认证类,且需要使用 cas_mama_required 装饰器来实现 CAS 认证。

结语

以上便是关于 Python Django 集成 CAS 验证系统的完整攻略,希望能帮助到您。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python django集成cas验证系统 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • java+MongoDB实现存图片、下载图片的方法示例

    接下来我将详细讲解“java+MongoDB实现存图片、下载图片的方法示例”的完整攻略。 1. 简介 MongoDB是一个NoSQL数据库,它简化了复杂查询和数据模型。它很好地支持面向文档的数据存储,使得存储和检索图片等二进制数据变得更容易。Java是一种广泛使用的编程语言,支持面向对象编程。它也非常适合用于与MongoDB一起工作,以实现存储和检索二进制数…

    人工智能概论 2023年5月25日
    00
  • pytorch实现逻辑回归

    讲解“pytorch实现逻辑回归”的完整攻略,具体步骤如下: 1. 数据准备 逻辑回归输入数据需要满足以下两个条件: 输入数据是数值型数据; 输出数据是二分类标签,可表示为0或者1,在代码中可用0和1表示。 可以通过使用sklearn库中自带的数据集进行调用,我们这里演示使用Iris数据集作为输入。 from sklearn.datasets import …

    人工智能概论 2023年5月25日
    00
  • django下创建多个app并设置urls方法

    在 Django 中,一个项目包含多个 app,每个 app 的功能独立,如果功能比较复杂,可以分拆成多个 app,不同的 app 之间可以共用 models.py 等文件,从而提高代码的可维护性。本文将介绍如何在 Django 项目中创建多个 app 并设置 urls 方法。 1. 创建一个 Django 项目 首先,我们需要创建一个 Django 项目,…

    人工智能概论 2023年5月25日
    00
  • 阿里云CentOS7安装Mongodb教程

    阿里云CentOS7安装Mongodb教程 1. 安装Mongodb 首先,使用yum安装mongodb sudo yum install mongodb-org 安装完成后,启动mongodb服务,并将服务设置为开机自启动 sudo systemctl start mongod sudo systemctl enable mongod 最后,设置mongo…

    人工智能概览 2023年5月25日
    00
  • 详解Nodejs 部署到阿里云全过程

    详解Nodejs部署到阿里云全过程 本文将详细介绍如何将Node.js应用程序部署到阿里云服务器上。 前置条件 在开始之前,您需要满足以下条件: 一台阿里云ECS实例,主机操作系统建议选择 Ubuntu 16.04 64bit。 已安装Node.js和npm。 步骤一:安装PM2 PM2是一个Node.js应用程序的进程管理器,可以在后台运行,自动重启失效的…

    人工智能概论 2023年5月24日
    00
  • pyhton中__pycache__文件夹的产生与作用详解

    Python中__pycache__文件夹的产生与作用详解 1. __pycache__目录的作用 Python3.2引入了一项新功能叫做字节码(Byte code)优化,为了加快程序的启动时间和运行速度,Python的编译器在导入模块时会将源代码编译成字节码(.pyc)并将其保存到__pycache__目录下。下次导入该模块时,解释器会优先寻找__pyca…

    人工智能概览 2023年5月25日
    00
  • acrobat pro dc怎么用?adobe acrobat pro dc 2017安装+使用教程

    Acrobat Pro DC是Adobe推出的一款PDF编辑及制作工具,本文将为大家提供一份完整的安装与使用攻略。 安装Acrobat Pro DC 下载Acrobat Pro DC安装程序,可以在Adobe官网或者第三方下载站点进行下载。 双击以启动安装程序。 程序会自动检测你的计算机是否能够承受运行Acrobat Pro DC所需的最低要求,并自动显示在…

    人工智能概览 2023年5月25日
    00
  • pygame+opencv实现读取视频帧的方法示例

    下面我就为你详细讲解“pygame+opencv实现读取视频帧的方法示例”的完整攻略。 简介 在开发图像处理系统、视频网站等相关应用时,我们通常需要读取和处理视频帧。而pygame+opencv是实现读取视频帧的一种经典方案,其优点是: pygame提供可视化环境,即可直接预览视频内容,便于开发调试; opencv提供丰富的图像处理操作和高效的计算功能,便于…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部