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
)
- 生成设备代码 - 工具会自动调用 API 生成形如
1234-ABCD
的授权码 - 显示授权链接 - 在终端显示完整的授权URL,包含设备代码
- 等待授权 - 用户点击链接或在授权页面手动输入设备代码完成授权
- 获取令牌 - 工具自动轮询并获取令牌
- 保存令牌 - 令牌会保存到
~/.classworks/token.txt
回调模式 (get-token-callback.js
)
- 获取设备UUID - 自动获取或生成设备UUID
- 启动回调服务器 - 在本地启动HTTP服务器监听回调
- 打开授权页面 - 自动在浏览器中打开授权页面
- 用户授权 - 用户在浏览器中完成授权操作
- 接收回调 - 本地服务器接收授权回调并获取令牌
- 保存令牌 - 令牌会保存到
~/.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环境、服务器环境、或无法启动本地服务器的场景
- 回调模式 - 适用于桌面环境、开发环境、或希望更流畅授权体验的场景