C# Ха sh и Проверка JWT с помощью Google KMS - PullRequest
0 голосов
/ 26 февраля 2020

Нам нужно иметь sh и проверять токен JWT, используя пользовательский AsymmetricSecurityKey, который использует Google Cloud KMS API для подписи / проверки токена.

ha sh logi c работает нормально , вот реализация:

public override byte[] Sign(byte[] input)
{
    string projectId = "<PROJECT-ID>";

    string location = "global";

    var locationName = new LocationName(projectId, location);

    // Instantiate a Cloud KMS client.
    var client = KeyManagementServiceClient.Create();

    var cryptoKeyVersion = new CryptoKeyVersionName(projectId, location, "test", "asymmetric-signing-key", "1");

    var publicKey = client.GetPublicKey(cryptoKeyVersion);

    byte[] hashedInput;
    using (var hasher = SHA256.Create())
    {
        hashedInput = hasher.ComputeHash(input);
    }

    var digest = new Digest
    {
        Sha256 = ByteString.CopyFrom(hashedInput)
    };

    var asymmetricSignResponse = client.AsymmetricSign(cryptoKeyVersion, digest);

    var output = asymmetricSignResponse.Signature.ToByteArray();

    return output;
}

Мне нужно знать, как проверить подпись, я пробовал много разных способов и библиотек, но всегда не удается

Документация Google KMS для создания и проверки цифровых подписей здесь не имеет реализации для. NET C#

Благодарим Вас за помощь!

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

мы работаем над тем, чтобы собрать эти образцы вместе и опубликовать в наших документах ( см. Здесь ). Вот пример:

KeyManagementServiceClient client = KeyManagementServiceClient.Create();
CryptoKeyVersionName keyVersionName = new CryptoKeyVersionName(
    projectId, locationId, keyRingId, cryptoKeyId, cryptoKeyVersionId);

byte[] content = File.ReadAllBytes(contentFile);
byte[] signature = File.ReadAllBytes(signatureFile);

string pubKeyPem = client.GetPublicKey(keyVersionName).Pem;
PemReader reader = new PemReader(new StringReader(pubKeyPem));
byte[] publicKeyInfoBytes = reader.ReadPemObject().Content;
AsymmetricKeyParameter key = PublicKeyFactory.CreateKey(publicKeyInfoBytes);

// The algorithm string to use will vary depending on the algorithm associated
// with the CryptoKeyVersion. `SignerUtilities.cs` in BouncyCastle source
// contains a mapping of algorithm strings.
// "SHA512withRSA/PSS" and "SHA256withRSA" (for PKCS1) are also useful example
// values.
const string algorithm = "SHA256withECDSA";

ISigner signer = SignerUtilities.GetSigner(algorithm);
signer.Init(false, key);
signer.BlockUpdate(content, 0, content.Length);
bool verified = signer.VerifySignature(signature);

Console.Write($"Signature verified: {verified}");
0 голосов
/ 29 февраля 2020

Я нашел репозиторий, который может быть полезен для вас, он содержит примеры KMS для NetCore и As pNet.

Для этого примера требуется. NET Core 2.0 или более поздняя версия. Это означает использование Visual Studio 2017 или командной строки.

https://github.com/GoogleCloudPlatform/dotnet-docs-samples/tree/master/kms/api

Возможно, эта ссылка будет полезна для вашего исследования:

https://medium.com/google-cloud/keeping-secrets-in-asp-nets-appsettings-json-5694e533dc87

...