python 读取 session 鉴权方法一

Posted on 2026-08-04 05:26  微蓝的天  阅读(1)  评论(0)    收藏  举报

可以。思路是:浏览器 console 一键提取 token → 脚本自动从环境变量/文件读取,无需每次输入密码。
有个语法警告,修复一下:
语法检查通过。

download_v2.py 工作流程

一次性设置(1 分钟搞定)

浏览器 F12 → Console → 执行:
    copy(localStorage.getItem('auth_token'))

终端保存:
    echo 粘贴的token > %USERPROFILE%\.monitor_token

后续日常使用(无需密码)

# token 自动从 ~/.monitor_token 加载,无需输入密码
python scripts/download_v2.py                                    # 列表
python scripts/download_v2.py --task-number TK-20260804-0007     # 按任务过滤
python scripts/download_v2.py --task-number TK-20260804-0007 --all --dir ./out  # 一键下载

Token 加载优先级

优先级 来源 说明
1 --token eyJhbG... 命令行直接传入
2 --token-file /path/file 指定文件
3 MONITOR_TOKEN 环境变量 CI/CD 常用
4 ~/.monitor_token 默认缓存文件(自动读取)
5 用户名密码登录 fallback,登录后自动缓存 token

v1 vs v2 对比

v1 (download_demo.py) v2 (download_v2.py)
依赖 零依赖(urllib) pip install requests
认证方式 每次输入密码 token 自动复用
token 自动缓存 ✅ 登录后自动保存到 ~/.monitor_token
代码量 ~200 行 ~180 行

v2 自动获取浏览器 token 的可能性分析

v2 的核心问题是:token 存在浏览器 localStorage 里,24 小时过期后必须重新从浏览器获取。要自动化这个"从浏览器取 token"的动作,只有以下几种路子:

方案 原理 可行性 问题
直接读 Chrome LevelDB Chrome 的 localStorage 存在 %LocalAppData%\Google\Chrome\User Data\Default\Local Storage\leveldb\ ⚠️ 勉强可行 LevelDB 是二进制格式,需要专门解析库;Chrome 运行时锁文件;路径随版本变;key 格式复杂
Puppeteer/Playwright 无头登录 脚本启动无头浏览器 → 自动填表登录 → 抓取 token ✅ 技术上可行 需要装 chromium(~300MB);密码得存脚本里;启动慢(3-5秒);大材小用
书签小工具 (bookmarklet) 浏览器点一下书签 → 自动复制 token 到剪贴板 ✅ 最简单 仍需手动点一下,但比打开控制台方便很多
curl 直接调登录 API curl -X POST /api/auth/login → 解析 token → 写入文件 ✅ 轻量可行 需要密码存明文(或环境变量)

结论:v2 架构下,没有一个方案是"既免密又全自动"的。 根本原因是 v2 只有短期 access_token,没有 refresh_token 这个"长期凭证"。


如果坚持 v2 不改代码,最佳实践是"方案 4"(API 登录):

REM auto_login.cmd — 每天用 curl 登录拿 token
@echo off
set /p PWD=<%USERPROFILE%\.monitor_pass
curl -s -X POST http://localhost:3001/api/auth/login ^
  -H "Content-Type: application/json" ^
  -d "{\"username\":\"admin\",\"password\":\"%PWD%\"}" ^
  | python -c "import sys,json; print(json.load(sys.stdin)['token'])" ^
  > %USERPROFILE%\.monitor_token

但问题又绕回来了——你得把密码明文存到文件里,安全性比 refresh token 方案差得多:

安全维度 v2 + 存密码 v3 refresh token
泄露后果 密码泄露 → 永久控制 token 泄露 → 30天有效
可撤销性 得改密码 服务端可轮换
日志痕迹 密码出现在 curl 命令行 token 只在 header 里
密码修改 需同步更新脚本 不受影响

最实用的 v2 折中:bookmarklet

如果你真的不想改任何代码,在浏览器书签栏加一个,点击就能自动复制 token:

javascript:(function(){const t=localStorage.getItem('auth_token');if(t){navigator.clipboard.writeText(t);alert('Token 已复制('+t.length+'字符)');}else{alert('未找到 token,请先登录');}})();

使用方式:在浏览器新建书签,URL 粘贴上面那行。每次 token 过期后:

  1. 打开平台页面(已登录状态)
  2. 点击这个书签 → token 自动到剪贴板
  3. 终端执行 echo 粘贴 > %USERPROFILE%\.monitor_token

比 F12 → Console → 粘贴命令快 3 倍,但仍然要每天手动操作一次


最终建议

v2 的"从浏览器拿 token"这个模式,架构上就不适合全自动。浏览器 localStorage 是 sandbox 环境,外部程序本来就不该直接访问。如果真的需要全自动免密,v3 的 refresh token 是最小成本的正确解法——改 4 个文件,永久解决。

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3