桌面应用能否在无client secret的情况下完成OAuth2身份认证?
桌面应用场景下OAuth2 client secret 保密性保障的核心疑问
遇到的流程矛盾点
- 按照Google OAuth2针对安装类(桌面/移动本地)应用的设计说明,这类应用最终会分发到用户个人设备,本身不具备妥善保管敏感密钥的能力,从安全设计逻辑上本不应该要求其承担保管client secret的责任
- 但对照官方公开的授权码流程,在完成授权码获取后的交换环节(Step 5),流程要求应用必须提交client secret才能换取访问令牌,和前面的安全设计前提存在明显矛盾
之前的调研探索
- 为厘清这个逻辑矛盾,先后在多个开发者社区发起提问,和不同技术栈的开发者深入讨论后,始终没有得到闭环的清晰结论:按照OAuth2的通用适配逻辑,本应存在无需client secret即可完成认证的流程分支,正如之前交流提到的,无client secret本应可以完成认证,但实际对接时流程却硬性要求提供该字段,逻辑存在明显违和
- 检索过程中发现,4年前Stack Overflow上就存在完全相同主题的讨论,相关疑问已经存在较长时间
核心待明确的问题
- 针对桌面应用的client secret使用逻辑,近年官方是否有对应的方案迭代?
- 这类场景下是否可以不做特殊处理,直接将client secret 硬编码到应用源代码中?
内容的提问来源于stack exchange,提问作者Swerik
相关产品推荐
相关产品推荐

