我正在使用IdentityServer4,并且想要从文件中加载签名证书。例如,
var certificate = new X509Certificate2(
path,
password,
X509KeyStorageFlags.EphemeralKeySet);
services.AddIdentityServer()
.AddSigningCredential(certificate)
...
certificate.Dispose();
当我从IdentityServer请求令牌时,上述代码无法工作。但是如果我删除certificate.Dispose();
,它就能正常工作。
我还尝试了另一种方法。我使用证书的私钥创建了RsaSecurityKey
,并将其用于添加签名凭据。在这种情况下,处理不会导致任何问题。
var rsk = new RsaSecurityKey(certificate.GetRSAPrivateKey()))
services.AddIdentityServer()
.AddSigningCredential(rsk)
...
certificate.Dispose()
所以我的问题更普遍。我应该处理从现有证书创建的 X509Certificate2
对象吗?
来自 Microsoft Docs:
从 .NET Framework 4.6 开始,此类型实现 IDisposable 接口。当您使用完该类型后,应直接或间接地处理它。