Pyramid 中混合认证策略

1. 问题背景
在一个使用 Pyramid 框架开发的应用程序中,需要同时处理 HTML 内容的显示和 JSON API 的请求。对于 HTML 内容,使用了 AuthTktAuthenticationPolicy 进行身份验证和 ACLAuthorizationPolicy 进行授权。当用户成功登录后,会在浏览器中设置 auth_tkt cookie,并且系统能够正常运行。
现在,需要为 JSON API 请求实现类似的身份验证和授权机制。不同的是,对于 JSON API 请求,用户不一定需要登录,因此需要在每次请求中包含一个 api_key 参数。根据该参数,如果找到一个有效的用户,则返回 JSON 数据;否则,显示一个 403 页面。
一种方法是在每个视图中进行如下操作:
api_key = request.GET.get('api_key',None)
user = FrontEndUsers.User_by_api_key(api_key)
if user: #Process view
else:return HTTPForbidden
但是,在每个视图中重复执行相同的身份验证逻辑似乎过于冗余,而且与身份验证策略的功能相同。因此,考虑是否可以为 JSON 路由指定一个单独的身份验证策略,或者是否有其他方法来实现这一目标。
2. 解决方案
方案一:使用 pyramid_multiauth 包
Pyramid_multiauth 包提供了一种简单的方法来在 Pyramid 中使用多个身份验证策略。首先,需要安装 pyramid_multiauth 包:
pip install pyramid_multiauth
然后,在应用程序的配置文件中添加以下配置:
[authentication]
policies = multiauth.MultiAuthenticationPolicy
policies.multiauth.policies = ["tkt_authn_policy", "basic_authn_policy"]
在上面的配置中,tkt_authn_policy 和 basic_authn_policy 是要使用的两个身份验证策略的名称。
最后,在视图中使用 pyramid_multiauth 提供的认证装饰器来保护视图:
@view_config(route_name='api_view', renderer='json',require_csrf=False)
@multiauth.multi_authenticated(require=['basic_authn_policy','tkt_authn_policy'])
def api_view(request):# 视图代码
方案二:编写自定义身份验证策略
也可以编写一个自定义的身份验证策略,该策略可以根据请求属性将请求分发到不同的身份验证策略。
首先,需要创建一个自定义身份验证策略类,该类继承自 pyramid.authentication.AuthTktAuthenticationPolicy。
from pyramid.authentication import AuthTktAuthenticationPolicyclass MultiAuthPolicy(AuthTktAuthenticationPolicy):def authenticated_userid(self, request):if 'api_key' in request.GET:# 使用 api_key 进行身份验证return self.authenticated_userid_with_api_key(request)else:# 使用传统的 AuthTktAuthenticationPolicy 进行身份验证return super().authenticated_userid(request)def authenticated_userid_with_api_key(self, request):# 根据 api_key 获取用户 ID# 根据用户 ID 获取用户对象# 返回用户对象
然后,在应用程序的配置文件中添加以下配置:
[authentication]
policies = multiauth
最后,在视图中使用自定义身份验证策略:
@view_config(route_name='api_view', renderer='json', require_csrf=False)
@multiauth.authenticated(check_credentials=False)
def api_view(request):# 视图代码
通过上述两种方法,可以实现为 JSON 路由指定单独的身份验证策略,从而简化身份验证逻辑,提高代码的可维护性。
相关文章:
Pyramid 中混合认证策略
1. 问题背景 在一个使用 Pyramid 框架开发的应用程序中,需要同时处理 HTML 内容的显示和 JSON API 的请求。对于 HTML 内容,使用了 AuthTktAuthenticationPolicy 进行身份验证和 ACLAuthorizationPolicy 进行授权。当用户成功登录后,会在浏览…...
深度学习经典检测方法概述
一、深度学习经典检测方法 two-stage(两阶段):Faster-rcnn Mask-Rcnn系列 one-stage(单阶段):YOLO系列 1. one-stage 最核心的优势:速度非常快,适合做实时检测任务! 但是…...
<sa8650>sa8650 qcxserver-之-摄像头传感器VB56G4A驱动开发<1>
<sa8650>sa8650 qcxserver-之-摄像头传感器VB56G4A驱动开发 <1> 一、前言二、QCX架构三、QCX 传感器驱动程序定制开发3.1 sensor硬件接口3.2 sensor配置文件3.2.1 cameraconfig.c3.2.2 cameraconfigsa8650_water.c3.2.3 新增编译MK3.2.4 参数解析3.2.4.1 struct Camera…...
推荐8款超实用的ComfyUI绘画插件,帮助我们的AI绘画质量和效率提升几个档次!
前言 大家在使用SD绘画过程中,想必见识到了插件的强大功能,本身纯净版的SD界面是相对简洁的,但是搭配了各种插件后,界面标签栏会增加很多,相应的功能也增加了。 从简单的中文界面翻译插件,到强大的contro…...
MATLAB-振动问题:两自由度耦合系统自由振动
一、基本理论 二、MATLAB实现 以下是两自由度耦合系统自由振动质量块振动过程动画显示的MATLAB程序。 clear; clc; close allx0 1; D1 40; D12 8; D2 D1; m1 1; omega0 sqrt(D1/m1); k1 D12 / D1; k2 D12 / D2; k sqrt(k1 * k2); omegazh omega0 * sqrt(1 k); omeg…...
人工智能-NLP简单知识汇总01
人工智能-NLP简单知识汇总01 1.1自然语言处理的基本概念 自然语言处理难点: 语音歧义句子切分歧义词义歧义结构歧义代指歧义省略歧义语用歧义 总而言之:!!语言无处不歧义 1.2自然语言处理的基本范式 1.2.1基于规则的方法 通…...
Spring Boot中的异步编程技巧
Spring Boot中的异步编程技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Spring Boot应用程序中如何使用异步编程技巧,以提升性…...
深度解密Spark性能优化之道
课程介绍 课程通过实战案例解析和性能调优技巧的讲解,帮助学员提升大数据处理系统的性能和效率。课程内容涵盖了Spark性能调优的各个方面,包括内存管理、并行度设置、数据倾斜处理、Shuffle调优、资源配置等关键技术和策略。学员将通过实际案例的演示和…...
在U盘/移动硬盘上安装热插拔式Ubuntu系统,并将Docker目录挂载到NTFS硬盘
Windows10的WSL2的确给开发人员带来了很多方便,但是仍然有很多缺点。比如:太占系统内存;有些软件无法在WSL2中编译成功;相当于虚拟机,性能不如原装系统。 装双系统,相信大家都不陌生,但它会占用…...
商城小程序论文(设计)开题报告
一、课题的背景和意义 近些年来,随着移动互联网巅峰时期的来临,互联网产业逐渐趋于“小、轻、微”的方向发展,符合轻应用时代特点的各类技术受到了不同领域的广泛关注。在诸多产品中,被誉为“运行着程序的网站”之名的微信小程序…...
15. Java的 CAS 操作原理
1. 前言 本节内容主要是对 CAS 操作原理进行讲解,由于 CAS 涉及到了并发编程包的使用,本节课程只对 CAS 的原理问题进行讲解,有助于同学后续对并发编程工具使用的学习。本节具体内容点如下: 了解 CAS 的概念,这是本节…...
修改element-ui日期下拉框datetimePicker的背景色样式
如图: 1、修改背景色 .el-date-picker.has-sidebar.has-time { background: #04308D; color: #fff; border: 1px solid #326AFF } .el-date-picker__header-label { color: #ffffff; } .el-date-table th { color: #fff; } .el-icon-d-arrow-left:before { color: …...
Linux—— 逻辑运算符,压缩和解压缩
- -a: and 逻辑与 - -o: or 逻辑或 - -not: not 逻辑非 - 优先级:与>或>非 shell [rootserver ~]# find / -size 10k -a -size -50k [rootserver ~]# find /etc -name "e*" -o -name "f*"…...
音视频入门基础:H.264专题(6)——FFmpeg源码:从H.264码流中提取NALU Header、EBSP、RBSP和SODB
音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…...
STM32实现按键单击、双击、长按、连按功能,使用状态机,无延时,不阻塞
常见的按键判定程序,如正点原子按键例程,只能判定单击事件,对于双击、长按等的判定逻辑较复杂,且使用main函数循环扫描的方式,容易被阻塞,或按键扫描函数会阻塞其他程序的执行。使用定时器设计状态机可以规…...
C#之Delta并联机械手的视觉同步分拣
本文导读 前面两节课程我们介绍了怎么建立Delta并联机械手的正逆解以及如何通过视觉进行匹配定位。本节课程给大家分享如何通过C#语言开发正运动Delta并联机械手传送带同步的视觉分拣。 VPLC711硬件介绍 VPLC711是正运动推出的一款基于x86平台和Windows操作系统的高性能机器…...
01:Linux的基本命令
Linux的基本命令 1、常识1.1、Linux的隐藏文件1.2、绝对路径与相对路径 2、基本命令2.1、ls2.2、cd2.3、pwd / mkdir / mv / touch / cp / rm / cat / rmdir2.4、ln2.5、man2.6、apt-get 本教程是使用的是Ubuntu14.04版本。 1、常识 1.1、Linux的隐藏文件 在Linux中…...
GNSS 载波、测距码和导航电文的关系简介
1、GNSS 载波、测距码和导航电文 在卫星导航系统中,载波、测距码和导航电文是构成GPS信号的三个基本组成部分,它们共同工作以实现精确的卫星定位和导航功能。以下是对这三个组成部分的详细介绍: 1. 载波(Carrier)&…...
deepE 定位系统卡顿问题实战(一) ----------- 锁造成的阻塞问题
deepE介绍 deepE是一个开源的用于端侧(自动驾驶车,机器人)等环境的系统问题与性能分析工具。基于ebpf功能实现 deepE项目地址 欢迎star 测试程序 #include <iostream> #include <thread> #include <mutex>static std::mutex lock;void func1() {int l…...
YOLOv5改进 | 主干网络 | ODConv + ConvNeXt 增强目标特征提取能力
秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录: 《YOLOv5入门 …...
出租车计价器控制电路的设计(有完整资料)
编号:CJ-32-2022-046设计简介:本设计是出租车计价器控制电路的设计,主要实现以下功能:1、出租车计价器系统以Km 为单位统计里程,以元为单位统计总金额; 2、通过霍尔传感器和电机获取速度和路程;…...
源代码论文分享|图书管理系统!
这份「图书管理系统」源码和论文,适合你在最需要“有个靠谱参考”的时候打开。 不是那种只放一堆代码、让人自己猜怎么跑的资料,也不是标题写得很大、内容却很空的论文模板。它更像一份已经整理好的项目包:有源码、有论文,可以直…...
FPGA设计流程全解析:从HDL代码到比特流生成的ISE实战指南
1. 项目概述:从零到一理解FPGA设计核心流程如果你刚接触FPGA,面对一堆开发板、软件和概念,可能会觉得无从下手。我刚开始学的时候也一样,总觉得这东西门槛高,逻辑复杂。但后来我发现,只要把设计流程这条主线…...
QtUnblockNeteaseMusic终极指南:跨平台音乐解锁工具的技术实现与应用
QtUnblockNeteaseMusic终极指南:跨平台音乐解锁工具的技术实现与应用 【免费下载链接】QtUnblockNeteaseMusic A desktop client for UnblockNeteaseMusic, made with Qt. 项目地址: https://gitcode.com/gh_mirrors/qt/QtUnblockNeteaseMusic 在数字音乐流媒…...
当ChIP-seq遇见单细胞:技术原理、应用场景与未来展望,一次给你讲清楚
当单细胞分辨率重塑表观遗传学:scChIP-seq的技术突破与应用全景 表观遗传学研究正经历一场分辨率革命。过去十年间,科学家们不得不依赖数百万细胞才能绘制组蛋白修饰或转录因子结合的全局图谱,这种"群体平均"的视角掩盖了细胞间异…...
Python图像转二维数组:PIL与NumPy实战指南
1. 项目概述:从图片到数据的桥梁在图像处理、机器学习或者嵌入式开发的很多场景里,我们常常需要将一张图片“翻译”成计算机能直接理解和运算的数字形式。比如,你想分析一张照片的亮度分布,或者把一个简单的图标转换成单片机可以显…...
从CSV文件到3D点云:用Qt+OpenGL打造一个简易的激光雷达数据查看器
从CSV文件到3D点云:用QtOpenGL打造激光雷达数据查看器 激光雷达技术正在重塑自动驾驶、机器人导航和三维测绘的格局。当数百万个空间数据点从激光雷达设备中喷涌而出时,工程师们面临着一个关键挑战:如何快速验证和可视化这些原始数据…...
Cursor Free VIP:一键解决Cursor AI试用限制的智能工具
Cursor Free VIP:一键解决Cursor AI试用限制的智能工具 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tr…...
WeatherBench终极指南:如何用AI技术构建专业天气预报系统
WeatherBench终极指南:如何用AI技术构建专业天气预报系统 【免费下载链接】WeatherBench A benchmark dataset for data-driven weather forecasting 项目地址: https://gitcode.com/gh_mirrors/we/WeatherBench 想要快速入门数据驱动的天气预报吗࿱…...
二维无金属铁磁半金属AsN2:p轨道自旋电子学的理论突破与计算设计
1. 二维无金属铁磁半金属:一个值得深挖的“潜力股”最近几年,二维材料这个领域真是热闹非凡,从石墨烯一炮而红开始,各种新奇的结构和性质层出不穷。作为一名长期关注计算材料学和自旋电子学的从业者,我一直在寻找那些既…...
