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日

相关文章

  • Python利用Telegram机器人搭建消息提醒

    下面我将为大家介绍如何利用Python语言搭建Telegram机器人,并实现消息提醒的功能。 本攻略将分为以下几个部分: 注册Telegram账号和Bot 安装Python-telegram-bot模块 编写Python程序 运行程序 注册Telegram账号和Bot 首先需要在Telegram上注册一个账号,然后在Telegram中搜索 @BotFathe…

    人工智能概览 2023年5月25日
    00
  • 一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系

    一、DataLoader、DataSet、Sampler Pytorch是一个开源的机器学习、深度学习框架,其中DataLoader、DataSet、Sampler是数据处理的核心组件。 1.1 DataLoader DataLoader是一个数据迭代器,它可以将数据集封装成可迭代的对象,方便我们对数据集进行批量读取,并且可以通过设置参数来实现多线程和数据预…

    人工智能概论 2023年5月25日
    00
  • Spring boot 集成Dubbox的方法示例

    下面是关于Spring Boot集成Dubbo的方法示例攻略: 什么是Dubbo Dubbo是阿里巴巴开源的一个高性能的Java RPC框架,主要提供了微服务架构下的远程调用通信能力,解决了分布式服务化架构中的RPC问题。在阿里巴巴内部广泛应用,2011年开源以来也逐渐在国内流行。 在Spring Boot项目中集成Dubbo Dubbo可以通过与Sprin…

    人工智能概览 2023年5月25日
    00
  • Google排名中的10个最著名的 JavaScript库

    来讲解一下“Google排名中的10个最著名的 JavaScript库”的攻略。 1. 什么是 JavaScript 库? JavaScript 库,又称为 JS 库或 JS 工具库,是在 JavaScript 语言基础之上的一组函数和方法的集合。这些函数和方法是为了解决 Web 开发中一些常见问题而生的,常用于优化开发效率和提高代码质量。由于 JavaSc…

    人工智能概论 2023年5月25日
    00
  • VisualStudio2019配置OpenCV4.5.0的方法示例

    针对”VisualStudio2019配置OpenCV4.5.0的方法示例”,我们需要进行以下步骤: 1. 下载OpenCV4.5.0 首先需要到OpenCV官网https://opencv.org/releases/下载最新版本的OpenCV。 这里以Windows平台为例,下载”opencv-4.5.0-windows.exe”文件。下载完成后,双击运行…

    人工智能概览 2023年5月25日
    00
  • 国内分布式框架Dubbo使用详解

    国内分布式框架Dubbo使用详解 什么是Dubbo Dubbo是阿里巴巴公司开源的一款高性能Java RPC框架(Remote Procedure Call Protocol),可以优化各应用之间的方法调用和远程调用,它提供了多种服务治理和负载均衡功能,可以快速链接多种RPC架构。 Dubbo主要功能 服务自动注册和发现 远程方法调用 负载均衡 服务容错 D…

    人工智能概览 2023年5月25日
    00
  • spring boot整合redis主从sentinel方式

    下面我来详细讲解spring boot整合redis主从sentinel的完整攻略。 1. 环境准备 在开始之前,需要保证本地环境已经安装好了以下软件:- Redis- Spring Boot- Maven 2. 添加依赖项 在pom.xml中加入以下依赖项: <dependency> <groupId>org.springframe…

    人工智能概览 2023年5月25日
    00
  • Ubuntu18.04安装opencv 3.2.0的解决方法

    下面是Ubuntu18.04安装opencv 3.2.0的解决方法攻略: 一、安装依赖项 首先,要安装一些基本依赖项。在终端中执行以下命令: sudo apt-get update sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev li…

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