---
title: "Device Authorization"
description: "CLI、电视和其他输入受限设备通过用户在独立浏览器确认，获得 OAuth 令牌。"
url: "https://auth.kai.com/docs/device-authorization"
language: "zh-CN"
version: "Better Auth 1.7.1"
updated: "2026-09-22"
---

# 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 方式认证。

```text
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` 发送：

```text
grant_type=urn:ietf:params:oauth:grant-type:device_code
client_id=YOUR_CLIENT_ID
device_code=DEVICE_CODE
```

首次和后续轮询遵守返回的 `interval`。遇到 `authorization_pending` 继续等待；遇到 `slow_down`，将之后的轮询间隔增加五秒。遇到拒绝、过期或其他错误停止轮询；不要无限重试。

成功后按[令牌校验](/docs/claims)验证结果。KAI 有意关闭 `/api/auth/device/token`，本流程使用 `/api/auth/oauth2/token` 发放 OAuth 令牌，不创建一等登录会话。

## 与额外身份验证的区别

Device 授权成功表示用户批准当前客户端登录，不表示完成了一次高风险操作的额外验证。当前 Device 请求不支持通过 `acr_values` 取得 `kai_step_up` 结果；刷新 Device 令牌或在浏览器做过其他验证，也不会升级原授权链。

应用或 CLI 需要额外验证时，另行发起[额外身份验证](/docs/step-up)的授权码与 PKCE 流程，并核对结果属于当前业务账号。不要调用 KAI 的私有浏览器会话接口来绕过这项边界。
