如何在IdentityServer4中将Google Cloud KMS密钥用作SigningCredential?
解决方案
IdentityServer4 并不强制要求使用AddSigningCredential()传入本地密钥,你可以通过扩展内置接口直接对接Google Cloud KMS,也可以通过托管的密钥存储服务规避本地文件系统限制,以下是两种可落地的最优实现:
方案一:直接对接KMS实现签名(安全等级最高)
你可以自定义实现IdentityServer4的两个核心扩展接口,全程不需要导出KMS的私钥到应用侧:
- 实现
ISigningCredentialStore接口:仅需要调用KMS的公钥获取接口返回对应非对称密钥的公钥信息,公钥属于公开信息,无敏感风险 - 实现
ITokenSigningService接口:所有令牌签名逻辑直接调用KMS的AsymmetricSignAPI完成,私钥全程保留在KMS中,满足合规要求 - 在服务注册阶段替换掉IdentityServer4默认的
ISigningCredentialStore和ITokenSigningService实现即可,无需再调用AddSigningCredential()
方案二:托管证书存储(实现成本最低)
如果不想改动IdentityServer4的默认签名逻辑,可以使用Google Cloud Secret Manager托管你的签名密钥对:
- 将生成好的签名证书上传到Secret Manager,所有密钥的生命周期管理、权限控制都由Secret Manager负责
- App Engine运行时调用Secret Manager API拉取证书内容,直接将证书对象传入
AddSigningCredential()即可,不需要依赖本地文件系统 - 仅需要给App Engine的服务账号授予Secret Manager的对应密钥访问权限,不需要手动在应用侧存储任何敏感凭证
内容的提问来源于stack exchange,提问作者Patt
相关产品推荐
相关产品推荐

