Вот как я генерирую свои публичные c и закрытые ключи:
var keyDirectory = System.IO.Directory.CreateDirectory(Environment.GetEnvironmentVariable(MSCASGlobals.KeyStorage));
foreach (FileInfo file in keyDirectory.GetFiles())
{
file.Delete();
}
var rsa = new RSACryptoServiceProvider(2048);
var rsaKeyPair = DotNetUtilities.GetRsaKeyPair(rsa);
var pkWriter = new StringWriter();
var pkPemWriter = new PemWriter(pkWriter);
pkPemWriter.WriteObject(rsaKeyPair.Private);
pkPemWriter.Writer.Flush();
string privateKey = pkWriter.ToString();
var pbWriter = new StringWriter();
var pbPemWriter = new PemWriter(pbWriter);
pbPemWriter.WriteObject(rsaKeyPair.Public);
pbPemWriter.Writer.Flush();
string publicKey = pbWriter.ToString();
using (StreamWriter outputFile = new StreamWriter(Path.Combine(keyDirectory.ToString(), "privatekey.pfx")))
{
outputFile.Write(privateKey);
}
using (StreamWriter outputFile = new StreamWriter(Path.Combine(keyDirectory.ToString(), "publickey.pub")))
{
outputFile.Write(publicKey);
}
Затем я запускаю свой валидатор jwt с этими параметрами в файле Startup.cs
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Environment.GetEnvironmentVariable(MSCASGlobals.MS_Jwt_SecretKey))),
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidIssuer = Environment.GetEnvironmentVariable(MSCASGlobals.MS_Jwt_Issuer),
ValidAudience = Environment.GetEnvironmentVariable(MSCASGlobals.MS_Jwt_Issuer),
ClockSkew = TimeSpan.Zero,
//Generate Key with password
TokenDecryptionKey = new X509SecurityKey(new X509Certificate2(Path.Combine(Environment.GetEnvironmentVariable(MSCASGlobals.KeyStorage),"privatekey.ppk")))
};
Однако , когда я достигаю этот код и пытаюсь пройти, я получаю следующее исключение:
Исключение: «Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException» в System.Security.Cryptography.X509Certificates.dll. «System.Reflection.TargetInvocationException» в System.Private.CoreLib.dll сгенерировано исключение: «Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException» в System.Private.CoreLib.dll сгенерировано исключение: «Internal.Cryptography.CryptoExgraph.CryptoWindows» Private.CoreLib.dll
Я что-то не так делаю? Мне удалось найти файл правильно. Что мне нужно для шифрования моего jwt?