在微服务项目中采用了IdentityServer4建立了授权/鉴权服务,用于发布AccessToken和验证。
随着用户的增长,高可用的集群部署方案确定。在验证部署后的授权服务时,授权/鉴权服务A发布的AccessToken,转发到授权/鉴权服务B时,返回http status:401,验证AccessToken失败;鉴权失败描述为:error="invalid_token", error_description="The signature key was not found"。
经过查证,发现是使用的签名凭据(证书)不一致。
因使用AddDeveloperSigningCredential 加密方式,在项目启动时,如果没有设置证书文件,IdentityServer4会默认生成一个临时的证书文件:tempkey.rsa;导致两个项目的证书不一致,验证失败。
解决方案:将授权/鉴权服务 加载相同内容的指定证书文件,即可使A发布的AccessToken在B中通过校验。
AddDeveloperSigningCredential 源码截图如下: