1

我试图登入凭证(OpenIddict),但与指纹努力时,我得到错误:OpenIddict误差AddSigningCertificate

options.AddSigningCertificate(Configuration["Certificate"]/* db b9 12 .... 22 */); 

和错误:

Application startup exception: System.Security.Cryptography.CryptographicException: OpenCSP failed with error code 2148073494.

在这一行:

app.UseOpenIddict(); 

如果我尝试使用X509Certificate2我也会收到错误:

var cert = new X509Certificate2(Configuration["Certificate"]/*path to file.cer*/); 
options.AddSigningCertificate(cert); 

和错误:

System.InvalidOperationException: The certificate doesn't contain the required private key.

在同一行app.UseOpenIddict();

我使用的是与https协议相同的证书。这个可以吗? 我的活动令牌随机消失(我试图刷新令牌时得到invalid_token)。我发现在使用AddEphemeralSigningKey时会发生这种情况,因为连接丢失时(由于IIS空闲超时),所有令牌都将丢失。正因为如此,我试图使用AddSigningCertificate

还有别的办法吗?有人可以告诉我,证书有什么问题吗?谢谢。

我正在使用ASP.NET Core 1.1.1。
我为.cer文件的IIS用户添加读取权限。

certificate

回答

1

我解决我的问题与了SelfCert(https://s3.amazonaws.com/pluralsight-free/keith-brown/samples/SelfCert.zip)创建新的证书。
我加入证书项目源,并呼吁AddSigningCertificate:

  if (this.env.IsDevelopment()) 
       options.AddEphemeralSigningKey();  
      else 
       options.AddSigningCertificate(new FileStream(Directory.GetCurrentDirectory() + "/Resources/cert.pfx", FileMode.Open), "pass"); 

我也不得不加入到文件为IIS用户权利。阅读和执行权利是不够的。

就是这样。有用。

+1

使用单独的证书确实是正确的做法。注意:您应该考虑将其存储在机器商店中。您看到的错误很可能是由于IIS应用程序池标识不允许访问私钥导致的。您可以阅读http://bartwullems.blogspot.com/2012/02/grant-iis-75-access-to-certificate-in.html了解更多信息。 – Pinpoint