MS Entra ID中OAuth 2.0客户端凭证流证书认证:密钥由谁管理?
在Microsoft Entra ID中用证书认证的客户端凭证流:密钥管理最佳实践
结论先行:永远不要管理外部服务的私钥,只处理他们提供的公钥,让外部服务自行管理私钥是正确且安全的做法
两种方案的优劣分析
方案1:我方生成密钥对并共享私钥的问题
- 私钥是身份认证的核心凭证,一旦我方把私钥共享给外部服务,后续的风险和责任边界会完全混乱:
- 若外部服务泄露私钥,我方很难举证是对方的管理失误;
- 我方需要跟踪所有外部服务的私钥生命周期(轮换、吊销),运维成本会大幅增加;
- 违背了最小权限和职责分离的安全原则,我方不应持有不属于自身业务的身份凭证。
方案2:外部服务自行生成密钥对,仅提供公钥的优势
- 安全责任清晰:外部服务完全掌控自己的私钥,泄露或管理不当的风险由对方自行承担;
- 运维效率更高:我方只需要把外部提供的公钥上传到Entra ID的应用注册中,不用管私钥的存储、轮换等细节;
- 符合OAuth 2.0设计逻辑:客户端(外部服务)本就该自主管理认证凭证,服务端(我方)只需要通过公钥校验签名的有效性即可;
- 灵活性更强:外部服务可以根据自身安全策略选择证书类型、有效期和轮换频率,不受我方统一管控的限制。
实操注意事项
- 要求外部服务提供的公钥必须是可信的:优先选择正规CA签发的证书,若用自签证书,需先验证对方身份再接收;
- 在Entra ID上传公钥时,要配置正确的证书用途,确保用于客户端认证;
- 建立明确的公钥吊销流程:如果外部服务私钥泄露或合作终止,及时从应用注册中移除对应公钥,阻止其继续获取令牌。
内容的提问来源于stack exchange,提问作者Jakub Rzepka
相关产品推荐
相关产品推荐

