'CspKeyContainerInfo'需要Windows加密API(CAPI),此平台上不提供

时间:2019-01-14 10:57:56

标签: asp.net-core jwt rsa identityserver4 asp.net-core-2.2

我已经将项目从v2.1升级到asp.net core v2.2,并且一切正常,在下面的代码中,我试图为IdentityServer4(v2.3.2)初始化RSA密钥。 ),并且在尝试获取令牌时遇到以下错误。

        try
        {
            var rsaProvider = new RSACryptoServiceProvider(2048);

            var rsaParametersPrivate =
                RsaExtensions.RsaParametersFromXmlFile(Configuration.GetSection("JwtSettings:rsaPrivateKeyXml")
                    .Value);
            rsaProvider.ImportParameters(rsaParametersPrivate);
            var securityKey = new RsaSecurityKey(rsaProvider);
            _signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.RsaSha256);

            _logger.LogInformation("InitializeRsaKey() successfully executed.");
        }
        catch (Exception ex)
        {
            var exception = new Exception("Identity Server RSA Key initialization failed. " + ex);
            _logger.LogError(exception, "InitializeRsaKey() method failed.");
            throw exception;
        }
  

“ CspKeyContainerInfo”需要Windows加密API(CAPI),该API在此平台上不可用。错误。

此外,我的项目在CentOS机器上运行,同时我在Windows 10上开发我的项目。因此,我知道Linux上Windows中缺少的东西。为解决该问题,我们将提供任何帮助和建议。

1 个答案:

答案 0 :(得分:6)

我研究了一些github问题,发现RSACryptoServiceProvider()继承了ICspAsymmetricAlgorithm,仅Windows才支持此类。有关详细信息,请查看here。为了解决该问题,我用var rsaProvider = new RSACryptoServiceProvider(2048);替换了var rsaProvider = RSA.Create(2048);行,它在CentOS上的.NET Core v2.2上可以正常工作。希望这对遇到同样问题的人有所帮助。