1
1
mirror of https://github.com/ZeroCatDev/ClassworksKV.git synced 2025-10-21 17:53:11 +00:00

设备授权流程 - CLI 工具

命令行工具,用于通过设备授权流程获取访问令牌。支持两种授权模式:

  • 设备代码模式 (get-token.js) - 用户手动输入设备代码完成授权
  • 回调模式 (get-token-callback.js) - 通过浏览器回调自动完成授权

使用方法

1. 设备代码模式推荐用于无GUI环境

node cli/get-token.js

2. 回调模式(推荐用于桌面环境)

node cli/get-token-callback.js

环境变量配置

两种模式都支持以下环境变量:

# 设置API服务器地址默认: http://localhost:3030
export API_BASE_URL=https://your-api-server.com

# 设置授权页面地址(默认: http://localhost:5173/authorize
export AUTH_PAGE_URL=https://your-classworks-frontend.com/authorize

# 设置应用ID默认: 1
export APP_ID=1

# 设置站点密钥(如果需要)
export SITE_KEY=your-site-key

# 回调模式特有配置
export CALLBACK_PORT=8080      # 回调服务器端口(默认: 8080
export TIMEOUT=300             # 授权超时时间(默认: 300秒

# 运行工具
node cli/get-token.js         # 设备代码模式
node cli/get-token-callback.js # 回调模式

使其可执行Linux/Mac

chmod +x cli/get-token.js
./cli/get-token.js

工作流程

设备代码模式 (get-token.js)

  1. 生成设备代码 - 工具会自动调用 API 生成形如 1234-ABCD 的授权码
  2. 显示授权链接 - 在终端显示完整的授权URL包含设备代码
  3. 等待授权 - 用户点击链接或在授权页面手动输入设备代码完成授权
  4. 获取令牌 - 工具自动轮询并获取令牌
  5. 保存令牌 - 令牌会保存到 ~/.classworks/token.txt

回调模式 (get-token-callback.js)

  1. 获取设备UUID - 自动获取或生成设备UUID
  2. 启动回调服务器 - 在本地启动HTTP服务器监听回调
  3. 打开授权页面 - 自动在浏览器中打开授权页面
  4. 用户授权 - 用户在浏览器中完成授权操作
  5. 接收回调 - 本地服务器接收授权回调并获取令牌
  6. 保存令牌 - 令牌会保存到 ~/.classworks/token-callback.txt

输出示例

设备代码模式输出

设备授权流程 - 令牌获取工具

✓ 设备授权码生成成功!

============================================================
  请访问以下地址完成授权:

  https://classworks.xiaomo.tech/authorize?app_id=1&mode=devicecode&devicecode=1234-ABCD

  设备授权码: 1234-ABCD
============================================================
 授权码有效期: 15 分钟
 API服务器: http://localhost:3030

 请在浏览器中打开上述地址,或在授权页面手动输入设备代码
 等待授权中...

等待授权... (1/100)
等待授权... (2/100)

==================================================
✓ 授权成功!令牌获取完成
==================================================

您的访问令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

✓ 令牌已保存到: /home/user/.classworks/token.txt

使用示例:
  curl -H "Authorization: Bearer eyJhbGc..." http://localhost:3030/kv

回调模式输出

回调授权流程 - 令牌获取工具

 正在获取设备UUID...
✓ 设备UUID: 1234567890abcdef1234567890abcdef

============================================================
  请访问以下地址完成授权:

  http://localhost:5173/authorize?app_id=1&mode=callback&callback_url=http://localhost:8080/callback&state=abc123

  设备UUID: 1234567890abcdef1234567890abcdef
  状态参数: abc123
============================================================
 回调地址: http://localhost:8080/callback
 API服务器: http://localhost:3030
 超时时间: 300 秒

 正在启动回调服务器...
✓ 回调服务器已启动: http://localhost:8080/callback
 正在尝试打开浏览器...
✓ 已尝试打开浏览器
 等待授权完成...

==================================================
✓ 授权成功!令牌获取完成
==================================================

您的访问令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

✓ 令牌已保存到: /home/user/.classworks/token-callback.txt

使用示例:
  curl -H "Authorization: Bearer eyJhbGc..." http://localhost:3030/kv

配置选项

通用配置

可以通过修改相应文件中的 CONFIG 对象或设置环境变量来调整:

  • baseUrl / API_BASE_URL - API 服务器地址(默认: http://localhost:3030
  • authPageUrl / AUTH_PAGE_URL - Classworks 授权页面地址(默认: http://localhost:5173/authorize
  • appId / APP_ID - 应用ID默认: 1
  • siteKey / SITE_KEY - 站点密钥(如果需要)

设备代码模式专用配置

  • pollInterval - 轮询间隔默认3秒
  • maxPolls - 最大轮询次数默认100次

回调模式专用配置

  • callbackPort / CALLBACK_PORT - 回调服务器端口(默认: 8080
  • timeout / TIMEOUT - 授权超时时间(秒,默认: 300
  • callbackPath - 回调路径(默认: /callback

错误处理

设备代码模式

  • 如果设备代码过期,会显示错误并退出
  • 如果轮询超时默认5分钟会显示超时错误
  • 如果无法连接到服务器,会显示连接错误

回调模式

  • 如果回调端口被占用,会提示更换端口
  • 如果授权超时,会显示超时错误并提示延长超时时间
  • 如果状态参数不匹配会拒绝授权防止CSRF攻击
  • 如果无法连接到服务器,会显示连接错误

选择模式建议

  • 设备代码模式 - 适用于无GUI环境、服务器环境、或无法启动本地服务器的场景
  • 回调模式 - 适用于桌面环境、开发环境、或希望更流畅授权体验的场景