System.Security.Cryptography.CryptographicException:'不支持请求的操作

时间:2018-01-10 19:46:20

标签: identityserver4

按照从identityserver4文档创建身份服务器的示例,我在AddDeveloperSigningCredentials()

行上收到以下异常
  System.Security.Cryptography.CryptographicException
  HResult=0x80090029
  Message=The requested operation is not supported.
  Source=System.Core
  StackTrace:
   at System.Security.Cryptography.NCryptNative.ExportKey(SafeNCryptKeyHandle 
   key, String format)
   at System.Security.Cryptography.CngKey.Export(CngKeyBlobFormat format)
   at System.Security.Cryptography.RSACng.ExportParameters(Boolean includePrivateParameters)
   at Microsoft.Extensions.DependencyInjection.IdentityServerBuilderExtensionsCrypto.CreateRsaSecurityKey()
   at Microsoft.Extensions.DependencyInjection.IdentityServerBuilderExtensionsCrypto.AddDeveloperSigningCredential(IIdentityServerBuilder builder, Boolean persistKey, String filename)
   at WH_Identity.Startup.ConfigureServices(IServiceCollection services) in C:\Stage\WH_Identity\WH_Identity\Startup.cs:line 18

更多信息:

在web项目目标.net framework 4.6.1

中使用identityserver4时会引发上述情况

使用.NET核心2完成相同操作后,它会在根目录中运行并创建一个tempkey.rsa文件。

任何人都知道如何解决这个或任何解决方法?

-----------------编辑1/11/2018 --------------------

好吧,所以我进入了identityserver4源并获得了以下代码,并在Linqpad中运行了相同的结果。谷歌搜索没有提供太多关于此的信息。希望有人知道我做错了什么。

void Main()
{
    var key = CreateRsaSecurityKey();

    RSAParameters parameters;

    if (key.Rsa != null)
        parameters = key.Rsa.ExportParameters(includePrivateParameters: true);
    else
        parameters = key.Parameters;

    parameters.Dump();
    key.Dump();

}

public static RsaSecurityKey CreateRsaSecurityKey()
{
    var rsa = RSA.Create();
    RsaSecurityKey key;

        if (rsa is RSACryptoServiceProvider)
        {
            rsa.Dispose();
            var cng = new RSACng(2048);

            var parameters = cng.ExportParameters(includePrivateParameters: true);
            key = new RsaSecurityKey(parameters);
        }
        else
        {
            rsa.KeySize = 2048;
            key = new RsaSecurityKey(rsa);
        }


    key.KeyId = CryptoRandom.CreateUniqueId(16);
    return key;
}

错误就行了  var parameters = cng.ExportParameters(includePrivateParameters: true); 是操作系统版本还是与框架相关的东西?

0 个答案:

没有答案