按照从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);
是操作系统版本还是与框架相关的东西?