基于 OAuth 2.0 Device Authorization Grant (RFC 8628) 协议的 Express + TypeScript 实现示例,对应 docs/protocol.md 协议规范。
⚠️ 本示例使用内存存储,仅供开发测试参考,不可直接用于生产环境。
npm install npm run dev
| 接口 | 方法 | 说明 |
|---|---|---|
/auth/device/code | POST | 申请设备授权码 |
/auth/device/verify | POST | 用户确认授权 |
/auth/token | POST | 轮询获取凭证 |
/cli-auth | GET | 浏览器授权页面 |
/debug/devices | GET | 查看当前设备码状态(调试用) |
curl -s -X POST http://localhost:3000/auth/device/code \
-H "Content-Type: application/json" \
-d '{"client_id": "cloudbase-cli"}' | jq
记下返回的 user_code 和 device_code。
方式 A:打开浏览器访问 http://localhost:3000/cli-auth,输入 user_code
方式 B:通过 curl 模拟
curl -s -X POST http://localhost:3000/auth/device/verify \
-H "Content-Type: application/json" \
-d '{"user_code": "XXXX-XXXX"}' | jq
curl -s -X POST http://localhost:3000/auth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "urn:ietf:params:oauth:grant-type:device_code",
"device_code": "<your-device-code>",
"client_id": "cloudbase-cli",
"device_info": {
"os": "darwin",
"mac": "AA:BB:CC:DD:EE:FF",
"hash": "abc123"
}
}' | jq
HTTP 400 + authorization_pendingHTTP 200 + 凭证信息