Quickstart: Azure Key Vault certificate client library for .NET
Get started with the Azure Key Vault certificate client library for .NET. Azure Key Vault is a cloud service that provides a secure store for certificates. You can securely store keys, passwords, certificates, and other secrets. Azure key vaults may be created and managed through the Azure portal. In this quickstart, you learn how to create, retrieve, and delete certificates from an Azure key vault using the .NET client library.
Key Vault client library resources:
API reference documentation | Library source code | Package (NuGet)
For more information about Key Vault and certificates, see:
Prerequisites
- An Azure subscription - Create a trial subscription
- .NET 6 SDK or later
- Azure CLI
- A Key Vault - you can create one using Azure portal, Azure CLI, or Azure PowerShell.
This quickstart is using dotnet
and Azure CLI.
Setup
This quickstart is using Azure Identity library with Azure CLI to authenticate user to Azure Services. Developers can also use Visual Studio or Visual Studio Code to authenticate their calls, for more information, see Authenticate the client with Azure Identity client library.
Sign in to Azure
Run the
login
command.az cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.
If the CLI can open your default browser, it will do so and load an Azure sign-in page.
Otherwise, open a browser page at https://login.partner.microsoftonline.cn/common/oauth2/deviceauth and enter the authorization code displayed in your terminal.
Sign in with your account credentials in the browser.
Grant access to your key vault
To grant your application permissions to your key vault through Role-Based Access Control (RBAC), assign a role using the Azure CLI command az role assignment create.
az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Replace <app-id>
, <subscription-id>
, <resource-group-name>
and <your-unique-keyvault-name>
with your actual values. <app-id>
is the Application (client) ID of your registered application in Azure Entra.
Create new .NET console app
In a command shell, run the following command to create a project named
key-vault-console-app
:dotnet new console --name key-vault-console-app
Change to the newly created key-vault-console-app directory, and run the following command to build the project:
dotnet build
The build output should contain no warnings or errors.
Build succeeded. 0 Warning(s) 0 Error(s)
Install the packages
From the command shell, install the Azure Key Vault certificate client library for .NET:
dotnet add package Azure.Security.KeyVault.Certificates
For this quickstart, you'll also need to install the Azure Identity client library:
dotnet add package Azure.Identity
Set environment variables
The application obtains the key vault name from an environment variable called KEY_VAULT_NAME
.
Windows
set KEY_VAULT_NAME=<your-key-vault-name>
Windows PowerShell
$Env:KEY_VAULT_NAME="<your-key-vault-name>"
macOS or Linux
export KEY_VAULT_NAME=<your-key-vault-name>
Object model
The Azure Key Vault certificate client library for .NET allows you to manage certificates. The Code examples section shows how to create a client, set a certificate, retrieve a certificate, and delete a certificate.
Code examples
Add directives
Add the following directives to the top of Program.cs:
using System;
using Azure.Identity;
using Azure.Security.KeyVault.Certificates;
Authenticate and create a client
Application requests to most Azure services must be authorized. Using the DefaultAzureCredential class provided by the Azure Identity client library is the recommended approach for implementing passwordless connections to Azure services in your code. DefaultAzureCredential
supports multiple authentication methods and determines which method should be used at runtime. This approach enables your app to use different authentication methods in different environments (local vs. production) without implementing environment-specific code.
In this quickstart, DefaultAzureCredential
authenticates to key vault using the credentials of the local development user logged into the Azure CLI. When the application is deployed to Azure, the same DefaultAzureCredential
code can automatically discover and use a managed identity that is assigned to an App Service, Virtual Machine, or other services. For more information, see Managed Identity Overview.
In this example, the name of your key vault is expanded to the key vault URI, in the format https://<your-key-vault-name>.vault.azure.cn
. For more information about authenticating to key vault, see Developer's Guide.
string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.cn";
var client = new CertificateClient(new Uri(kvUri), new DefaultAzureCredential());
Save a certificate
In this example, for simplicity you can use self-signed certificate with default issuance policy. For this task, use the StartCreateCertificateAsync method. The method's parameters accepts a certificate name and the certificate policy.
var operation = await client.StartCreateCertificateAsync("myCertificate", CertificatePolicy.Default);
var certificate = await operation.WaitForCompletionAsync();
Note
If certificate name exists, above code will create new version of that certificate.
Retrieve a certificate
You can now retrieve the previously created certificate with the GetCertificateAsync method.
var certificate = await client.GetCertificateAsync("myCertificate");
Delete a certificate
Finally, let's delete and purge the certificate from your key vault with the StartDeleteCertificateAsync and PurgeDeletedCertificateAsync methods.
var operation = await client.StartDeleteCertificateAsync("myCertificate");
// You only need to wait for completion if you want to purge or recover the certificate.
await operation.WaitForCompletionAsync();
var certificate = operation.Value;
await client.PurgeDeletedCertificateAsync("myCertificate");
Sample code
Modify the .NET console app to interact with the Key Vault by completing the following steps:
Replace the code in Program.cs with the following code:
using System; using System.Threading.Tasks; using Azure.Identity; using Azure.Security.KeyVault.Certificates; namespace key_vault_console_app { class Program { static async Task Main(string[] args) { const string certificateName = "myCertificate"; var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME"); var kvUri = $"https://{keyVaultName}.vault.azure.cn"; var client = new CertificateClient(new Uri(kvUri), new DefaultAzureCredential()); Console.Write($"Creating a certificate in {keyVaultName} called '{certificateName}' ..."); CertificateOperation operation = await client.StartCreateCertificateAsync(certificateName, CertificatePolicy.Default); await operation.WaitForCompletionAsync(); Console.WriteLine(" done."); Console.WriteLine($"Retrieving your certificate from {keyVaultName}."); var certificate = await client.GetCertificateAsync(certificateName); Console.WriteLine($"Your certificate version is '{certificate.Value.Properties.Version}'."); Console.Write($"Deleting your certificate from {keyVaultName} ..."); DeleteCertificateOperation deleteOperation = await client.StartDeleteCertificateAsync(certificateName); // You only need to wait for completion if you want to purge or recover the certificate. await deleteOperation.WaitForCompletionAsync(); Console.WriteLine(" done."); Console.Write($"Purging your certificate from {keyVaultName} ..."); await client.PurgeDeletedCertificateAsync(certificateName); Console.WriteLine(" done."); } } }
Test and verify
Execute the following command to build the project
dotnet build
A variation of the following output appears:
Creating a certificate in mykeyvault called 'myCertificate' ... done.
Retrieving your certificate from mykeyvault.
Your certificate version is '8532359bced24e4bb2525f2d2050738a'.
Deleting your certificate from mykeyvault ... done
Purging your certificate from mykeyvault ... done
Next steps
In this quickstart, you created a key vault, stored a certificate, and retrieved that certificate.
To learn more about Key Vault and how to integrate it with your apps, see the following articles:
- Read an Overview of Azure Key Vault
- Read an Overview of certificates
- See an Access Key Vault from App Service Application Tutorial
- See an Access Key Vault from Virtual Machine Tutorial
- See the Azure Key Vault developer's guide
- Review the Key Vault security overview