记录使用Python登录浙江大学统一身份认证
背景
现在每天要进行健康情况上报,但是因为经常睡过头忘记打卡,于是想着写一个程序来自动打卡。
统一身份认证
访问健康情况上报页面(https://healthreport.zju.edu.cn/ncov/wap/default/index)后会先跳转到登录界面

输入账号密码登陆以后会发送一个post请求

表单里一共有五项内容


可以看到,username就是学号,password不是密码的明文,可能是经过了哈希或者加密,authcode一项为空不用管,_eventId应该是提交的意思,而最长的execution看不出有什么含义。
通过查看网页源代码,可以看到登录表单中有一项

就是execution的内容,可以看出,每次请求页面的时候会返回execution,在登录时带着这一项提交,作用可能是防止csrf攻击(猜的)。
那么就只剩下密码这一个参数了。
如果前端通过js加密密码,必然要先从input框中先获取密码的内容,于是先找到密码框的html代码

然后在source中全文搜索password关键字,发现login.js中有一段这样的代码

点开看看

可以看到这段代码先进行一些字段检查,再把密码加密填写回password,最后再执行submit提交到后台。
继续搜索加密中用到的RSAUtils

发现代码都放在security.js中,继续打开看看
这个文件包含了加密需要的代码,其中的算法我不太了解,不过好在Python有pyexecjs这个神器,直接把代码扒下来调用就好了。

但是图中需要的public_exponent和Modulus两个参数还没有找到,考虑到每次登录提交的密码内容都不一样,所以猜测这两个可能是通过时间戳生成或者请求来的?继续搜索


原来是通过ajax请求了这两个参数,再在network里找,果然找到了这个请求


应该是通过cookie将这次的登录表单和这对参数联系起来,好奇后台是通过什么算法验证的。
代码实现
现在整个登录的流程已经梳理清楚了,开始使用代码实现
- 先访问页面并提取
executionsess = requests.session()
r = sess.get('https://healthreport.zju.edu.cn/ncov/wap/default/index')
execution = re.search('name="execution" value="(.*?)"', r.text).group(1)
- 获取密码加密需要的参数
r = sess.get('https://zjuam.zju.edu.cn/cas/v2/getPubKey')
modulus = r.json()['modulus']
exponent = r.json()['exponent']
- 加密密码
ctx = execjs.compile(jscode)
encrypted_password = ctx.call('encrypt', username, password)
- 发送登录请求
data = {
'username': username,
'password': encrypted_password,
'authcode': ''
'execution': execution,
'_eventId': 'submit'
} r = sess.post(post_url, data=data)
之后就可以进行自动打卡的操作了。
记录使用Python登录浙江大学统一身份认证的更多相关文章
- JEECG 集成KiSSO单点登录实现统一身份认证
JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...
- 【.NET Core微服务实战-统一身份认证】开篇及目录索引
简介 学习.NETCORE也有1年多时间了,发现.NETCORE项目实战系列教程很少,都是介绍开源项目或基础教程,对于那些观望的朋友不能形成很好的学习思路,遇到问题怕无法得到解决而不敢再实际项目中 ...
- 基于DDD + SD.Framework实现的统一身份认证系统
项目地址 http://git.oschina.net/lishilei0523/ShSoft.UAC 项目说明 本项目开发的目的有三: 1.作为一个使用SD.Framework框架开发的项目样板 2 ...
- 中国科学技术大学统一身份认证系统CAS
CAS | Apereohttps://www.apereo.org/projects/cas 中国科学技术大学统一身份认证系统https://passport.ustc.edu.cn/login?s ...
- 构建基于分布式SOA架构的统一身份认证体系
摘要:本文充分利用SOA架构松耦合的特点,通过规范统一网络接口实现业务系统整合,既提升系统安全性,又简化资源访问操作,具有重要的理论和现实意义. 统一身份认证旨在将分散在各个信息系统中的用户和权限资源 ...
- 配置用户通过Telnet登录设备的身份认证(AAA本地认证)
背景信息 用户通过Telnet登录设备时,设备上必须配置验证方式,否则用户无法成功登录设备.设备支持不认证.密码认证和AAA认证三种用户界面的验证方式,其中AAA认证方式安全性最高. 采用AAA本地认 ...
- token机制完成登录状态保持/身份认证
一般APP都是刚安装后,第一次启动时需要登录(提示你需要登录或者直接启动在登录界面).而只要登录成功后,以后每次启动时都是登录状态,不需要每次启动时再次登录.不过,也有些APP若你长期未启动,再次启动 ...
- SSO单点登录统一身份认证系统
什么是单点登录 简单点说就是公司有A,B两个系统,我登录了A系统之后再跳转到B系统可以直接访问,而不需要再次登录B系统. 几种常见的单点登录实现方式 在讲解单点登录之前先讲解几个基本的概念: Cook ...
- 项目开发-->身份认证及用户登录模块
1.首先明确的两个问题 如何判断当前申请是由一个已登录用户发起的?如果Request.IsAuthenticated为true,则表示是一个已登录用户. 如何获取当前登录用户的登录名?如果是一个已登录 ...
随机推荐
- JS常用知识点(一)
1.js数据类型 基本类型:String.Number.boolean.null.undefined.Symbol 引用类型:Object null和undefined的区别:undefined表示定 ...
- node学习第一天
创建服务器 利用require引入http模块:var http=require("http") 利用http模块创建server服务器; 创建服务器:var server=htt ...
- intellij IDEA导入maven项目
一.导入maven项目 1.打开intellij idea,点击File(如下图1),然后点击Open(如下图2)
- 800页的《数据随想录》PDF版电子书|百度网盘免费下载|数据科学领域必读
百度网盘免费下载|<数据随想录> 提取码:51y7 本电子书内容包含从数据埋点到数据可视化整个链条的内容,同时,也整理了很多小伙伴们在交流社区中常问到的问题<数据百问>系列 数 ...
- FGPA_Microblaze UART 中断
由于底层所给函数发送与接收都采用中断,所用库函数比较复杂 ,有些更改涉及底层函数,因此结合网上论坛 .百度文库调试了串口中断接收程序.通过串口调试助手发送数据 ,以“发送新行”结束 . 硬件外设波特兰 ...
- 字节数组X中存放着 0~F共16个十六进制数,请将这些数以十六进制形式显示在屏幕上。
问题 字节数组X中存放着 0~F共16个十六进制数,请将这些数以十六进制形式显示在屏幕上. 代码 data segment x db 0,1,2,3,4,5,6,7,8,9,0ah,0bh,0eh,0 ...
- Python 字典(Dictionary) str()方法
Python 字典(Dictionary) str()方法 描述 Python 字典(Dictionary) str() 函数将值转化为适于人阅读的形式,以可打印的字符串表示.高佣联盟 www.cge ...
- PHP mysqli_stmt_init() 函数
初始化声明并返回 mysqli_stmt_prepare() 使用的对象: <?php 高佣联盟 www.cgewang.com // 假定数据库用户名:root,密码:123456,数据库:R ...
- node日志管理 / pm2-logrotate-ext日志管理
本篇文章说的是,如何使用pm2管理node项目的日志输出(切割和备份),文章步骤是基于已经安装了pm2的前提下,没有的,请自行百度. 第一步:需要登录公司服务器,查看一下目前服务器保存的所有日志(用于 ...
- hibernate自动创建表报错,提示不存在
报错:ERROR: HHH000299: Could not complete schema update 或 不能执行statement等 解决方式: 根据mysql版本更改hibernate.c ...