You need to enable JavaScript to run this app.
文档中心
智能体身份和权限管理平台

智能体身份和权限管理平台

复制全文
下载 pdf
用户身份管理
OAuth 设备码流程
复制全文
下载 pdf
OAuth 设备码流程
本指南面向命令行工具、电视类应用、嵌入式设备,或其他不适合在本机输入密码的客户端。OAuth 设备码流程允许设备先申请一组短码,引导用户在另一台带浏览器的设备上完成登录和授权,然后设备端轮询 token endpoint,直到 identity 可以签发令牌。​
能力摘要​
​
阶段​
运行时端点​
发生什么​
请求设备授权​
discovery 中的 OIDC device_authorization_endpoint​
设备获得 device_code、user_code、验证地址、过期时间和轮询间隔。​
用户确认​
/device 或 discovery 返回的验证地址​
用户输入或确认 user code,完成登录,并批准或拒绝请求。​
轮询令牌​
使用 device-code grant 调用 OIDC token endpoint​
设备持续轮询,直到用户批准、拒绝、代码过期,或返回令牌。​
​
前置条件​
  • 已创建并启用 identity UserPool。​
  • 已为设备应用创建一个 native UserPool 客户端。​
  • 该 native 客户端已启用 DeviceFlowEnabled。当移动/原生应用客户端启用该能力后,支持的 grant posture 会变为 device_code 加 refresh_token。​
  • 客户端具备设备应用需要的 scopes,例如 openid、profile、email,以及可选的 offline_access。​
  • 批准请求的用户可以在另一台设备上访问浏览器。​
  • 如果希望验证页直接路由到指定身份提供方,可在集成支持时随设备验证请求携带 identity_provider hint。​
推荐运行时流程​
第 1 步:发现运行时端点​
读取 UserPool issuer 的 discovery document,并使用其中发布的端点值,不要手工假设路径。​
​
curl -sS "${ISSUER}/.well-known/openid-configuration"​
​
重点关注 discovery 响应中的 device_authorization_endpoint、token_endpoint 和 issuer 信息。​
第 2 步:申请 device code​
设备通过 device authorization endpoint 发起流程,提交 native 客户端标识和所需 scopes。​
​
curl -X POST "${DEVICE_AUTHORIZATION_ENDPOINT}" \​
-H "Content-Type: application/x-www-form-urlencoded" \​
-d "client_id=${CLIENT_ID}" \​
-d "scope=openid profile email offline_access"​
​
成功响应通常包含以下值:​
​
{​
"device_code": "...",​
"user_code": "ABCD-EFGH",​
"verification_uri": "https://{issuer-host}/device",​
"verification_uri_complete": "https://{issuer-host}/device?user_code=ABCD-EFGH",​
"expires_in": 300,​
"interval": 5​
}​
​
第 3 步:向用户展示 user code​
在设备上展示 user_code 和验证地址。如果响应中有 verification_uri_complete,建议以二维码或直接链接形式展示,减少用户手动输入短码的成本。​
当用户打开验证页后,identity 会规范化短码、将其关联到授权请求,并把用户送入正常登录和授权确认路径。如果用户批准请求,identity 会为最初的 device code 完成设备授权状态。​
第 4 步:轮询 token endpoint​
设备使用 device code grant 轮询 token endpoint。请遵守设备授权响应中返回的 interval。​
​
curl -X POST "${TOKEN_ENDPOINT}" \​
-H "Content-Type: application/x-www-form-urlencoded" \​
-d "grant_type=urn:ietf:params:oauth:grant-type:device_code" \​
-d "device_code=${DEVICE_CODE}" \​
-d "client_id=${CLIENT_ID}"​
​
在用户尚未完成批准前,token endpoint 可能返回 pending 类响应。请按返回的轮询间隔继续请求,直到拿到令牌或遇到终态错误。​
令牌响应​
用户批准后,token endpoint 会返回该 native 客户端上下文下的标准令牌响应。​
​
字段​
含义​
access_token​
设备应用调用受保护 API 时使用的令牌。​
id_token​
请求 openid 时返回的已批准用户 OIDC 身份令牌。​
refresh_token​
当客户端和 scopes 允许刷新行为时返回,通常与 offline_access 搭配。​
expires_in​
access token 的有效期,单位为秒。​
token_type​
通常为 Bearer。​
​
管理 API​
​
管理目标​
暴露动作​
最值得关注的请求字段​
创建可使用设备码流程的 native 客户端​
UserPoolUid、Name、ClientType、DeviceFlowEnabled​
后续启用或关闭设备码流程​
UserPoolUid、ClientUid、DeviceFlowEnabled​
查看客户端配置​
ClientUid、ClientType、grant posture、令牌设置​
​
运营注意事项​
  • 设备授权状态有效期较短。当前运行时使用五分钟设备授权有效期和五秒轮询间隔。​
  • 提醒用户只批准自己设备上显示的短码。​
  • 如果用户拒绝请求,设备端应停止轮询;如仍需登录,应重新开始流程。​
  • 如果短码过期,请申请新的 device code,不要继续重试旧代码。​
  • 轮询应保持克制。过于频繁的轮询可能导致限流,也会影响用户体验。​
安全注意事项​
  • 在设备屏幕上展示足够的应用和设备上下文,帮助用户识别自己正在批准什么。​
  • 不要要求用户在受限输入设备上粘贴密码或令牌。​
  • 在流程有效期内,将 device_code 视为敏感值处理。​
  • 如果设备应用请求离线访问,请安全存储 refresh token。​
下一步​
  • 客户端​
  • OIDC 客户端使用指南​
  • identity UserPool​
  • Headless Login API​
最近更新时间:2026.08.24 15:13:50
这个页面对您有帮助吗?
有用
有用
无用
无用