var byteData = Encoding.Unicode.GetBytes( encodedSerializedHeader + "." + encodedPayload);
var hasher = new SHA256CryptoServiceProvider();
var digest = hasher.ComputeHash(byteData);
var signature = await keyVaultClient.SignAsync("https://offline-token-api.vault.azure.net/keys/offlinetokenprime256v1cert/3e99b8ce5dkkk3d4fb8bc6a645e7c6aa5de",
SecurityAlgorithms.EcdsaSha256, digest);
var encodedSignature = Base64UrlEncoder.Encode(signature.Result);
Now to fetch the public key for verification i am using following:-
var secret = keyVaultClient.GetSecretAsync(vaultAddress, "offlinetokenprime256v1cert").GetAwaiter().GetResult();
X509Certificate2Collection exportedCertCollection = new X509Certificate2Collection();
exportedCertCollection.Import(Convert.FromBase64String(secret.Value));
X509Certificate2 certFromSecret = exportedCertCollection.Cast<X509Certificate2>().Single(s => s.HasPrivateKey);
var publickeybyte = certFromSecret.GetPublicKey();
var publicekeybyte = certFromSecret.GetPublicKeyString();
var privatek = certFromSecret.GetECDsaPrivateKey();
var publicECDsa = LoadPublicKey(FromHexString(publicekeybyte));
var pubpri = certFromSecret.GetECDsaPublicKey();
var privateECDsa = LoadPrivateKey(FromHexString(privateKey));
var publiccECDsa = LoadPublicKey(FromHexString(publicKey));
for offline verification -
var securityToken = new JwtSecurityToken(token);
var securityTokenHandler = new JwtSecurityTokenHandler();
IdentityModelEventSource.ShowPII = true;
var validationParameters = new TokenValidationParameters()
{
ValidIssuer = securityToken.Issuer,
ValidAudience = securityToken.Audiences.First(),
IssuerSigningKey = new ECDsaSecurityKey(eCDsa)
};
SecurityToken stoken;
var claims = securityTokenHandler.ValidateToken(token, validationParameters, out stoken);
return true;
But am getting an error , this is not working anyone having another solution for the same ? I want to sign my token without fetching the private key out from the vault and want to sign the information encded inside the jwt token. any way to sign the token using the signasync and verify offline?