Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 343

设备代码流(OAuth 2.0 设备授权许可)

审核人Cybersecurity entrepreneur & security researcher

设备代码流(OAuth 2.0 设备授权许可) 是什么?

设备代码流(OAuth 2.0 设备授权许可)一种 OAuth 2.0 许可(RFC 8628):输入受限的设备(智能电视、CLI、IoT 设备)显示一个代码和验证 URL,让用户在第二台设备上完成认证——对 CLI 很方便,但也是有据可查的钓鱼载体。


OAuth 2.0 设备授权许可(Device Authorization Grant)由 RFC 8628 定义,通称设备代码流(device code flow)。它让没有可用浏览器的客户端(智能电视、CLI、自助终端、IoT 设备)通过让用户在另一台设备上认证来获取委托令牌。客户端向 IdP 请求一个 device_code 和一个短的 user_code,并显示该 user_code 及验证 URL(例如 https://microsoft.com/devicelogin)。用户在手机或笔记本上打开该 URL、登录、输入 user_code 并授权;与此同时设备轮询令牌端点(遵守 interval,遇到 slow_down 时放慢),直到 IdP 签发令牌。该流程是 gh auth login、az login --use-device-code、Apple TV 登录以及 Roku/Google TV 配对的基础。

同样的设计也是一种强力的钓鱼载体,因为用户是在合法的 IdP 页面上认证的——没有可供识破的仿冒域名。攻击者针对目标租户发起一个设备代码流,再把刚生成的 user_code 用带有紧迫感的诱饵转发给受害者;受害者一旦输入,令牌便签发给攻击者。微软 2025 年 2 月关于 Storm-2372 的报告(该组织与俄罗斯利益一致,自 2024 年 8 月起活跃)正记录了这一手法:以 Teams 会议为诱饵,诱使政府、国防和 NGO 目标输入攻击者生成的代码,随后攻击者利用令牌通过 Microsoft Graph 窃取邮件。防御措施包括:用条件访问策略将该流程限制或禁用到特定应用与用户组、缩短令牌有效期,以及用户教育——设备代码只应为用户本人发起的登录而输入。

sequenceDiagram
  participant D as 设备(CLI/电视)
  participant I as 身份提供方
  participant U as 用户(手机/笔记本)
  D->>I: 请求 device_code + user_code
  I-->>D: device_code、user_code、verification_uri
  D-->>U: 显示"打开 URL 并输入代码"
  loop 轮询(遵守 interval / slow_down)
    D->>I: 用 device_code 查询令牌端点
    I-->>D: authorization_pending
  end
  U->>I: 打开 verification_uri、登录、输入 user_code 并授权
  I-->>D: 访问令牌与刷新令牌
  Note over U,I: 钓鱼风险:攻击者转发自己的 user_code<br/>令牌被签发给攻击者

● 示例

  1. 01

    `gh auth login` 打印一个短代码和一个 URL;用户在笔记本上登录并输入该代码,CLI 随即收到令牌。

  2. 02

    Entra ID 的条件访问策略在全租户范围内禁用设备代码流,仅对一个范围严格的 CLI 用户组开放。

● 常见问题

设备代码流(OAuth 2.0 设备授权许可) 是什么?

一种 OAuth 2.0 许可(RFC 8628):输入受限的设备(智能电视、CLI、IoT 设备)显示一个代码和验证 URL,让用户在第二台设备上完成认证——对 CLI 很方便,但也是有据可查的钓鱼载体。 它属于网络安全的 身份与访问 分类。

设备代码流(OAuth 2.0 设备授权许可) 是什么意思?

一种 OAuth 2.0 许可(RFC 8628):输入受限的设备(智能电视、CLI、IoT 设备)显示一个代码和验证 URL,让用户在第二台设备上完成认证——对 CLI 很方便,但也是有据可查的钓鱼载体。

如何防御 设备代码流(OAuth 2.0 设备授权许可)?

针对 设备代码流(OAuth 2.0 设备授权许可) 的防御通常结合技术控制与运营实践,详见上方完整定义。

设备代码流(OAuth 2.0 设备授权许可) 还有哪些其他名称?

常见的别称包括: RFC 8628, OAuth 2.0 Device Authorization Grant。

● 相关术语