设备代码流(OAuth 2.0 设备授权许可)
设备代码流(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/>令牌被签发给攻击者● 示例
- 01
`gh auth login` 打印一个短代码和一个 URL;用户在笔记本上登录并输入该代码,CLI 随即收到令牌。
- 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。