我已经将项目从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中缺少的东西。为解决该问题,我们将提供任何帮助和建议。
答案 0 :(得分:6)
我研究了一些github问题,发现RSACryptoServiceProvider()
继承了ICspAsymmetricAlgorithm
,仅Windows才支持此类。有关详细信息,请查看here。为了解决该问题,我用var rsaProvider = new RSACryptoServiceProvider(2048);
替换了var rsaProvider = RSA.Create(2048);
行,它在CentOS上的.NET Core v2.2上可以正常工作。希望这对遇到同样问题的人有所帮助。