using Azure.Identity;using Azure.Security.KeyVault.Keys;var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");var kvUri = $"https://{keyVaultName}.vault.azure.net";// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>var credential = new DefaultAzureCredential( DefaultAzureCredential.DefaultEnvironmentVariableName);// Or use a specific credential directly in production:// See https://learn.microsoft.com/dotnet/api/overview/azure/identity-readme?view=azure-dotnet#credential-classes// var credential = new ManagedIdentityCredential();var client = new KeyClient(new Uri(kvUri), credential);
var credential = new ClientSecretCredential( tenantId: "<tenant-id>", clientId: "<client-id>", clientSecret: "<client-secret>");var client = new KeyClient(new Uri(kvUri), credential);
// Get specific key (latest version)KeyVaultKey key = await client.GetKeyAsync("my-rsa-key");Console.WriteLine($"Key ID: {key.Id}");Console.WriteLine($"Key Type: {key.KeyType}");Console.WriteLine($"Version: {key.Properties.Version}");// Get specific versionKeyVaultKey keyVersion = await client.GetKeyAsync("my-rsa-key", "version-id");// List all keysawait foreach (KeyProperties keyProps in client.GetPropertiesOfKeysAsync()){ Console.WriteLine($"Key: {keyProps.Name}, Enabled: {keyProps.Enabled}");}// List key versionsawait foreach (KeyProperties version in client.GetPropertiesOfKeyVersionsAsync("my-rsa-key")){ Console.WriteLine($"Version: {version.Version}, Created: {version.CreatedOn}");}
// From KeyClientKeyVaultKey key = await client.GetKeyAsync("my-rsa-key");CryptographyClient cryptoClient = client.GetCryptographyClient( key.Name, key.Properties.Version);// Or create directly with key IDCryptographyClient cryptoClient = new CryptographyClient( new Uri("https://myvault.vault.azure.net/keys/my-rsa-key/version"), new DefaultAzureCredential());
// Data to signbyte[] data = Encoding.UTF8.GetBytes("Data to sign");// Sign data (computes hash internally)SignResult signResult = await cryptoClient.SignDataAsync( SignatureAlgorithm.RS256, data);// Verify signatureVerifyResult verifyResult = await cryptoClient.VerifyDataAsync( SignatureAlgorithm.RS256, data, signResult.Signature);Console.WriteLine($"Signature valid: {verifyResult.IsValid}");// Or sign pre-computed hashusing var sha256 = SHA256.Create();byte[] hash = sha256.ComputeHash(data);SignResult signHashResult = await cryptoClient.SignAsync( SignatureAlgorithm.RS256, hash);
using Azure.Security.KeyVault.Keys.Cryptography;var resolver = new KeyResolver(new DefaultAzureCredential());// Resolve key by ID to get CryptographyClientCryptographyClient cryptoClient = await resolver.ResolveAsync( new Uri("https://myvault.vault.azure.net/keys/my-key/version"));// Use for encryptionEncryptResult result = await cryptoClient.EncryptAsync( EncryptionAlgorithm.RsaOaep256, plaintext);