Device Authorization
CLI、电视和其他输入受限设备通过用户在独立浏览器确认,获得 OAuth 令牌。
启用与发起
在 Application 中启用 Device Code。分发型客户端通常选择 public;只有能够安全保存密钥的服务端才使用 confidential。Device-only 应用不需要 redirect URI。
从 Discovery 读取 device_authorization_endpoint,当前为 /api/auth/device/code。public 客户端提交 client_id、所需 scope,必要时提交获准的 resource;confidential 客户端同时按登记的 token endpoint 方式认证。
POST /api/auth/device/code
Content-Type: application/x-www-form-urlencoded
client_id=YOUR_CLIENT_ID&scope=openid%20profile%20email
响应包含 device_code、user_code、verification_uri、expires_in 和 interval。只向用户展示 verification URL 和 user code,保护 device code。
用户确认
用户访问 /device 后选择账号、核对设备上显示的 code,明确批准或拒绝。批准会创建和浏览器授权同样可见、可撤销的 OAuth authorization。不要自动替用户点击批准,也不要用一等会话 token 替代 OAuth token。
轮询令牌
向 Discovery 的 token_endpoint 发送:
grant_type=urn:ietf:params:oauth:grant-type:device_code
client_id=YOUR_CLIENT_ID
device_code=DEVICE_CODE
首次和后续轮询遵守返回的 interval。遇到 authorization_pending 继续等待;遇到 slow_down,将之后的轮询间隔增加五秒。遇到拒绝、过期或其他错误停止轮询;不要无限重试。
成功后按令牌校验验证结果。KAI 有意关闭 /api/auth/device/token,本流程使用 /api/auth/oauth2/token 发放 OAuth 令牌,不创建一等登录会话。
与额外身份验证的区别
Device 授权成功表示用户批准当前客户端登录,不表示完成了一次高风险操作的额外验证。当前 Device 请求不支持通过 acr_values 取得 kai_step_up 结果;刷新 Device 令牌或在浏览器做过其他验证,也不会升级原授权链。
应用或 CLI 需要额外验证时,另行发起额外身份验证的授权码与 PKCE 流程,并核对结果属于当前业务账号。不要调用 KAI 的私有浏览器会话接口来绕过这项边界。