本文介绍 OAuth 2.0 协议中的公共客户端(Public Client)概念、典型应用场景及安全机制,重点阐述无法安全存储客户端密钥的客户端类型,以及如何通过 PKCE 扩展机制增强安全性,避免密钥泄露风险。
概述
OAuth 2.0 是一种开放标准的授权协议,允许应用程序在用户授权的情况下访问其资源,而无需暴露用户凭据。 根据客户端是否能够安全存储凭证,OAuth 2.0 协议将客户端分为以下两类:
保密客户端(Confidential Client):能够安全存储客户端密钥(client_secret)的客户端应用。
公共客户端(Public Client):无法安全存储客户端密钥(client_secret)的客户端。
公共客户端的典型场景
单页应用(SPA):如基于 JavaScript 的前端框架(React、Vue 等)。
原生移动应用 :如 iOS 或 Android 应用。
桌面应用。
命令行工具。
公共客户端运行在用户设备上,易受反编译或调试等安全威胁,无法保证如 client_secret 等敏感信息的安全,因此不适合作为可信密钥存储。为了解决公共客户端的安全隐患,OAuth 2.0 引入了 PKCE 扩展机制,PKCE 机制无需依赖客户端密钥来验证客户端身份,从而解决密钥泄漏风险。
公共客户端安全配置说明
IDaaS 默认要求客户端使用密钥进行身份验证。开启公共客户端功能后,允许特定场景下的客户端在不携带密钥的情况下发起认证请求,同时结合 PKCE(Proof Key for Code Exchange)机制可有效防止授权码拦截攻击,确保无密钥场景下的安全性。针对无法安全存储密钥的公共客户端场景,IDaaS 提供了特殊支持模式:
授权码模式(authorization_code):支持启用公共客户端选项。启用后,请求时可不带客户端密钥。若不带客户端密钥,则必须结合 PKCE 机制使用,以确保安全性。
设备模式(device):同样支持公共客户端配置,适用于无法内置浏览器的设备应用场景。