BIT101-API
首页BIT101
BIT101企划
  • BIT101
  • BIT101-GO
  • BIT101-Android
首页BIT101
BIT101企划
  • BIT101
  • BIT101-GO
  • BIT101-Android
BIT101
  1. 统一身份验证
  • BIT101 API总览
  • 用户模块
    • 用户模块介绍
    • 学校统一身份验证初始化
      POST
    • 学校统一身份认证验证
      POST
    • 发送邮件验证码
      POST
    • 注册/重置密码/code登录
      POST
    • 登录
      POST
    • 获取用户信息
      GET
    • 获取用户信息(老)
      GET
    • 修改用户信息
      PUT
    • 关注
      POST
    • 关注列表
      GET
    • 粉丝列表
      GET
    • 检查登录状态
      GET
  • 上传模块
    • 通过文件上传图片
      POST
    • 通过链接上传图片
      POST
  • 交互反馈模块
    • 点赞
      POST
    • 评论列表
      GET
    • 评论
      POST
    • 评论删除
      DELETE
    • 停留时间
      POST
  • 文章模块
    • 获取文章列表
    • 获取文章
    • 新建文章
    • 更新文章
    • 删除文章
  • 教务模块
    • 成绩查询
    • 获取可信成绩单
    • 获取课程表
  • 课程模块
    • 获取课程列表
    • 获取课程详细信息
    • 获取课程历史信息
    • 获取课程资料上传链接
    • 上报课程资料上传记录
  • 变量模块
    • 获取变量
    • 设置变量
  • 消息模块
    • 消息模块说明
    • 获取未读消息总数
    • 获取分类未读消息数量
    • 获取消息列表
    • 发送系统消息
  • 话廊模块
    • 获取帖子列表
    • 获取帖子
    • 发布帖子
    • 更新帖子
    • 删除帖子
    • 获取声明列表
  • 治理模块
    • 举报
    • 获取举报列表
    • 修改举报状态
    • 获取举报类型列表
    • 关小黑屋
    • 获取小黑屋列表
  • 学校教务接口
    • 课程表
      • 课程表模块流程
      • 我的课表主页
      • 获取访问权限
      • 更改语言为中文
      • 获取当前学期
      • 获取所有学期
      • 获取学期课表
      • 获取星期日期
    • 统一身份验证
      • 登录流程
      • 登录
        POST
      • 查询是否需要验证码
        GET
      • 获取验证码
        GET
      • 登录 Copy
        POST
    • 成绩
      • 查询所有课程成绩
      • 单个课程成绩详情
      • 登录可信成绩单系统
      • 获取可信成绩单
    • 考试安排
      • 查询考试安排
      • 查询考试安排主页
      • 获取访问权限
    • 乐学
      • 获取日历订阅链接
  • 订阅模块
    • 订阅
    • 获取订阅列表
  1. 统一身份验证

登录流程

首先访问登录页面,获取头中的Set-Cookie、页面中id分别为pwdEncryptSalt和execution的input的标签的value(注意页面中可能有多个相同id的,需要的这俩被包裹在id为pwdFromId的form中),几次密码错误后需要获取验证码,获取验证码和登录时使用同一个Cookie即可。
然后在前端将明文密码和pwdEncryptSalt传入EncryptPassword.js计算出加密后的密码,再将Cookie、加密后的密码、execution、验证码(如果需要的话)通过POST发送到登陆页面,然后会经历一大堆乱七八糟的302重定向,注意这一大堆重定向过程中需要一直携带Cookie(Python的requests库重定向默认不带,需要手动处理,开始我被折腾了好久555)。
对于webvpn来说,之后拿着同一个Cookie就可以走天下了,只不过访问每一个子模块或多或少都需要前序验证(其实就是访问一个页面然后经历一大堆重定向)。另外,由于webvpn相当于代理了内部的Cookie,所以内部的这些Cookie过期时间是不可知的,只能是用到相关服务的时候都把前序验证流程走一遍。
对于非webvpn的直接访问来说,需要统一身份认证时会被重定向到登录页面,这时候只要携带着登录时拿到的Cookie就会被自动重定向回要访问的页面,并且下发可能需要的对应站点的Cookie。
关于EncryptPassword.js
另外对EncryptPassword.js作出一点说明,这是一个用于密码加密的JavaScript文件,可以让传输过程中不出现明文密码,保证安全。首先给出学校官网上这个文件的原版链接,实际上就调用里面的encryptPassword(pwd0, key),pwd0是明文密码,key是salt,调用后函数会返回加密后的密码。我懒得(大概也没有能力)把这个加密复现,所以即使在安卓客户端里也只是硬调这个JavaScript代码。
修改于 2023-05-17 07:55:16
上一页
获取星期日期
下一页
登录
Built with