diff --git a/sdk/keyvault/azure-security-keyvault-administration/README.md b/sdk/keyvault/azure-security-keyvault-administration/README.md index 9d69c23c4d7b..fa0053a86992 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/README.md +++ b/sdk/keyvault/azure-security-keyvault-administration/README.md @@ -7,11 +7,8 @@ The Azure Key Vault Administration library clients support administrative tasks ## Getting started ### Include the package - #### Include the BOM file - -Please include the azure-sdk-bom to your project to take dependency on the General Availability (GA) version of the library. In the following snippet, replace the {bom_version_to_target} placeholder with the version number. -To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/boms/azure-sdk-bom/README.md). +Please include the `azure-sdk-bom` to your project to take dependency on the General Availability (GA) version of the library. In the following snippet, replace the {bom_version_to_target} placeholder with the version number. To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/boms/azure-sdk-bom/README.md). ```xml @@ -26,6 +23,7 @@ To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/A ``` + and then include the direct dependency in the dependencies section without the version tag as shown below. ```xml @@ -38,8 +36,7 @@ and then include the direct dependency in the dependencies section without the v ``` #### Include direct dependency -If you want to take dependency on a particular version of the library that is not present in the BOM, -add the direct dependency to your project as follows. +If you want to take dependency on a particular version of the library that is not present in the BOM, add the direct dependency to your project as follows. [//]: # ({x-version-update-start;com.azure:azure-security-keyvault-administration;current}) ```xml @@ -53,112 +50,41 @@ add the direct dependency to your project as follows. ### Prerequisites - A [Java Development Kit (JDK)][jdk_link], version 8 or later. -- [Azure Subscription][azure_subscription] -- An existing [Azure Key Vault Managed HSM][azure_keyvault_mhsm]. If you need to create a Managed HSM, you can use the [Azure Cloud Shell][azure_cloud_shell] to create one with this Azure CLI command. Replace `` and `` with your own, unique names: - -```bash -az keyvault create --hsm-name --resource-group --administrators --location -``` +- An [Azure Subscription][azure_subscription]. +- An existing [Azure Key Vault Managed HSM][azure_keyvault_mhsm]. If you need to create a Managed HSM, you can do so using the Azure CLI by following the steps in [this document][azure_keyvault_mhsm_cli]. ### Authenticate the client -In order to interact with the Azure Key Vault service, you'll need to either create an instance of the [KeyVaultAccessControlClient](#create-an-access-control-client) or an instance of the class [KeyVaultBackupClient](#create-a-backup-client). You would need a **vault url**, which you may see as "DNS Name" in the portal, and **client secret credentials (client id, client secret, tenant id)** to instantiate a client object using the default `DefaultAzureCredential` examples shown in this document. - -The `DefaultAzureCredential` way of authentication by providing client secret credentials is being used in this getting started section but you can find more ways to authenticate with [azure-identity][azure_identity]. - -#### Create/Get credentials -To create/get client secret credentials you can use the [Azure Portal][azure_create_application_in_portal], [Azure CLI][azure_keyvault_cli_full] or [Azure Cloud Shell][azure_cloud_shell]. - -Here is an [Azure Cloud Shell][azure_cloud_shell] snippet below to - - * Create a service principal and configure its access to Azure resources: - -```bash -az ad sp create-for-rbac -n --skip-assignment -``` - -Output: - -```json -{ - "appId": "generated-app-ID", - "displayName": "some-app-name", - "name": "https://some-app-name", - "password": "random-password", - "tenant": "tenant-ID" -} -``` - -* Take note of the service principal objectId -```bash -az ad sp show --id --query objectId -``` - -Output: -``` -"" -``` - -* Use the returned credentials above to set the **AZURE_CLIENT_ID** (appId), **AZURE_CLIENT_SECRET** (password), and **AZURE_TENANT_ID** (tenantId) environment variables. The following example shows a way to do this in Bash: - -```bash -export AZURE_CLIENT_ID="generated-app-ID" -export AZURE_CLIENT_SECRET="random-password" -export AZURE_TENANT_ID="tenant-ID" -``` - -* Create the Managed HSM and grant the above mentioned service principal authorization to perform administrative operations on the Managed HSM (replace `` and `` with your own, unique names and `` with the value from above): - -```bash -az keyvault create --hsm-name --resource-group --administrators --location -``` - - This service principal is automatically added to the "Managed HSM Administrators" [built-in role][built_in_roles]. - -* Use the aforementioned Azure Key Vault name to retrieve details of your Key Vault, which also contain your Azure Key Vault URL: - -```bash -az keyvault show --name -``` - -#### Activate your managed HSM -All data plane commands are disabled until the HSM is activated. You will not be able to create keys or assign roles. Only the designated administrators that were assigned during the create command can activate the HSM. To activate the HSM you must download the security domain. +In order to interact with the Azure Key Vault service, you will need to create an instance of either the [`KeyVaultAccessControlClient`](#create-an-access-control-client)class or the [`KeyVaultBackupClient`](#create-a-backup-client) class, as well as a **vault url** (which you may see as "DNS Name" in the Azure Portal) and a credential object. The examples shown in this document use a credential object named [`DefaultAzureCredential`][default_azure_credential], which is appropriate for most scenarios, including local development and production environments. Additionally, we recommend using a [managed identity][managed_identity] for authentication in production environments. -To activate your HSM you need: -- Minimum 3 RSA key-pairs (maximum 10). -- Specify minimum number of keys required to decrypt the security domain (quorum). +You can find more information on different ways of authenticating and their corresponding credential types in the [Azure Identity documentation][azure_identity]. -To activate the HSM you send at least 3 (maximum 10) RSA public keys to the HSM, the HSM encrypts the security domain with these keys and sends it back. Once this security domain is successfully downloaded, your HSM is ready to use. You also need to specify quorum, which is the minimum number of private keys required to decrypt the security domain. +#### Create an access control client +Once you perform [the authentication set up that suits you best][default_azure_credential] and replaced **your-managed-hsm-url** with the URL for your key vault, you can create the `KeyVaultAccessControlClient`: -The example below shows how to use openssl to generate 3 self signed certificate. - -```bash -openssl req -newkey rsa:2048 -nodes -keyout cert_0.key -x509 -days 365 -out cert_0.cer -openssl req -newkey rsa:2048 -nodes -keyout cert_1.key -x509 -days 365 -out cert_1.cer -openssl req -newkey rsa:2048 -nodes -keyout cert_2.key -x509 -days 365 -out cert_2.cer -``` - -Use the `az keyvault security-domain download` command to download the security domain and activate your managed HSM. - -The example below, uses 3 RSA key pairs (only public keys are needed for this command) and sets the quorum to 2. - -```bash -az keyvault security-domain download --hsm-name --sd-wrapping-keys ./certs/cert_0.cer ./certs/cert_1.cer ./certs/cert_2.cer --sd-quorum 2 --security-domain-file ContosoMHSM-SD.json +```java readme-sample-createAccessControlClient +KeyVaultAccessControlClient keyVaultAccessControlClient = new KeyVaultAccessControlClientBuilder() + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildClient(); ``` -#### Controlling access to your managed HSM -The designated administrators assigned during creation are automatically added to the "Managed HSM Administrators" [built-in role][built_in_roles], who are able to download a security domain and [manage roles for data plane access][access_control], among other limited permissions. +> NOTE: For using an asynchronous client use `KeyVaultAccessControlAsyncClient` instead of `KeyVaultAccessControlClient` and call `buildAsyncClient()`. -To perform other actions on keys, you need to assign principals to other roles such as "Managed HSM Crypto User", which can perform non-destructive key operations: +#### Create a backup client +Once you perform [the authentication set up that suits you best][default_azure_credential] and replaced **your-managed-hsm-url** with the URL for your key vault, you can create the `KeyVaultBackupClient`: -```PowerShell -az keyvault role assignment create --hsm-name --role "Managed HSM Crypto User" --scope / --assignee-object-id --assignee-principal-type +```java readme-sample-createBackupClient +KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder() + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildClient(); ``` -Please read [best practices][best_practices] for properly securing your managed HSM. +> NOTE: For using an asynchronous client use `KeyVaultBackupAsyncClient` instead of `KeyVaultBackupClient` and call `buildAsyncClient()` ## Key concepts ### Key Vault Access Control client: -The Key Vault Access Control client performs the interactions with the Azure Key Vault service for getting, setting, deleting, and listing role assignments, as well as listing role definitions. Asynchronous (KeyVaultAccessControlAsyncClient) and synchronous (KeyVaultAccessControlClient) clients exist in the SDK allowing for the selection of a client based on an application's use case. Once you've initialized a role assignment, you can interact with the primary resource types in Key Vault. +The Key Vault Access Control client performs the interactions with the Azure Key Vault service for getting, setting, deleting, and listing role assignments, as well as listing role definitions. Asynchronous (`KeyVaultAccessControlAsyncClient`) and synchronous (`KeyVaultAccessControlClient`) clients exist in the SDK allowing for the selection of a client based on an application's use case. Once you've initialized a role assignment, you can interact with the primary resource types in Key Vault. ### Role Definition A role definition is a collection of permissions. It defines the operations that can be performed, such as read, write, and delete. It can also define the operations that are excluded from allowed operations. @@ -169,9 +95,9 @@ Role definitions can be listed and specified as part of a role assignment. A role assignment is the association of a role definition to a service principal. They can be created, listed, fetched individually, and deleted. ### Key Vault Backup client -The Key Vault Backup Client provides both synchronous and asynchronous operations for performing full key backups, full key restores, and selective key restores. Asynchronous (KeyVaultBackupAsyncClient) and synchronous (KeyVaultBackupClient) clients exist in the SDK allowing for the selection of a client based on an application's use case. +The Key Vault Backup Client provides both synchronous and asynchronous operations for performing full key backups, full key restores, and selective key restores. Asynchronous (`KeyVaultBackupAsyncClient`) and synchronous (`KeyVaultBackupClient`) clients exist in the SDK allowing for the selection of a client based on an application's use case. -> NOTE: The backing store for key backups is a blob storage container using Shared Access Signature authentication. For more details on creating a SAS token using the BlobServiceClient, see the [Azure Storage Blobs client README][storage_readme_sas_token]. Alternatively, it is possible to [generate a SAS token in Storage Explorer][portal_sas_token]. +> NOTE: The backing store for key backups is a blob storage container using Shared Access Signature authentication. For more details on creating a SAS token using the `BlobServiceClient`, see the [Azure Storage Blobs client README][storage_readme_sas_token]. Alternatively, it is possible to [generate a SAS token in Storage Explorer][portal_sas_token]. ### Backup Operation A backup operation represents a long-running operation for a full key backup. @@ -179,20 +105,9 @@ A backup operation represents a long-running operation for a full key backup. ### Restore Operation A restore operation represents a long-running operation for both a full key and selective key restore. -## Create an Access Control client -Once you've populated the **AZURE_CLIENT_ID**, **AZURE_CLIENT_SECRET**, and **AZURE_TENANT_ID** environment variables and replaced **your-key-vault-url** with the URI returned above, you can create the `KeyVaultAccessControlClient`: - -```java readme-sample-createAccessControlClient -KeyVaultAccessControlClient keyVaultAccessControlClient = new KeyVaultAccessControlClientBuilder() - .vaultUrl("") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildClient(); -``` - -> NOTE: For using an asynchronous client use `KeyVaultAccessControlAsyncClient` instead of `KeyVaultAccessControlClient` and call `buildAsyncClient()` - -## Examples -### Sync API +## Access control operations +### Examples +#### Sync API The following sections provide several code snippets covering some of the most common Azure Key Vault Access Control service tasks, including: - [List role definitions](#list-role-definitions) - [Create or update a role definition](#create-or-update-a-role-definition) @@ -202,7 +117,7 @@ The following sections provide several code snippets covering some of the most c - [Retrieve a role assignment](#retrieve-a-role-assignment) - [Delete a role assignment](#delete-a-role-assignment) -### List role definitions +##### List role definitions List the role definitions in the key vault by calling `listRoleDefinitions()`. ```java readme-sample-listRoleDefinitions @@ -213,7 +128,7 @@ roleDefinitions.forEach(roleDefinition -> System.out.printf("Retrieved role definition with name '%s'.%n", roleDefinition.getName())); ``` -### Create or update a role definition +##### Create or update a role definition Create or update a role definition in the key vault. The following example shows how to create a role definition with a randomly generated name. ```java readme-sample-setRoleDefinition @@ -223,7 +138,7 @@ System.out.printf("Created role definition with randomly generated name '%s' and roleDefinition.getName(), roleDefinition.getRoleName()); ``` -### Retrieve a role definition +##### Retrieve a role definition Get an existing role definition. To do this, the scope and 'name' property from an existing role definition are required. ```java readme-sample-getRoleDefinition @@ -235,7 +150,7 @@ System.out.printf("Retrieved role definition with name '%s' and role name '%s'.% roleDefinition.getRoleName()); ``` -### Delete a role definition +##### Delete a role definition Delete a role definition. To do this, the scope and 'name' property property from an existing role definition are required. ```java readme-sample-deleteRoleDefinition @@ -246,7 +161,7 @@ keyVaultAccessControlClient.deleteRoleDefinition(KeyVaultRoleScope.GLOBAL, roleD System.out.printf("Deleted role definition with name '%s'.%n", roleDefinitionName); ``` -### List role assignments +##### List role assignments List the role assignments in the key vault by calling `listRoleAssignments()`. ```java readme-sample-listRoleAssignments @@ -257,7 +172,7 @@ roleAssignments.forEach(roleAssignment -> System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName())); ``` -### Create a role assignment +##### Create a role assignment Create a role assignment in the key vault. To do this a role definition ID and a service principal object ID are required. A role definition ID can be obtained from the 'id' property of one of the role definitions returned from `listRoleDefinitions()`. @@ -279,7 +194,7 @@ System.out.printf("Created role assignment with randomly generated name '%s' for roleAssignment.getName(), roleAssignment.getProperties().getPrincipalId()); ``` -### Retrieve a role assignment +##### Retrieve a role assignment Get an existing role assignment. To do this, the 'name' property from an existing role assignment is required. ```java readme-sample-getRoleAssignment @@ -289,7 +204,7 @@ KeyVaultRoleAssignment roleAssignment = System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName()); ``` -### Delete a role assignment +##### Delete a role assignment To remove a role assignment from a service principal, the role assignment must be deleted. To do this, the 'name' property from an existing role assignment is required. ```java readme-sample-deleteRoleAssignment @@ -300,7 +215,7 @@ keyVaultAccessControlClient.deleteRoleAssignment(KeyVaultRoleScope.GLOBAL, roleA System.out.printf("Deleted role assignment with name '%s'.%n", roleAssignmentName); ``` -### Async API +#### Async API The following sections provide several code snippets covering some of the most common asynchronous Azure Key Vault Access Control service tasks, including: - [List role definitions asynchronously](#list-role-definitions-asynchronously) - [Create or update a role definition asynchronously](#create-or-update-a-role-definition-asynchronously) @@ -313,7 +228,7 @@ The following sections provide several code snippets covering some of the most c > Note : You should add `System.in.read()` or `Thread.sleep()` after the function calls in the main class/thread to allow async functions/operations to execute and finish before the main application/thread exits. -### List role definitions asynchronously +##### List role definitions asynchronously List the role definitions in the key vault by calling `listRoleDefinitions()`. ```java readme-sample-listRoleDefinitionsAsync @@ -322,7 +237,7 @@ keyVaultAccessControlAsyncClient.listRoleDefinitions(KeyVaultRoleScope.GLOBAL) System.out.printf("Retrieved role definition with name '%s'.%n", roleDefinition.getName())); ``` -### Create or update a role definition asynchronously +##### Create or update a role definition asynchronously Create or update a role definition in the key vault. The following example shows how to create a role definition with a randomly generated name. ```java readme-sample-setRoleDefinitionAsync @@ -332,7 +247,7 @@ keyVaultAccessControlAsyncClient.setRoleDefinition(KeyVaultRoleScope.GLOBAL) roleDefinition.getName(), roleDefinition.getRoleName())); ``` -### Retrieve a role definition asynchronously +##### Retrieve a role definition asynchronously Get an existing role definition. To do this, the 'name' property from an existing role definition is required. ```java readme-sample-getRoleDefinitionAsync @@ -344,7 +259,7 @@ keyVaultAccessControlAsyncClient.getRoleDefinition(KeyVaultRoleScope.GLOBAL, rol roleDefinition.getName(), roleDefinition.getRoleName())); ``` -### Delete a role definition asynchronously +##### Delete a role definition asynchronously Delete a role definition. To do this, the 'name' property from an existing role definition is required. ```java readme-sample-deleteRoleDefinitionAsync @@ -354,7 +269,7 @@ keyVaultAccessControlAsyncClient.deleteRoleDefinition(KeyVaultRoleScope.GLOBAL, .subscribe(unused -> System.out.printf("Deleted role definition with name '%s'.%n", roleDefinitionName)); ``` -### List role assignments asynchronously +##### List role assignments asynchronously List the role assignments in the key vault by calling `listRoleAssignments()`. ```java readme-sample-listRoleAssignmentsAsync @@ -363,7 +278,7 @@ keyVaultAccessControlAsyncClient.listRoleAssignments(KeyVaultRoleScope.GLOBAL) System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName())); ``` -### Create a role assignment asynchronously +##### Create a role assignment asynchronously Create a role assignment in the key vault. To do this a role definition ID and a service principal object ID are required. A role definition ID can be obtained from the 'id' property of one of the role definitions returned from `listRoleDefinitions()`. @@ -384,7 +299,7 @@ keyVaultAccessControlAsyncClient.createRoleAssignment(KeyVaultRoleScope.GLOBAL, + "'%s'.%n", roleAssignment.getName(), roleAssignment.getProperties().getPrincipalId())); ``` -### Retrieve a role assignment asynchronously +##### Retrieve a role assignment asynchronously Get an existing role assignment. To do this, the 'name' property from an existing role assignment is required. ```java readme-sample-getRoleAssignmentAsync @@ -395,7 +310,7 @@ keyVaultAccessControlAsyncClient.getRoleAssignment(KeyVaultRoleScope.GLOBAL, rol System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName())); ``` -### Delete a role assignment asynchronously +##### Delete a role assignment asynchronously To remove a role assignment from a service principal, the role assignment must be deleted. To do this, the 'name' property from an existing role assignment is required. ```java readme-sample-deleteRoleAssignmentAsync @@ -406,26 +321,15 @@ keyVaultAccessControlAsyncClient.deleteRoleAssignment(KeyVaultRoleScope.GLOBAL, System.out.printf("Deleted role assignment with name '%s'.%n", roleAssignmentName)); ``` -### Create a Backup client -Once you've populated the **AZURE_CLIENT_ID**, **AZURE_CLIENT_SECRET**, and **AZURE_TENANT_ID** environment variables and replaced **your-key-vault-url** with the URI returned above, you can create the `KeyVaultBackupClient`: - -```java readme-sample-createBackupClient -KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder() - .vaultUrl("") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildClient(); -``` - -> NOTE: For using an asynchronous client use `KeyVaultBackupAsyncClient` instead of `KeyVaultBackupClient` and call `buildAsyncClient()` - -## Examples -### Sync API +## Backup and restore operations +### Examples +#### Sync API The following sections provide several code snippets covering some of the most common Azure Key Vault Backup client tasks, including: - [Backup a Key Vault](#backup-a-collection-of-keys) - [Restore a Key Vault](#restore-a-collection-of-keys) - [Restore a key](#selectively-restore-a-key) -### Backup a collection of keys +##### Backup a collection of keys Back up an entire collection of keys using `beginBackup()`. ```java readme-sample-beginBackup @@ -452,7 +356,7 @@ if (finalPollResponse.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COM } ``` -### Restore a collection of keys +##### Restore a collection of keys Restore an entire collection of keys from a backup using `beginRestore()`. ```java readme-sample-beginRestore @@ -477,7 +381,7 @@ if (finalPollResponse.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COM } ``` -### Selectively restore a key +##### Selectively restore a key Restore a specific key from a backup using `beginSelectiveRestore()`. ```java readme-sample-beginSelectiveKeyRestore @@ -503,7 +407,7 @@ if (finalPollResponse.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COM } ``` -### Async API +#### Async API The following sections provide several code snippets covering some of the most common asynchronous Azure Key Vault Backup client tasks, including: - [Backup a Key Vault asynchronously](#backup-a-collection-of-keys-asynchronously) - [Restore a Key Vault asynchronously](#restore-a-collection-of-keys-asynchronously) @@ -511,7 +415,7 @@ The following sections provide several code snippets covering some of the most c > Note : You should add `System.in.read()` or `Thread.sleep()` after the function calls in the main class/thread to allow async functions/operations to execute and finish before the main application/thread exits. -### Backup a collection of keys asynchronously +##### Backup a collection of keys asynchronously Back up an entire collection of keys using `beginBackup()`. ```java readme-sample-beginBackupAsync @@ -529,7 +433,7 @@ keyVaultBackupAsyncClient.beginBackup(blobStorageUrl, sasToken) System.out.printf("Backup completed. The storage location of this backup is: %s.%n", folderUrl)); ``` -### Restore a collection of keys asynchronously +##### Restore a collection of keys asynchronously Restore an entire collection of keys from a backup using `beginRestore()`. ```java readme-sample-beginRestoreAsync @@ -546,7 +450,7 @@ keyVaultBackupAsyncClient.beginRestore(folderUrl, sasToken) .subscribe(unused -> System.out.printf("Backup restored successfully.%n")); ``` -### Selectively restore a key asynchronously +##### Selectively restore a key asynchronously Restore an entire collection of keys from a backup using `beginSelectiveRestore()`. ```java readme-sample-beginSelectiveKeyRestoreAsync @@ -601,26 +505,19 @@ This project has adopted the [Microsoft Open Source Code of Conduct][microsoft_c [source_code]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/src [api_documentation]: https://azure.github.io/azure-sdk-for-java [azkeyvault_docs]: https://docs.microsoft.com/azure/key-vault/ -[azure_identity]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/identity/azure-identity -[maven]: https://maven.apache.org/ +[azure_identity]: https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable [azure_subscription]: https://azure.microsoft.com/ [azure_keyvault]: https://docs.microsoft.com/azure/key-vault/quick-create-portal -[azure_keyvault_mhsm]: https://docs.microsoft.com/azure/key-vault/managed-hsm/quick-create-cli -[azure_cli]: https://docs.microsoft.com/cli/azure -[rest_api]: https://docs.microsoft.com/rest/api/keyvault/ +[azure_keyvault_mhsm]: https://docs.microsoft.com/azure/key-vault/managed-hsm/overview +[azure_keyvault_mhsm_cli]: https://docs.microsoft.com/azure/key-vault/managed-hsm/quick-create-cli +[default_azure_credential]: https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#defaultazurecredential +[managed_identity]: https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview [azkeyvault_rest]: https://docs.microsoft.com/rest/api/keyvault/ -[azure_create_application_in_portal]: https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal -[azure_keyvault_cli]: https://docs.microsoft.com/azure/key-vault/quick-create-cli -[azure_keyvault_cli_full]: https://docs.microsoft.com/cli/azure/keyvault?view=azure-cli-latest [administration_samples]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration -[access_control]: https://docs.microsoft.com/azure/key-vault/managed-hsm/access-control -[best_practices]: https://docs.microsoft.com/azure/key-vault/managed-hsm/best-practices -[built_in_roles]: https://docs.microsoft.com/azure/key-vault/managed-hsm/built-in-roles [storage_readme_sas_token]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/storage/azure-storage-blob#get-credentials [portal_sas_token]: https://docs.microsoft.com/azure/vs-azure-tools-storage-manage-with-storage-explorer?tabs=windows#generate-a-shared-access-signature-in-storage-explorer [performance_tuning]: https://github.com/Azure/azure-sdk-for-java/wiki/Performance-Tuning [jdk_link]: https://docs.microsoft.com/java/azure/jdk/?view=azure-java-stable -[azure_cloud_shell]: https://shell.azure.com/bash [http_clients_wiki]: https://github.com/Azure/azure-sdk-for-java/wiki/HTTP-clients [microsoft_code_of_conduct]: https://opensource.microsoft.com/codeofconduct/ diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlAsyncClient.java b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlAsyncClient.java index a961ae69a627..6102dd4000c6 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlAsyncClient.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlAsyncClient.java @@ -69,7 +69,7 @@ * *
  * KeyVaultAccessControlAsyncClient keyVaultAccessControlAsyncClient = new KeyVaultAccessControlClientBuilder()
- *     .vaultUrl("https://myaccount.managedhsm.azure.net/")
+ *     .vaultUrl("<your-managed-hsm-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildAsyncClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlClient.java b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlClient.java index cb8e9e4cfeb6..50617b00ed83 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlClient.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlClient.java @@ -31,7 +31,7 @@ * *
  * KeyVaultAccessControlClient keyVaultAccessControlClient = new KeyVaultAccessControlClientBuilder()
- *     .vaultUrl("https://myaccount.managedhsm.azure.net/")
+ *     .vaultUrl("<your-managed-hsm-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlClientBuilder.java b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlClientBuilder.java index 90c2e1dbd802..cbb131704d97 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlClientBuilder.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultAccessControlClientBuilder.java @@ -52,7 +52,7 @@ * *
  * KeyVaultAccessControlClient keyVaultAccessControlClient = new KeyVaultAccessControlClientBuilder()
- *     .vaultUrl("https://myaccount.managedhsm.azure.net/")
+ *     .vaultUrl("<your-managed-hsm-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildClient();
  * 
@@ -61,7 +61,7 @@ * *
  * KeyVaultAccessControlAsyncClient keyVaultAccessControlAsyncClient = new KeyVaultAccessControlClientBuilder()
- *     .vaultUrl("https://myaccount.managedhsm.azure.net/")
+ *     .vaultUrl("<your-managed-hsm-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildAsyncClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupAsyncClient.java b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupAsyncClient.java index 3580a7fd7436..ec33a046182f 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupAsyncClient.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupAsyncClient.java @@ -60,7 +60,7 @@ * *
  * KeyVaultBackupAsyncClient keyVaultBackupAsyncClient = new KeyVaultBackupClientBuilder()
- *     .vaultUrl("https://myaccount.managedhsm.azure.net/")
+ *     .vaultUrl("<your-managed-hsm-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildAsyncClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupClient.java b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupClient.java index c3020b71b241..82858b271629 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupClient.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupClient.java @@ -25,7 +25,7 @@ * *
  * KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder()
- *     .vaultUrl("https://myaccount.managedhsm.azure.net/")
+ *     .vaultUrl("<your-managed-hsm-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupClientBuilder.java b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupClientBuilder.java index e56700c48af7..97ddb1451ecf 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupClientBuilder.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/main/java/com/azure/security/keyvault/administration/KeyVaultBackupClientBuilder.java @@ -51,7 +51,7 @@ * *
  * KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder()
- *     .vaultUrl("https://myaccount.managedhsm.azure.net/")
+ *     .vaultUrl("<your-managed-hsm-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildClient();
  * 
@@ -60,7 +60,7 @@ * *
  * KeyVaultBackupAsyncClient keyVaultBackupAsyncClient = new KeyVaultBackupClientBuilder()
- *     .vaultUrl("https://myaccount.managedhsm.azure.net/")
+ *     .vaultUrl("<your-managed-hsm-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildAsyncClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/AccessControlHelloWorld.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/AccessControlHelloWorld.java index 9039afc5854d..c2d4218b541f 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/AccessControlHelloWorld.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/AccessControlHelloWorld.java @@ -23,13 +23,14 @@ public class AccessControlHelloWorld { */ public static void main(String[] args) { /* Instantiate a KeyVaultAccessControlClient that will be used to call the service. Notice that the client is - using default Azure credentials. To make default credentials work, ensure that environment variables - 'AZURE_CLIENT_ID', 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + using default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - To get started, you'll need a URI to an Azure Key Vault. See the README (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) + To get started, you'll need a URL to an Azure Key Vault Managed HSM. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) for links and instructions. */ KeyVaultAccessControlClient accessControlClient = new KeyVaultAccessControlClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/AccessControlHelloWorldAsync.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/AccessControlHelloWorldAsync.java index a8f4a70764e9..627531c66b97 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/AccessControlHelloWorldAsync.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/AccessControlHelloWorldAsync.java @@ -23,13 +23,14 @@ public class AccessControlHelloWorldAsync { */ public static void main(String[] args) throws InterruptedException { /* Instantiate a KeyVaultAccessControlAsyncClient that will be used to call the service. Notice that the client - is using default Azure credentials. To make default credentials work, ensure that environment variables - 'AZURE_CLIENT_ID', 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + is using default Azure credentials. For more information on this and other types of credentials, see this + document: https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - To get started, you'll need a URI to an Azure Key Vault. See the README (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) + To get started, you'll need a URL to an Azure Key Vault Managed HSM. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) for links and instructions. */ KeyVaultAccessControlAsyncClient accessControlAsyncClient = new KeyVaultAccessControlClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/BackupAndRestoreHelloWorld.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/BackupAndRestoreHelloWorld.java index 8a25979ba821..631ce6e49752 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/BackupAndRestoreHelloWorld.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/BackupAndRestoreHelloWorld.java @@ -20,16 +20,17 @@ public class BackupAndRestoreHelloWorld { * @throws IllegalArgumentException when an invalid key vault URL is passed. */ public static void main(String[] args) { - /* Instantiate a KeyVaultBackupClient that will be used to call the service. Notice that the client is using - default Azure credentials. To make default credentials work, ensure that environment variables - 'AZURE_CLIENT_ID', 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. - - To get started, you'll need a URI to an Azure Key Vault. See the README (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) - for links and instructions. */ KeyVaultBackupClient backupClient = new KeyVaultBackupClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); + /* Instantiate a KeyVaultBackupClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. + + To get started, you'll need a URL to an Azure Key Vault Managed HSM. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) + for links and instructions. */ /* Using the KeyVaultBackupClient, you can back up your entire collection of keys. The backing store for full key backups is a blob storage container using Shared Access Signature authentication. For more details on diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/BackupAndRestoreHelloWorldAsync.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/BackupAndRestoreHelloWorldAsync.java index 981f84038fbe..6a790aede4fb 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/BackupAndRestoreHelloWorldAsync.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/BackupAndRestoreHelloWorldAsync.java @@ -18,14 +18,15 @@ public class BackupAndRestoreHelloWorldAsync { * @throws IllegalArgumentException when an invalid key vault URL is passed. */ public static void main(String[] args) { - /* Instantiate a KeyVaultAccessControlClient that will be used to call the service. Notice that the client is - using default Azure credentials. To make default credentials work, ensure that environment variables - 'AZURE_CLIENT_ID', 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + /* Instantiate a KeyVaultBackupAsyncClient that will be used to call the service. Notice that the client is + using default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - To get started, you'll need a URI to an Azure Key Vault. See the README (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) + To get started, you'll need a URL to an Azure Key Vault Managed HSM. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) for links and instructions. */ KeyVaultBackupAsyncClient backupAsyncClient = new KeyVaultBackupClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/CreateRoleAssignmentsForDifferentScopes.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/CreateRoleAssignmentsForDifferentScopes.java index 5dae7963265e..649f4719be48 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/CreateRoleAssignmentsForDifferentScopes.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/CreateRoleAssignmentsForDifferentScopes.java @@ -20,14 +20,15 @@ public class CreateRoleAssignmentsForDifferentScopes { * @throws IllegalArgumentException when an invalid key vault URL is passed. */ public static void main(String[] args) { - /* Instantiate a KeyVaultBackupAsyncClient that will be used to call the service. Notice that the client is - using default Azure credentials. To make default credentials work, ensure that environment variables - 'AZURE_CLIENT_ID', 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + /* Instantiate a KeyVaultAccessControlClient that will be used to call the service. Notice that the client is + using default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - To get started, you'll need a URI to an 1Azure Key Vault. See the README (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) + To get started, you'll need a URL to an Azure Key Vault Managed HSM. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) for links and instructions. */ KeyVaultAccessControlClient accessControlClient = new KeyVaultAccessControlClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/ReadmeSamples.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/ReadmeSamples.java index 0bdd7a79214f..3c7fa337cd1c 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/ReadmeSamples.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/ReadmeSamples.java @@ -28,22 +28,22 @@ public class ReadmeSamples { private final KeyVaultAccessControlClient keyVaultAccessControlClient = new KeyVaultAccessControlClientBuilder() - .vaultUrl("") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); private final KeyVaultAccessControlAsyncClient keyVaultAccessControlAsyncClient = new KeyVaultAccessControlClientBuilder() - .vaultUrl("") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); private final KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder() - .vaultUrl("") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); private final KeyVaultBackupAsyncClient keyVaultBackupAsyncClient = new KeyVaultBackupClientBuilder() - .vaultUrl("") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); @@ -53,7 +53,7 @@ public class ReadmeSamples { public void createAccessControlClient() { // BEGIN: readme-sample-createAccessControlClient KeyVaultAccessControlClient keyVaultAccessControlClient = new KeyVaultAccessControlClientBuilder() - .vaultUrl("") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); // END: readme-sample-createAccessControlClient @@ -273,7 +273,7 @@ public void deleteRoleAssignmentAsync() { public void createBackupClient() { // BEGIN: readme-sample-createBackupClient KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder() - .vaultUrl("") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); // END: readme-sample-createBackupClient diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/SelectiveKeyRestore.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/SelectiveKeyRestore.java index 90bc7cb4fb36..dc475d132179 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/SelectiveKeyRestore.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/SelectiveKeyRestore.java @@ -21,14 +21,15 @@ public class SelectiveKeyRestore { * @throws IllegalArgumentException when an invalid key vault URL is passed. */ public static void main(String[] args) { - /* Instantiate an KeyVaultAccessControlClient that will be used to call the service. Notice that the client is - using default Azure credentials. To make default credentials work, ensure that environment variables - 'AZURE_CLIENT_ID', 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + /* Instantiate a KeyVaultBackupClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - To get started, you'll need a URI to an Azure Key Vault. See the README (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) + To get started, you'll need a URL to an Azure Key Vault Managed HSM. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-administration/README.md) for links and instructions. */ KeyVaultBackupClient backupClient = new KeyVaultBackupClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultAccessControlAsyncClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultAccessControlAsyncClientJavaDocCodeSnippets.java index f5dda61fd472..30c5d8371908 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultAccessControlAsyncClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultAccessControlAsyncClientJavaDocCodeSnippets.java @@ -27,7 +27,7 @@ public class KeyVaultAccessControlAsyncClientJavaDocCodeSnippets { public KeyVaultAccessControlAsyncClient createAsyncClient() { // BEGIN: com.azure.security.keyvault.administration.keyVaultAccessControlAsyncClient.instantiation KeyVaultAccessControlAsyncClient keyVaultAccessControlAsyncClient = new KeyVaultAccessControlClientBuilder() - .vaultUrl("https://myaccount.managedhsm.azure.net/") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); // END: com.azure.security.keyvault.administration.keyVaultAccessControlAsyncClient.instantiation diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultAccessControlClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultAccessControlClientJavaDocCodeSnippets.java index a230522723cc..49c255aa657b 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultAccessControlClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultAccessControlClientJavaDocCodeSnippets.java @@ -30,7 +30,7 @@ public class KeyVaultAccessControlClientJavaDocCodeSnippets { public KeyVaultAccessControlClient createClient() { // BEGIN: com.azure.security.keyvault.administration.keyVaultAccessControlClient.instantiation KeyVaultAccessControlClient keyVaultAccessControlClient = new KeyVaultAccessControlClientBuilder() - .vaultUrl("https://myaccount.managedhsm.azure.net/") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); // END: com.azure.security.keyvault.administration.keyVaultAccessControlClient.instantiation diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultBackupAsyncClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultBackupAsyncClientJavaDocCodeSnippets.java index e7d4182d6ed7..c2b666f99dc4 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultBackupAsyncClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultBackupAsyncClientJavaDocCodeSnippets.java @@ -22,7 +22,7 @@ public class KeyVaultBackupAsyncClientJavaDocCodeSnippets { public KeyVaultBackupAsyncClient createAsyncClient() { // BEGIN: com.azure.security.keyvault.administration.keyVaultBackupAsyncClient.instantiation KeyVaultBackupAsyncClient keyVaultBackupAsyncClient = new KeyVaultBackupClientBuilder() - .vaultUrl("https://myaccount.managedhsm.azure.net/") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); // END: com.azure.security.keyvault.administration.keyVaultBackupAsyncClient.instantiation diff --git a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultBackupClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultBackupClientJavaDocCodeSnippets.java index 2edb81d7abd6..a6444fdfe5d1 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultBackupClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-administration/src/samples/java/com/azure/security/keyvault/administration/codesnippets/KeyVaultBackupClientJavaDocCodeSnippets.java @@ -26,7 +26,7 @@ public class KeyVaultBackupClientJavaDocCodeSnippets { public KeyVaultBackupClient createClient() { // BEGIN: com.azure.security.keyvault.administration.keyVaultBackupClient.instantiation KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder() - .vaultUrl("https://myaccount.managedhsm.azure.net/") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); // END: com.azure.security.keyvault.administration.keyVaultBackupClient.instantiation diff --git a/sdk/keyvault/azure-security-keyvault-certificates/README.md b/sdk/keyvault/azure-security-keyvault-certificates/README.md index c2eb1ffc4167..6f1bced4f023 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/README.md +++ b/sdk/keyvault/azure-security-keyvault-certificates/README.md @@ -1,17 +1,14 @@ # Azure Key Vault Certificate client library for Java Azure Key Vault allows you to securely manage and tightly control your certificates. The Azure Key Vault Certificate client library supports certificates backed by RSA and EC keys. -Multiple certificates and multiple versions of the same certificate can be kept in the Key Vault. Cryptographic keys in Key Vault backing the certificates are represented as [JSON Web Key [JWK]][jwk_specification] objects. This library offers operations to create, retrieve, update, delete, purge, backup, restore, and list the certificates, as well as its versions. +Multiple certificates and multiple versions of the same certificate can be kept in the Key Vault. Cryptographic keys in Azure Key Vault backing the certificates are represented as [JSON Web Key (JWK)][jwk_specification] objects. This library offers operations to create, retrieve, update, delete, purge, backup, restore, and list the certificates, as well as its versions. [Source code][source_code] | [API reference documentation][api_documentation] | [Product documentation][azkeyvault_docs] | [Samples][certificates_samples] ## Getting started ### Include the package - #### Include the BOM file - -Please include the azure-sdk-bom to your project to take dependency on the General Availability (GA) version of the library. In the following snippet, replace the {bom_version_to_target} placeholder with the version number. -To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/boms/azure-sdk-bom/README.md). +Please include the `azure-sdk-bom` to your project to take dependency on the General Availability (GA) version of the library. In the following snippet, replace the {bom_version_to_target} placeholder with the version number. To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/boms/azure-sdk-bom/README.md). ```xml @@ -26,6 +23,7 @@ To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/A ``` + and then include the direct dependency in the dependencies section without the version tag as shown below. ```xml @@ -38,8 +36,7 @@ and then include the direct dependency in the dependencies section without the v ``` #### Include direct dependency -If you want to take dependency on a particular version of the library that is not present in the BOM, -add the direct dependency to your project as follows. +If you want to take dependency on a particular version of the library that is not present in the BOM, add the direct dependency to your project as follows. [//]: # ({x-version-update-start;com.azure:azure-security-keyvault-certificates;current}) ```xml @@ -53,68 +50,16 @@ add the direct dependency to your project as follows. ### Prerequisites - A [Java Development Kit (JDK)][jdk_link], version 8 or later. -- [Azure Subscription][azure_subscription] -- An existing [Azure Key Vault][azure_keyvault]. If you need to create a Key Vault, you can use the [Azure Cloud Shell][azure_cloud_shell] to create one with this Azure CLI command. Replace `` and `` with your own, unique names: - -```bash -az keyvault create --resource-group --name -``` +- An [Azure Subscription][azure_subscription]. +- An existing [Azure Key Vault][azure_keyvault]. If you need to create a key vault, you can do so in the Azure Portal by following the steps in [this document][azure_keyvault_portal]. Alternatively, you can use the Azure CLI by following the steps in [this document][azure_keyvault_cli]. ### Authenticate the client -In order to interact with the Azure Key Vault service, you'll need to create an instance of the [CertificateClient](#create-certificate-client) class. You need a **vault url** and **client secret credentials (client id, client secret, tenant id)** to instantiate a client object using the `DefaultAzureCredential` examples shown in this document. - -The `DefaultAzureCredential` way of authentication by providing client secret credentials is being used in this getting started section, but you can find more ways to authenticate with [azure-identity][azure_identity]. - -#### Create/Get credentials -To create/get client secret credentials you can use the [Azure Portal][azure_create_application_in_portal], [Azure CLI][azure_keyvault_cli_full] or [Azure Cloud Shell][azure_cloud_shell] +In order to interact with the Azure Key Vault service, you will need to create an instance of the [`CertificateClient`](#create-certificate-client) class, a **vault url** and a credential object. The examples shown in this document use a credential object named [`DefaultAzureCredential`][default_azure_credential], which is appropriate for most scenarios, including local development and production environments. Additionally, we recommend using a [managed identity][managed_identity] for authentication in production environments. -Here is an [Azure Cloud Shell][azure_cloud_shell] snippet below to - - * Create a service principal and configure its access to Azure resources: - -```bash -az ad sp create-for-rbac -n --skip-assignment -``` - -Output: - -```json -{ - "appId": "generated-app-ID", - "displayName": "dummy-app-name", - "name": "http://dummy-app-name", - "password": "random-password", - "tenant": "tenant-ID" -} -``` - -* Use the above returned credentials information to set the **AZURE_CLIENT_ID** (appId), **AZURE_CLIENT_SECRET** (password), and **AZURE_TENANT_ID** (tenantId) environment variables. The following example shows a way to do this in Bash: - -```bash -export AZURE_CLIENT_ID="generated-app-ID" -export AZURE_CLIENT_SECRET="random-password" -export AZURE_TENANT_ID="tenant-ID" -``` - -* Grant the aforementioned application authorization to perform certificate operations on the Key Vault: - -```bash -az keyvault set-policy --name --spn $AZURE_CLIENT_ID --certificate-permissions backup delete get list create update -``` - -> --certificate-permissions: -> Accepted values: backup, create, delete, deleteissuers, get, getissuers, import, list, listissuers, managecontacts, manageissuers, purge, recover, restore, setissuers, update - -If you have enabled role-based access control (RBAC) for Key Vault instead, you can find roles like "Key Vault Certificates Officer" in our [RBAC guide][rbac_guide]. - -* Use the aforementioned Key Vault name to retrieve details of your Key Vault, which also contain your Key Vault URL: - -```bash -az keyvault show --name -``` +You can find more information on different ways of authenticating and their corresponding credential types in the [Azure Identity documentation][azure_identity]. #### Create certificate client -Once you've populated the **AZURE_CLIENT_ID**, **AZURE_CLIENT_SECRET**, and **AZURE_TENANT_ID** environment variables and replaced **your-key-vault-url** with the URI returned above, you can create the CertificateClient: +Once you perform [the authentication set up that suits you best][default_azure_credential] and replaced **your-key-vault-url** with the URL for your key vault, you can create the `CertificateClient`: ```java readme-sample-createCertificateClient CertificateClient certificateClient = new CertificateClientBuilder() @@ -123,7 +68,7 @@ CertificateClient certificateClient = new CertificateClientBuilder() .buildClient(); ``` -> NOTE: For using an asynchronous client use CertificateAsyncClient instead of CertificateClient and call `buildAsyncClient()` +> NOTE: For using an asynchronous client use `CertificateAsyncClient` instead of `CertificateClient` and call `buildAsyncClient()`. ## Key concepts ### Certificate @@ -133,7 +78,7 @@ Azure Key Vault supports certificates with secret content types (`PKCS12` & `PEM * updated: Indicates when this version of the certificate was updated. ### Certificate client -The certificate client performs the interactions with the Azure Key Vault service for getting, setting, updating, deleting, and listing certificates and its versions. The client also supports CRUD operations for certificate issuers and contacts in the key vault. Asynchronous (CertificateAsyncClient) and synchronous (CertificateClient) clients exist in the SDK allowing for the selection of a client based on an application's use case. Once you've initialized a certificate, you can interact with the primary resource types in Azure Key Vault. +The certificate client performs the interactions with the Azure Key Vault service for getting, setting, updating, deleting, and listing certificates and its versions. The client also supports CRUD operations for certificate issuers and contacts in the key vault. Asynchronous (`CertificateAsyncClient`) and synchronous (`CertificateClient`) clients exist in the SDK allowing for the selection of a client based on an application's use case. Once you've initialized a certificate, you can interact with the primary resource types in Azure Key Vault. ## Examples ### Sync API @@ -324,24 +269,19 @@ This project has adopted the [Microsoft Open Source Code of Conduct][microsoft_c [source_code]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/src [api_documentation]: https://azure.github.io/azure-sdk-for-java [azkeyvault_docs]: https://docs.microsoft.com/azure/key-vault/ -[azure_identity]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/identity/azure-identity -[maven]: https://maven.apache.org/ +[azure_identity]: https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable [azure_subscription]: https://azure.microsoft.com/ -[azure_keyvault]: https://docs.microsoft.com/azure/key-vault/certificates/quick-create-portal -[azure_cli]: https://docs.microsoft.com/cli/azure -[rest_api]: https://docs.microsoft.com/rest/api/keyvault/ +[azure_keyvault]: https://docs.microsoft.com/azure/key-vault/general/overview +[azure_keyvault_cli]: https://docs.microsoft.com/azure/key-vault/general/quick-create-cli +[azure_keyvault_portal]: https://docs.microsoft.com/azure/key-vault/general/quick-create-portal +[default_azure_credential]: https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#defaultazurecredential [azkeyvault_rest]: https://docs.microsoft.com/rest/api/keyvault/ -[azure_create_application_in_portal]: https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal -[azure_keyvault_cli]: https://docs.microsoft.com/azure/key-vault/quick-create-cli -[azure_keyvault_cli_full]: https://docs.microsoft.com/cli/azure/keyvault?view=azure-cli-latest [certificates_samples]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates [samples_readme]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/src/samples/README.md [performance_tuning]: https://github.com/Azure/azure-sdk-for-java/wiki/Performance-Tuning [jdk_link]: https://docs.microsoft.com/java/azure/jdk/?view=azure-java-stable -[azure_cloud_shell]: https://shell.azure.com/bash [jwk_specification]: https://tools.ietf.org/html/rfc7517 [http_clients_wiki]: https://github.com/Azure/azure-sdk-for-java/wiki/HTTP-clients [microsoft_code_of_conduct]: https://opensource.microsoft.com/codeofconduct/ -[rbac_guide]: https://docs.microsoft.com/azure/key-vault/general/rbac-guide ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%2Fkeyvault%2Fazure-security-keyvault-certificates%2FREADME.png) diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateAsyncClient.java b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateAsyncClient.java index 7fb7923262e9..cea1d028c6bd 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateAsyncClient.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateAsyncClient.java @@ -84,7 +84,7 @@ *
  * CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder()
  *     .credential(new DefaultAzureCredentialBuilder().build())
- *     .vaultUrl("https://myvault.vault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
  *     .buildAsyncClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClient.java b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClient.java index e3e1a8a2b01c..8a527fbd0899 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClient.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClient.java @@ -48,7 +48,7 @@ *
  * CertificateClient certificateClient = new CertificateClientBuilder()
  *     .credential(new DefaultAzureCredentialBuilder().build())
- *     .vaultUrl("https://myvault.vault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
  *     .buildClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java index 82f0f236ad8a..976d45a742e7 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/main/java/com/azure/security/keyvault/certificates/CertificateClientBuilder.java @@ -53,7 +53,7 @@ *
  * CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder()
  *     .credential(new DefaultAzureCredentialBuilder().build())
- *     .vaultUrl("https://myvault.vault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
  *     .buildAsyncClient();
  * 
@@ -62,33 +62,33 @@ *

The {@link HttpLogDetailLevel log detail level}, multiple custom {@link HttpLoggingPolicy policies} and custom * {@link HttpClient http client} can be optionally configured in the {@link CertificateClientBuilder}.

* - * + * *
  * CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder()
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .httpClient(HttpClient.createDefault())
  *     .buildAsyncClient();
  * 
- * + * * *

Alternatively, custom {@link HttpPipeline http pipeline} with custom {@link HttpPipelinePolicy} policies and * {@link String vaultUrl} * can be specified. It provides finer control over the construction of {@link CertificateAsyncClient} and {@link * CertificateClient}

* - * + * *
  * HttpPipeline pipeline = new HttpPipelineBuilder()
  *     .policies(new KeyVaultCredentialPolicy(new DefaultAzureCredentialBuilder().build()), new RetryPolicy())
  *     .build();
  * CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder()
  *     .pipeline(pipeline)
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .buildAsyncClient();
  * 
- * + * * *

The minimal configuration options required by {@link CertificateClientBuilder certificateClientBuilder} to build * {@link CertificateClient} @@ -98,7 +98,7 @@ *

  * CertificateClient certificateClient = new CertificateClientBuilder()
  *     .credential(new DefaultAzureCredentialBuilder().build())
- *     .vaultUrl("https://myvault.vault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
  *     .buildClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/BackupAndRestoreOperations.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/BackupAndRestoreOperations.java index a0f5660516a5..0341156d2615 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/BackupAndRestoreOperations.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/BackupAndRestoreOperations.java @@ -39,17 +39,20 @@ public class BackupAndRestoreOperations { * @throws IOException when writing backup to file is unsuccessful. */ public static void main(String[] args) throws IOException, InterruptedException, IllegalArgumentException { + /* Instantiate a CertificateClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a certificate client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/README.md) + for links and instructions. */ CertificateClient certificateClient = new CertificateClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); - // Let's create a self signed certificate valid for 1 year. if the certificate - // already exists in the key vault, then a new version of the certificate is created. + // Let's create a self-signed certificate valid for 1 year. If the certificate already exists in the key vault, + // then a new version of the certificate is created. CertificatePolicy policy = new CertificatePolicy("Self", "CN=SelfSignedJavaPkcs12") .setSubjectAlternativeNames(new SubjectAlternativeNames().setEmails(Arrays.asList("wow@gmail.com"))) .setKeyReusable(true) @@ -58,7 +61,8 @@ public static void main(String[] args) throws IOException, InterruptedException, Map tags = new HashMap<>(); tags.put("foo", "bar"); - SyncPoller certificatePoller = certificateClient.beginCreateCertificate("certificateName", policy, true, tags); + SyncPoller certificatePoller = + certificateClient.beginCreateCertificate("certificateName", policy, true, tags); certificatePoller.waitUntil(LongRunningOperationStatus.SUCCESSFULLY_COMPLETED); KeyVaultCertificate cert = certificatePoller.getFinalResult(); @@ -67,7 +71,9 @@ public static void main(String[] args) throws IOException, InterruptedException, // For long term storage, it is ideal to write the backup to a file. String backupFilePath = "YOUR_BACKUP_FILE_PATH"; byte[] certificateBackup = certificateClient.backupCertificate("certificateName"); + System.out.printf("Backed up certificate with back up blob length %d", certificateBackup.length); + writeBackupToFile(certificateBackup, backupFilePath); // The certificate is no longer in use, so you delete it. @@ -75,35 +81,45 @@ public static void main(String[] args) throws IOException, InterruptedException, certificateClient.beginDeleteCertificate("certificateName"); // Deleted Certificate is accessible as soon as polling beings. PollResponse pollResponse = deletedCertificatePoller.poll(); + System.out.printf("Deleted certificate with name %s and recovery id %s", pollResponse.getValue().getName(), pollResponse.getValue().getRecoveryId()); + deletedCertificatePoller.waitForCompletion(); - //To ensure certificate is deleted on server side. + // To ensure the certificate is deleted server-side. Thread.sleep(30000); // If the vault is soft-delete enabled, then you need to purge the certificate as well for permanent deletion. certificateClient.purgeDeletedCertificateWithResponse("certificateName", new Context("key1", "value1")); - //To ensure certificate is purged on server side. + // To ensure the certificate is purged server-side. Thread.sleep(15000); - // After sometime, the certificate is required again. We can use the backup value to restore it in the key vault. + // After sometime, the certificate is required again. We can use the backup value to restore it in the key + // vault. byte[] backupFromFile = Files.readAllBytes(new File(backupFilePath).toPath()); KeyVaultCertificate restoredCertificate = certificateClient.restoreCertificateBackup(backupFromFile); - System.out.printf(" Restored certificate with name %s and id %s", restoredCertificate.getProperties().getName(), restoredCertificate.getProperties().getId()); + + System.out.printf(" Restored certificate with name %s and id %s", restoredCertificate.getProperties().getName(), + restoredCertificate.getProperties().getId()); } private static void writeBackupToFile(byte[] bytes, String filePath) { try { File file = new File(filePath); + if (file.exists()) { file.delete(); } + file.createNewFile(); + OutputStream os = new FileOutputStream(file); os.write(bytes); + System.out.println("Successfully wrote backup to file."); + // Close the file os.close(); } catch (IOException e) { diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/BackupAndRestoreOperationsAsync.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/BackupAndRestoreOperationsAsync.java index a8d9fd54875d..1629f9d2a789 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/BackupAndRestoreOperationsAsync.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/BackupAndRestoreOperationsAsync.java @@ -31,18 +31,20 @@ public class BackupAndRestoreOperationsAsync { * @throws IOException when writing backup to file is unsuccessful. */ public static void main(String[] args) throws IOException, InterruptedException, IllegalArgumentException { + /* Instantiate a CertificateAsyncClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - - // Instantiate an async key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/README.md) + for links and instructions. */ CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - // Let's create a self signed certificate valid for 1 year. if the certificate - // already exists in the key vault, then a new version of the certificate is created. + // Let's create a self-signed certificate valid for 1 year. If the certificate already exists in the key vault, + // then a new version of the certificate is created. CertificatePolicy policy = new CertificatePolicy("Self", "CN=SelfSignedJavaPkcs12") .setSubjectAlternativeNames(new SubjectAlternativeNames().setEmails(Arrays.asList("wow@gmail.com"))) .setKeyReusable(true) @@ -64,6 +66,7 @@ public static void main(String[] args) throws IOException, InterruptedException, // Backups are good to have, if in case certificates get accidentally deleted by you. // For long term storage, it is ideal to write the backup to a file. String backupFilePath = "YOUR_BACKUP_FILE_PATH"; + certificateAsyncClient.backupCertificate("certificateName") .subscribe(certificateBackupResponse -> { writeBackupToFile(certificateBackupResponse, backupFilePath); @@ -79,7 +82,8 @@ public static void main(String[] args) throws IOException, InterruptedException, System.out.println("Delete Certificate Name: " + pollResponse.getValue().getName()); System.out.println("Certificate Delete Date: " + pollResponse.getValue().getDeletedOn().toString()); }); - //To ensure certificate is deleted on server side. + + // To ensure the certificate is deleted server-side. Thread.sleep(30000); // If the vault is soft-delete enabled, then you need to purge the certificate as well for permanent deletion. @@ -87,29 +91,35 @@ public static void main(String[] args) throws IOException, InterruptedException, .subscribe(purgeResponse -> System.out.printf("Purge Status response %d %n", purgeResponse.getStatusCode())); - //To ensure certificate is purged on server side. + // To ensure certificate is purged server-side. Thread.sleep(15000); // After sometime, the certificate is required again. We can use the backup value to restore it in the key vault. byte[] backupFromFile = Files.readAllBytes(new File(backupFilePath).toPath()); + certificateAsyncClient.restoreCertificateBackup(backupFromFile) .subscribe(certificateResponse -> System.out.printf("Restored Certificate with name %s and key id %s %n", certificateResponse.getProperties().getName(), certificateResponse.getKeyId())); - //To ensure certificate is restored on server side. + // To ensure the certificate is restored server-side. Thread.sleep(15000); } private static void writeBackupToFile(byte[] bytes, String filePath) { try { File file = new File(filePath); + if (file.exists()) { file.delete(); } + file.createNewFile(); + OutputStream os = new FileOutputStream(file); os.write(bytes); + System.out.println("Successfully wrote backup to file."); + // Close the file os.close(); } catch (IOException e) { diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/CertificateAsyncClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/CertificateAsyncClientJavaDocCodeSnippets.java index 22e39be5c95d..a32b8fcbc3e2 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/CertificateAsyncClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/CertificateAsyncClientJavaDocCodeSnippets.java @@ -32,25 +32,24 @@ * This class contains code samples for generating javadocs through doclets for {@link CertificateAsyncClient} */ public final class CertificateAsyncClientJavaDocCodeSnippets { - - private String key1 = "key1"; - private String key2 = "key2"; - private String value1 = "val1"; - private String value2 = "val2"; + private final String key1 = "key1"; + private final String key2 = "key2"; + private final String value1 = "val1"; + private final String value2 = "val2"; /** * Generates code sample for creating a {@link CertificateAsyncClient} * @return An instance of {@link CertificateAsyncClient} */ public CertificateAsyncClient createAsyncClientWithHttpclient() { - // BEGIN: com.azure.security.keyvault.certificates.CertificateAsyncClient.withhttpclient.instantiation + // BEGIN: com.azure.security.keyvault.certificates.CertificateAsyncClient.instantiation.withHttpClient CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder() .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)) - .vaultUrl("https://myvault.azure.net/") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .httpClient(HttpClient.createDefault()) .buildAsyncClient(); - // END: com.azure.security.keyvault.certificates.CertificateAsyncClient.withhttpclient.instantiation + // END: com.azure.security.keyvault.certificates.CertificateAsyncClient.instantiation.withHttpClient return certificateAsyncClient; } @@ -62,7 +61,7 @@ private CertificateAsyncClient getCertificateAsyncClient() { // BEGIN: com.azure.security.keyvault.certificates.CertificateAsyncClient.instantiation CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder() .credential(new DefaultAzureCredentialBuilder().build()) - .vaultUrl("https://myvault.vault.azure.net/") + .vaultUrl("") .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)) .buildAsyncClient(); // END: com.azure.security.keyvault.certificates.CertificateAsyncClient.instantiation @@ -74,15 +73,15 @@ private CertificateAsyncClient getCertificateAsyncClient() { * @return An instance of {@link CertificateAsyncClient} */ public CertificateAsyncClient createAsyncClientWithPipeline() { - // BEGIN: com.azure.security.keyvault.certificates.CertificateAsyncClient.pipeline.instantiation + // BEGIN: com.azure.security.keyvault.certificates.CertificateAsyncClient.instantiation.withPipeline HttpPipeline pipeline = new HttpPipelineBuilder() .policies(new KeyVaultCredentialPolicy(new DefaultAzureCredentialBuilder().build()), new RetryPolicy()) .build(); CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder() .pipeline(pipeline) - .vaultUrl("https://myvault.azure.net/") + .vaultUrl("") .buildAsyncClient(); - // END: com.azure.security.keyvault.certificates.CertificateAsyncClient.pipeline.instantiation + // END: com.azure.security.keyvault.certificates.CertificateAsyncClient.instantiation.withPipeline return certificateAsyncClient; } diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/CertificateClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/CertificateClientJavaDocCodeSnippets.java index 7692c3ea3481..72d93d8ac79b 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/CertificateClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/CertificateClientJavaDocCodeSnippets.java @@ -35,11 +35,10 @@ * This class contains code samples for generating javadocs through doclets for {@link CertificateClient} */ public final class CertificateClientJavaDocCodeSnippets { - - private String key1 = "key1"; - private String key2 = "key2"; - private String value1 = "val1"; - private String value2 = "val2"; + private final String key1 = "key1"; + private final String key2 = "key2"; + private final String value1 = "val1"; + private final String value2 = "val2"; /** * Implementation for.CertificateClient @@ -50,7 +49,7 @@ private CertificateClient getCertificateClient() { // BEGIN: com.azure.security.keyvault.certificates.CertificateClient.instantiation CertificateClient certificateClient = new CertificateClientBuilder() .credential(new DefaultAzureCredentialBuilder().build()) - .vaultUrl("https://myvault.vault.azure.net/") + .vaultUrl("") .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)) .buildClient(); // END: com.azure.security.keyvault.certificates.CertificateClient.instantiation diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/HelloWorld.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/HelloWorld.java index 1d32bbfe452b..878f4de93af4 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/HelloWorld.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/HelloWorld.java @@ -25,7 +25,6 @@ * Sample demonstrates how to set, get, update and delete a certificate. */ public class HelloWorld { - /** * Authenticates with the key vault and shows how to set, get, update and delete a certificate in the key vault. * @@ -34,17 +33,20 @@ public class HelloWorld { * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException, IllegalArgumentException { + /* Instantiate a CertificateClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a certificate client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/README.md) + for links and instructions. */ CertificateClient certificateClient = new CertificateClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildClient(); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildClient(); - // Let's create a self signed certificate valid for 1 year. if the certificate - // already exists in the key vault, then a new version of the certificate is created. + // Let's create a self-signed certificate valid for 1 year. If the certificate already exists in the key vault, + // then a new version of the certificate is created. CertificatePolicy policy = new CertificatePolicy("Self", "CN=SelfSignedJavaPkcs12") .setSubjectAlternativeNames(new SubjectAlternativeNames().setEmails(Arrays.asList("wow@gmail.com"))) .setKeyReusable(true) @@ -54,67 +56,78 @@ public static void main(String[] args) throws InterruptedException, IllegalArgum Map tags = new HashMap<>(); tags.put("foo", "bar"); - SyncPoller certificatePoller = certificateClient.beginCreateCertificate("certificateName", policy, true, tags); + SyncPoller certificatePoller = + certificateClient.beginCreateCertificate("certificateName", policy, true, tags); certificatePoller.waitUntil(LongRunningOperationStatus.SUCCESSFULLY_COMPLETED); KeyVaultCertificate cert = certificatePoller.getFinalResult(); - // Let's Get the latest version of the certificate from the key vault. + // Let's get the latest version of the certificate from the key vault. KeyVaultCertificate certificate = certificateClient.getCertificate("certificateName"); - System.out.printf("Certificate is returned with name %s and secret id %s \n", certificate.getProperties().getName(), - certificate.getSecretId()); - // After some time, we need to disable the certificate temporarily, so we update the enabled status of the certificate. - // The update method can be used to update the enabled status of the certificate. + System.out.printf("Certificate is returned with name %s and secret id %s \n", + certificate.getProperties().getName(), certificate.getSecretId()); + + // After some time, we need to disable the certificate temporarily, so we update the enabled status of the + // certificate. The update method can be used to update the enabled status of the certificate. certificate.getProperties().setEnabled(false); + KeyVaultCertificate updatedCertificate = certificateClient.updateCertificateProperties(certificate.getProperties()); - System.out.printf("Certificate's updated enabled status is %s \n", updatedCertificate.getProperties().isEnabled()); + System.out.printf("Certificate's updated enabled status is %s \n", updatedCertificate.getProperties().isEnabled()); - //Let's create a certificate issuer. + // Let's create a certificate issuer. CertificateIssuer issuer = new CertificateIssuer("myIssuer", "Test"); CertificateIssuer myIssuer = certificateClient.createIssuer(issuer); + System.out.printf("Issuer created with name %s and provider %s", myIssuer.getName(), myIssuer.getProvider()); // Let's fetch the issuer we just created from the key vault. myIssuer = certificateClient.getIssuer("myIssuer"); - System.out.printf("Issuer retrieved with name %s and provider %s", myIssuer.getName(), myIssuer.getProvider()); + System.out.printf("Issuer retrieved with name %s and provider %s", myIssuer.getName(), myIssuer.getProvider()); - //Let's create a certificate signed by our issuer. + // Let's create a certificate signed by our issuer. certificateClient.beginCreateCertificate("myCertificate", - new CertificatePolicy("myIssuer", "CN=SelfSignedJavaPkcs12"), true, tags) + new CertificatePolicy("myIssuer", "CN=SelfSignedJavaPkcs12"), true, tags) .waitUntil(LongRunningOperationStatus.SUCCESSFULLY_COMPLETED); - // Let's Get the latest version of our certificate from the key vault. + // Let's get the latest version of our certificate from the key vault. KeyVaultCertificate myCert = certificateClient.getCertificate("myCertificate"); + System.out.printf("Certificate is returned with name %s and secret id %s \n", myCert.getProperties().getName(), myCert.getSecretId()); // The certificates and issuers are no longer needed, need to delete it from the key vault. SyncPoller deletedCertificatePoller = certificateClient.beginDeleteCertificate("certificateName"); - // Deleted Certificate is accessible as soon as polling beings. + // Deleted certificate is accessible as soon as polling beings. PollResponse pollResponse = deletedCertificatePoller.poll(); + System.out.printf("Deleted certificate with name %s and recovery id %s", pollResponse.getValue().getName(), pollResponse.getValue().getRecoveryId()); + deletedCertificatePoller.waitForCompletion(); SyncPoller deletedCertPoller = certificateClient.beginDeleteCertificate("myCertificate"); - // Deleted Certificate is accessible as soon as polling beings. + // Deleted certificate is accessible as soon as polling beings. PollResponse deletePollResponse = deletedCertPoller.poll(); + System.out.printf("Deleted certificate with name %s and recovery id %s", deletePollResponse.getValue().getName(), deletePollResponse.getValue().getRecoveryId()); + deletedCertificatePoller.waitForCompletion(); CertificateIssuer deleteCertificateIssuer = certificateClient.deleteIssuer("myIssuer"); - System.out.printf("Certificate issuer is permanently deleted with name %s and provider is %s \n", deleteCertificateIssuer.getName(), deleteCertificateIssuer.getProvider()); - // To ensure certificate is deleted on server side. + System.out.printf("Certificate issuer is permanently deleted with name %s and provider is %s \n", + deleteCertificateIssuer.getName(), deleteCertificateIssuer.getProvider()); + + // To ensure the certificate is deleted server-side. Thread.sleep(30000); - // If the keyvault is soft-delete enabled, then for permanent deletion deleted certificates need to be purged. + // If the key vault is soft-delete enabled, then deleted certificates need to be purged for permanent deletion. certificateClient.purgeDeletedCertificate("certificateName"); certificateClient.purgeDeletedCertificate("myCertificate"); } diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/HelloWorldAsync.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/HelloWorldAsync.java index 5acf87714ac6..a1b6c6ca1193 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/HelloWorldAsync.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/HelloWorldAsync.java @@ -27,17 +27,20 @@ public class HelloWorldAsync { * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException { + /* Instantiate a CertificateAsyncClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate an async key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/README.md) + for links and instructions. */ CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - // Let's create a self signed certificate valid for 1 year. if the certificate - // already exists in the key vault, then a new version of the certificate is created. + // Let's create a self-signed certificate valid for 1 year. If the certificate already exists in the key vault, + // then a new version of the certificate is created. CertificatePolicy policy = new CertificatePolicy("Self", "CN=SelfSignedJavaPkcs12") .setSubjectAlternativeNames(new SubjectAlternativeNames().setEmails(Arrays.asList("wow@gmail.com"))) .setKeyReusable(true) @@ -56,18 +59,18 @@ public static void main(String[] args) throws InterruptedException { Thread.sleep(22000); - // Let's Get the latest version of the certificate from the key vault. + // Let's get the latest version of the certificate from the key vault. certificateAsyncClient.getCertificate("certificateName") .subscribe(certificateResponse -> - System.out.printf("Certificate is returned with name %s and secretId %s %n", certificateResponse.getProperties().getName(), - certificateResponse.getSecretId())); + System.out.printf("Certificate is returned with name %s and secretId %s %n", + certificateResponse.getProperties().getName(), certificateResponse.getSecretId())); - // After some time, we need to disable the certificate temporarily, so we update the enabled status of the certificate. - // The update method can be used to update the enabled status of the certificate. + // After some time, we need to disable the certificate temporarily, so we update the enabled status of the + // certificate. The update method can be used to update the enabled status of the certificate. certificateAsyncClient.getCertificate("certificateName") .subscribe(certificateResponseValue -> { KeyVaultCertificate certificate = certificateResponseValue; - //Update enabled status of the certificate + // Update enabled status of the certificate. certificate.getProperties().setEnabled(false); certificateAsyncClient.updateCertificateProperties(certificate.getProperties()) .subscribe(certificateResponse -> @@ -77,26 +80,23 @@ public static void main(String[] args) throws InterruptedException { Thread.sleep(3000); - - //Let's create a certificate issuer. + // Let's create a certificate issuer. certificateAsyncClient.createIssuer(new CertificateIssuer("myIssuer", "Test")) - .subscribe(issuer -> { - System.out.printf("Issuer created with %s and %s", issuer.getName(), issuer.getProvider()); - }); + .subscribe(issuer -> + System.out.printf("Issuer created with %s and %s", issuer.getName(), issuer.getProvider())); Thread.sleep(2000); - // Let's fetch the issuer we just created from the key vault. certificateAsyncClient.getIssuer("myIssuer") - .subscribe(issuer -> { - System.out.printf("Issuer returned with %s and %s", issuer.getName(), issuer.getProvider()); - }); + .subscribe(issuer -> + System.out.printf("Issuer returned with %s and %s", issuer.getName(), issuer.getProvider())); Thread.sleep(2000); - //Let's create a certificate signed by our issuer. - certificateAsyncClient.beginCreateCertificate("myCertificate", new CertificatePolicy("myIssuer", "CN=IssuerSignedJavaPkcs12"), true, tags) + // Let's create a certificate signed by our issuer. + certificateAsyncClient.beginCreateCertificate("myCertificate", + new CertificatePolicy("myIssuer", "CN=IssuerSignedJavaPkcs12"), true, tags) .subscribe(pollResponse -> { System.out.println("---------------------------------------------------------------------------------"); System.out.println(pollResponse.getStatus()); @@ -106,11 +106,11 @@ public static void main(String[] args) throws InterruptedException { Thread.sleep(22000); - // Let's Get the latest version of our certificate from the key vault. + // Let's get the latest version of our certificate from the key vault. certificateAsyncClient.getCertificate("myCertificate") .subscribe(certificateResponse -> - System.out.printf("Certificate is returned with name %s and secretId %s %n", certificateResponse.getProperties().getName(), - certificateResponse.getSecretId())); + System.out.printf("Certificate is returned with name %s and secretId %s %n", + certificateResponse.getProperties().getName(), certificateResponse.getSecretId())); Thread.sleep(2000); @@ -133,10 +133,10 @@ public static void main(String[] args) throws InterruptedException { .subscribe(deletedIssuerResponse -> System.out.printf("Deleted issuer with name %s %n", deletedIssuerResponse.getValue().getName())); - // To ensure certificate is deleted on server side. + // To ensure the certificate is deleted server-side. Thread.sleep(50000); - // If the keyvault is soft-delete enabled, then for permanent deletion deleted certificates need to be purged. + // If the key vault is soft-delete enabled, then deleted certificates need to be purged for permanent deletion. certificateAsyncClient.purgeDeletedCertificateWithResponse("certificateName") .subscribe(purgeResponse -> System.out.printf("Purge Status response %d %n", purgeResponse.getStatusCode())); diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ListOperations.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ListOperations.java index 0ea90ef3d3f2..1dae5806f5ae 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ListOperations.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ListOperations.java @@ -30,33 +30,37 @@ public class ListOperations { * @throws IllegalArgumentException when invalid key vault endpoint is passed. */ public static void main(String[] args) throws IllegalArgumentException { + /* Instantiate a CertificateClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a certificate client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/README.md) + for links and instructions. */ CertificateClient certificateClient = new CertificateClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); - // Let's create a self signed certificate valid for 1 year. if the certificate - // already exists in the key vault, then a new version of the certificate is created. + // Let's create a self-signed certificate valid for 1 year. If the certificate already exists in the key vault, + // then a new version of the certificate is created. CertificatePolicy policy = new CertificatePolicy("Self", "CN=SelfSignedJavaPkcs12"); Map tags = new HashMap<>(); tags.put("foo", "bar"); - SyncPoller certificatePoller = certificateClient.beginCreateCertificate("certName", policy, true, tags); + SyncPoller certificatePoller = + certificateClient.beginCreateCertificate("certName", policy, true, tags); certificatePoller.waitUntil(LongRunningOperationStatus.SUCCESSFULLY_COMPLETED); KeyVaultCertificate cert = certificatePoller.getFinalResult(); - //Let's create a certificate issuer. + // Let's create a certificate issuer. CertificateIssuer issuer = new CertificateIssuer("myIssuer", "Test"); CertificateIssuer myIssuer = certificateClient.createIssuer(issuer); - System.out.printf("Issuer created with name %s and provider %s", myIssuer.getName(), - myIssuer.getProvider()); - //Let's create a certificate signed by our issuer. + System.out.printf("Issuer created with name %s and provider %s", myIssuer.getName(), myIssuer.getProvider()); + + // Let's create a certificate signed by our issuer. certificateClient.beginCreateCertificate("myCertificate", new CertificatePolicy("myIssuer", "CN=SignedJavaPkcs12"), true, tags) .waitUntil(LongRunningOperationStatus.SUCCESSFULLY_COMPLETED); @@ -64,30 +68,32 @@ public static void main(String[] args) throws IllegalArgumentException { // Let's list all the certificates in the key vault. for (CertificateProperties certificate : certificateClient.listPropertiesOfCertificates()) { - KeyVaultCertificate certificateWithAllProperties = certificateClient - .getCertificateVersion(certificate.getName(), certificate.getVersion()); - System.out.printf("Received certificate with name %s and secret id %s", certificateWithAllProperties - .getProperties().getName(), - certificateWithAllProperties.getSecretId()); + KeyVaultCertificate certificateWithAllProperties = + certificateClient.getCertificateVersion(certificate.getName(), certificate.getVersion()); + + System.out.printf("Received certificate with name %s and secret id %s", + certificateWithAllProperties.getProperties().getName(), certificateWithAllProperties.getSecretId()); } // Let's list all certificate versions of the certificate. for (CertificateProperties certificate : certificateClient.listPropertiesOfCertificateVersions("myCertificate")) { - KeyVaultCertificate certificateWithAllProperties = certificateClient - .getCertificateVersion(certificate.getName(), certificate.getVersion()); - System.out.printf("Received certificate with name %s and version %s", certificateWithAllProperties - .getProperties().getName(), + KeyVaultCertificate certificateWithAllProperties = + certificateClient.getCertificateVersion(certificate.getName(), certificate.getVersion()); + + System.out.printf("Received certificate with name %s and version %s", + certificateWithAllProperties.getProperties().getName(), certificateWithAllProperties.getProperties().getVersion()); } - //Let's list all certificate issuers in the key vault. + // Let's list all certificate issuers in the key vault. for (IssuerProperties certIssuer : certificateClient.listPropertiesOfIssuers()) { CertificateIssuer retrievedIssuer = certificateClient.getIssuer(certIssuer.getName()); + System.out.printf("Received issuer with name %s and provider %s", retrievedIssuer.getName(), retrievedIssuer.getProvider()); } - // Let's set certificate contacts on the Key vault. + // Let's set certificate contacts on the key vault. CertificateContact contactToAdd = new CertificateContact().setName("user").setEmail("useremail@example.com"); for (CertificateContact contact : certificateClient.setContacts(Collections.singletonList(contactToAdd))) { System.out.printf("Added contact with name %s and email %s to key vault", contact.getName(), diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ListOperationsAsync.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ListOperationsAsync.java index 71486c7f40d4..b7302788f8da 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ListOperationsAsync.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ListOperationsAsync.java @@ -27,17 +27,20 @@ public class ListOperationsAsync { * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException { + /* Instantiate a CertificateAsyncClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate an async key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/README.md) + for links and instructions. */ CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - // Let's create a self signed certificate valid for 1 year. if the certificate - // already exists in the key vault, then a new version of the certificate is created. + // Let's create a self-signed certificate valid for 1 year. If the certificate already exists in the key vault, + // then a new version of the certificate is created. CertificatePolicy policy = new CertificatePolicy("Self", "CN=SelfSignedJavaPkcs12") .setSubjectAlternativeNames(new SubjectAlternativeNames().setEmails(Arrays.asList("wow@gmail.com"))) .setKeyReusable(true) @@ -45,7 +48,7 @@ public static void main(String[] args) throws InterruptedException { Map tags = new HashMap<>(); tags.put("foo", "bar"); - certificateAsyncClient.beginCreateCertificate("certificatName", policy, true, tags) + certificateAsyncClient.beginCreateCertificate("myCertificate", policy, true, tags) .subscribe(pollResponse -> { System.out.println("---------------------------------------------------------------------------------"); System.out.println(pollResponse.getStatus()); @@ -55,16 +58,16 @@ public static void main(String[] args) throws InterruptedException { Thread.sleep(22000); - //Let's create a certificate issuer. + // Let's create a certificate issuer. certificateAsyncClient.createIssuer(new CertificateIssuer("myIssuer", "Test")) - .subscribe(issuer -> { - System.out.printf("Issuer created with %s and %s\n", issuer.getName(), issuer.getProvider()); - }); + .subscribe(issuer -> + System.out.printf("Issuer created with %s and %s\n", issuer.getName(), issuer.getProvider())); Thread.sleep(2000); - //Let's create a certificate signed by our issuer. - certificateAsyncClient.beginCreateCertificate("myCert", new CertificatePolicy("myIssuer", "CN=IssuerSignedJavaPkcs12"), true, tags) + // Let's create a certificate signed by our issuer. + certificateAsyncClient.beginCreateCertificate("myCert", + new CertificatePolicy("myIssuer", "CN=IssuerSignedJavaPkcs12"), true, tags) .subscribe(pollResponse -> { System.out.println("---------------------------------------------------------------------------------"); System.out.println(pollResponse.getStatus()); @@ -76,49 +79,52 @@ public static void main(String[] args) throws InterruptedException { // Let's list all the certificates in the key vault. certificateAsyncClient.listPropertiesOfCertificates() - .subscribe(certificateProperties -> certificateAsyncClient - .getCertificateVersion(certificateProperties.getName(), certificateProperties.getVersion()) - .subscribe(certificateResponse -> System.out.printf("Received certificate with name %s and key id %s \n", - certificateResponse.getProperties().getName(), certificateResponse.getKeyId()))); + .subscribe(certificateProperties -> + certificateAsyncClient.getCertificateVersion(certificateProperties.getName(), + certificateProperties.getVersion()) + .subscribe(certificateResponse -> + System.out.printf("Received certificate with name %s and key id %s \n", + certificateResponse.getProperties().getName(), certificateResponse.getKeyId()))); Thread.sleep(5000); // Let's list all certificate versions of the certificate. certificateAsyncClient.listPropertiesOfCertificateVersions("myCertificate") - .subscribe(certificateProeprties -> certificateAsyncClient - .getCertificateVersion(certificateProeprties.getName(), certificateProeprties.getVersion()) - .subscribe(certificateResponse -> System.out.printf("Received certificate with name %s and key id %s\n", - certificateResponse.getProperties().getName(), certificateResponse.getKeyId()))); + .subscribe(certificateProperties -> + certificateAsyncClient.getCertificateVersion(certificateProperties.getName(), + certificateProperties.getVersion()) + .subscribe(certificateResponse -> + System.out.printf("Received certificate with name %s and key id %s\n", + certificateResponse.getProperties().getName(), certificateResponse.getKeyId()))); Thread.sleep(5000); - //Let's list all certificate issuers in the key vault. + // Let's list all certificate issuers in the key vault. certificateAsyncClient.listPropertiesOfIssuers() - .subscribe(issuerProperties -> certificateAsyncClient.getIssuer(issuerProperties.getName()) - .subscribe(issuerResponse -> System.out.printf("Received issuer with name %s and provider %s\n", - issuerResponse.getName(), issuerResponse.getProvider()))); + .subscribe(issuerProperties -> + certificateAsyncClient.getIssuer(issuerProperties.getName()) + .subscribe(issuerResponse -> + System.out.printf("Received issuer with name %s and provider %s\n", issuerResponse.getName(), + issuerResponse.getProvider()))); Thread.sleep(5000); // Let's set certificate contacts on the Key vault. CertificateContact contactToAdd = new CertificateContact().setName("user").setEmail("useremail@example.com"); certificateAsyncClient.setContacts(Collections.singletonList(contactToAdd)).subscribe(contact -> - System.out.printf("Contact name %s and email %s\n", contact.getName(), contact.getEmail()) - ); + System.out.printf("Contact name %s and email %s\n", contact.getName(), contact.getEmail())); Thread.sleep(3000); // Let's list all certificate contacts in the key vault. certificateAsyncClient.listContacts().subscribe(contact -> - System.out.printf("Contact name %s and email %s\n", contact.getName(), contact.getEmail()) - ); + System.out.printf("Contact name %s and email %s\n", contact.getName(), contact.getEmail())); Thread.sleep(3000); // Let's delete all certificate contacts in the key vault. certificateAsyncClient.listContacts().subscribe(contact -> - System.out.printf("Deleted Contact name %s and email %s\n", contact.getName(), contact.getEmail()) - ); + System.out.printf("Deleted Contact name %s and email %s\n", contact.getName(), contact.getEmail())); Thread.sleep(2000); } diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ManagingDeletedCertificates.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ManagingDeletedCertificates.java index 09f2a8395da7..7dda5442934c 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ManagingDeletedCertificates.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ManagingDeletedCertificates.java @@ -32,21 +32,25 @@ public class ManagingDeletedCertificates { * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws IllegalArgumentException, InterruptedException { - - // NOTE: To manage deleted certificates, your key vault needs to have soft-delete enabled. Soft-delete allows deleted keys - // to be retained for a given retention period (90 days). During this period deleted keys can be recovered and if - // a key needs to be permanently deleted then it needs to be purged. - - // Instantiate a certificate client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + /* NOTE: To manage deleted certificates, your key vault needs to have soft-delete enabled. Soft-delete allows + deleted certificates to be retained for a given retention period (90 days). During this period deleted + certificates can be recovered and if a certificates needs to be permanently deleted then it needs to be purged. + */ + + /* Instantiate a CertificateClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. + + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/README.md) + for links and instructions. */ CertificateClient certificateClient = new CertificateClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); - // Let's create a self signed certificate valid for 1 year. if the certificate - // already exists in the key vault, then a new version of the certificate is created. + // Let's create a self-signed certificate valid for 1 year. If the certificate already exists in the key vault, + // then a new version of the certificate is created. CertificatePolicy policy = new CertificatePolicy("Self", "CN=SelfSignedJavaPkcs12") .setSubjectAlternativeNames(new SubjectAlternativeNames().setEmails(Arrays.asList("wow@gmail.com"))) .setKeyReusable(true) @@ -55,7 +59,8 @@ public static void main(String[] args) throws IllegalArgumentException, Interrup Map tags = new HashMap<>(); tags.put("foo", "bar"); - SyncPoller certificatePoller = certificateClient.beginCreateCertificate("certificateName", policy, true, tags); + SyncPoller certificatePoller = + certificateClient.beginCreateCertificate("certificateName", policy, true, tags); certificatePoller.waitUntil(LongRunningOperationStatus.SUCCESSFULLY_COMPLETED); KeyVaultCertificate cert = certificatePoller.getFinalResult(); @@ -63,46 +68,53 @@ public static void main(String[] args) throws IllegalArgumentException, Interrup // The certificate is no longer needed, need to delete it from the key vault. SyncPoller deletedCertificatePoller = certificateClient.beginDeleteCertificate("certificateName"); - // Deleted Certificate is accessible as soon as polling beings. + // The deleted certificate is accessible as soon as polling beings. PollResponse pollResponse = deletedCertificatePoller.poll(); - System.out.printf("Deleted certitifcate with name %s and recovery id %s", pollResponse.getValue().getName(), + + System.out.printf("Deleted certificate with name %s and recovery id %s", pollResponse.getValue().getName(), pollResponse.getValue().getRecoveryId()); + deletedCertificatePoller.waitForCompletion(); - //To ensure certificate is deleted on server side. + + // To ensure the certificate is deleted server-side. Thread.sleep(30000); // We accidentally deleted the certificate. Let's recover it. // A deleted certificate can only be recovered if the key vault is soft-delete enabled. SyncPoller recoverCertPoller = certificateClient .beginRecoverDeletedCertificate("certificateName"); - // Recovered certificate is accessible as soon as polling beings + // A recovered certificate is accessible as soon as polling beings PollResponse recoverPollResponse = recoverCertPoller.poll(); + System.out.printf(" Recovered Deleted certificate with name %s and id %s", recoverPollResponse.getValue() .getProperties().getName(), recoverPollResponse.getValue().getProperties().getId()); recoverCertPoller.waitForCompletion(); - //To ensure certificate is recovered on server side. + // To ensure the certificate is recovered server-side. Thread.sleep(30000); - // The certificates are no longer needed, need to delete them from the key vault. + // The certificate is no longer needed, need to delete them from the key vault. deletedCertificatePoller = certificateClient.beginDeleteCertificate("certificateName"); - // Deleted Certificate is accessible as soon as polling beings. + // The deleted certificate is accessible as soon as polling beings. PollResponse deletePollResponse = deletedCertificatePoller.poll(); + System.out.printf("Deleted certificate with name %s and recovery id %s", deletePollResponse.getValue().getName(), deletePollResponse.getValue().getRecoveryId()); + deletedCertificatePoller.waitForCompletion(); - //To ensure certificate is deleted on server side. + + // To ensure the certificate is deleted server-side. Thread.sleep(30000); - // You can list all the deleted and non-purged certificates, assuming key vault is soft-delete enabled. + // You can list all the deleted and non-purged certificates, assuming the key vault is soft-delete enabled. for (DeletedCertificate deletedCert : certificateClient.listDeletedCertificates()) { System.out.printf("Deleted certificate's recovery Id %s", deletedCert.getRecoveryId()); } - // If the key vault is soft-delete enabled, then for permanent deletion deleted certificate need to be purged. + // If the key vault is soft-delete enabled, then deleted certificates need to be purged for permanent deletion. certificateClient.purgeDeletedCertificate("certificateName"); - //To ensure certificate is purged on server side. + // To ensure the certificate is purged server-side. Thread.sleep(15000); } } diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ManagingDeletedCertificatesAsync.java b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ManagingDeletedCertificatesAsync.java index 18c9c3813a05..8bd2c46adea1 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ManagingDeletedCertificatesAsync.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/samples/java/com/azure/security/keyvault/certificates/ManagingDeletedCertificatesAsync.java @@ -25,21 +25,25 @@ public class ManagingDeletedCertificatesAsync { * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException { - - // NOTE: To manage deleted certificates, your key vault needs to have soft-delete enabled. Soft-delete allows deleted keys - // to be retained for a given retention period (90 days). During this period deleted keys can be recovered and if - // a key needs to be permanently deleted then it needs to be purged. - - // Instantiate an async key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + /* NOTE: To manage deleted certificates, your key vault needs to have soft-delete enabled. Soft-delete allows + deleted certificates to be retained for a given retention period (90 days). During this period deleted + certificates can be recovered and if a certificates needs to be permanently deleted then it needs to be purged. + */ + + /* Instantiate a CertificateAsyncClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. + + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-certificates/README.md) + for links and instructions. */ CertificateAsyncClient certificateAsyncClient = new CertificateClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - // Let's create a self signed certificate valid for 1 year. if the certificate - // already exists in the key vault, then a new version of the certificate is created. + // Let's create a self-signed certificate valid for 1 year. If the certificate already exists in the key vault, + // then a new version of the certificate is created. CertificatePolicy policy = new CertificatePolicy("Self", "CN=SelfSignedJavaPkcs12") .setSubjectAlternativeNames(new SubjectAlternativeNames().setEmails(Arrays.asList("wow@gmail.com"))) .setKeyReusable(true) @@ -58,7 +62,7 @@ public static void main(String[] args) throws InterruptedException { Thread.sleep(22000); - // The certificate is no longer needed, need to delete it from the key vault. + // The certificate is no longer needed, need to delete it from the key vault. certificateAsyncClient.beginDeleteCertificate("certificateName") .subscribe(pollResponse -> { System.out.println("Delete Status: " + pollResponse.getStatus().toString()); @@ -66,7 +70,7 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Certificate Delete Date: " + pollResponse.getValue().getDeletedOn().toString()); }); - //To ensure certificates is deleted on server side. + // To ensure the certificate is deleted server-side. Thread.sleep(30000); // We accidentally deleted the certificate. Let's recover it. @@ -78,10 +82,10 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Recover Certificate Id: " + pollResponse.getValue().getId()); }); - //To ensure certificates is recovered on server side. + // To ensure the certificate is recovered server-side. Thread.sleep(10000); - // The certificate is longer needed, need to delete them from the key vault. + // The certificate is no longer needed, need to delete it from the key vault. certificateAsyncClient.beginDeleteCertificate("certificateName") .subscribe(pollResponse -> { System.out.println("Delete Status: " + pollResponse.getStatus().toString()); @@ -89,7 +93,7 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Certificate Delete Date: " + pollResponse.getValue().getDeletedOn().toString()); }); - // To ensure certificate is deleted on server side. + // To ensure the certificate is deleted server-side. Thread.sleep(30000); // You can list all the deleted and non-purged certificates, assuming key vault is soft-delete enabled. @@ -99,12 +103,12 @@ public static void main(String[] args) throws InterruptedException { Thread.sleep(15000); - // If the keyvault is soft-delete enabled, then for permanent deletion deleted certificates need to be purged. + // If the keyvault is soft-delete enabled, then deleted certificates need to be purged for permanent deletion. certificateAsyncClient.purgeDeletedCertificateWithResponse("certificateName") .subscribe(purgeResponse -> System.out.printf("Purge Status response %d %n", purgeResponse.getStatusCode())); - // To ensure certificates is purged on server side. + // To ensure the certificate is purged server-side. Thread.sleep(15000); } } diff --git a/sdk/keyvault/azure-security-keyvault-keys/README.md b/sdk/keyvault/azure-security-keyvault-keys/README.md index 5633d0c9f689..8ab1b4997ba9 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/README.md +++ b/sdk/keyvault/azure-security-keyvault-keys/README.md @@ -1,5 +1,5 @@ # Azure Key Vault Key client library for Java -Azure Key Vault is a cloud service that provides secure storage of keys for encrypting your data. Multiple keys, and multiple versions of the same key, can be kept in the Azure Key Vault. Cryptographic keys in Azure Key Vault are represented as JSON Web Key (JWK) objects. +Azure Key Vault is a cloud service that provides secure storage of keys for encrypting your data. Multiple keys, and multiple versions of the same key, can be kept in the Azure Key Vault. Cryptographic keys in Azure Key Vault are represented as [JSON Web Key [JWK]][jwk_specification] objects. Azure Key Vault Managed HSM is a fully-managed, highly-available, single-tenant, standards-compliant cloud service that enables you to safeguard cryptographic keys for your cloud applications using FIPS 140-2 Level 3 validated HSMs. @@ -9,11 +9,8 @@ The Azure Key Vault keys library client supports RSA keys and Elliptic Curve (EC ## Getting started ### Include the package - #### Include the BOM file - -Please include the azure-sdk-bom to your project to take dependency on the General Availability (GA) version of the library. In the following snippet, replace the {bom_version_to_target} placeholder with the version number. -To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/boms/azure-sdk-bom/README.md). +Please include the `azure-sdk-bom` to your project to take dependency on the General Availability (GA) version of the library. In the following snippet, replace the {bom_version_to_target} placeholder with the version number. To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/boms/azure-sdk-bom/README.md). ```xml @@ -28,6 +25,7 @@ To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/A ``` + and then include the direct dependency in the dependencies section without the version tag as shown below. ```xml @@ -40,8 +38,7 @@ and then include the direct dependency in the dependencies section without the v ``` #### Include direct dependency -If you want to take dependency on a particular version of the library that is not present in the BOM, -add the direct dependency to your project as follows. +If you want to take dependency on a particular version of the library that is not present in the BOM, add the direct dependency to your project as follows. [//]: # ({x-version-update-start;com.azure:azure-security-keyvault-keys;current}) ```xml @@ -55,116 +52,18 @@ add the direct dependency to your project as follows. ### Prerequisites - A [Java Development Kit (JDK)][jdk_link], version 8 or later. -- [Azure Subscription][azure_subscription] -- An existing [Azure Key Vault][azure_keyvault]. If you need to create a Key Vault, you can use the [Azure Cloud Shell][azure_cloud_shell] to create one with this Azure CLI command. Replace `` and `` with your own, unique names: - -```bash -az keyvault create --resource-group --name -``` +- An [Azure Subscription][azure_subscription]. +- One of the following: + - An existing [Azure Key Vault][azure_keyvault]. If you need to create a key vault, you can do so in the Azure Portal by following the steps in [this document][azure_keyvault_portal]. Alternatively, you can use the Azure CLI by following the steps in [this document][azure_keyvault_cli]. + - An existing [Azure Key Vault Managed HSM][azure_keyvault_mhsm]. If you need to create a Managed HSM, you can do so using the Azure CLI by following the steps in [this document][azure_keyvault_mhsm_cli]. ### Authenticate the client -In order to interact with the Azure Key Vault service, you'll need to create an instance of the [KeyClient](#create-key-client) class. You would need a **vault url** and **client secret credentials (client id, client secret, tenant id)** to instantiate a client object using the default `DefaultAzureCredential` examples shown in this document. - -The `DefaultAzureCredential` way of authentication by providing client secret credentials is being used in this getting started section but you can find more ways to authenticate with [azure-identity][azure_identity]. - -#### Create/Get credentials -To create/get client secret credentials you can use the [Azure Portal][azure_create_application_in_portal], [Azure CLI][azure_keyvault_cli_full] or [Azure Cloud Shell][azure_cloud_shell] - -Here is an [Azure Cloud Shell][azure_cloud_shell] snippet below to - - * Create a service principal and configure its access to Azure resources: - -```bash -az ad sp create-for-rbac -n --skip-assignment -```` - -Output: - -```json -{ - "appId": "generated-app-ID", - "displayName": "dummy-app-name", - "name": "http://dummy-app-name", - "password": "random-password", - "tenant": "tenant-ID" -} -``` - -* Take note of the service principal objectId -```PowerShell -az ad sp show --id --query objectId -``` -Output: -``` -"" -``` - -* Use the returned credentials above to set the **AZURE_CLIENT_ID** (appId), **AZURE_CLIENT_SECRET** (password), and **AZURE_TENANT_ID** (tenantId) environment variables. The following example shows a way to do this in Bash: - -```bash -export AZURE_CLIENT_ID="generated-app-ID" -export AZURE_CLIENT_SECRET="random-password" -export AZURE_TENANT_ID="tenant-ID" -``` - -* Grant the aforementioned application authorization to perform key operations on the Key Vault: +In order to interact with the Azure Key Vault service, you will need to create an instance of either the [`KeyClient`](#create-key-client) class or the [`CryptographyClient`](#create-cryptography-client) class, as well as a **vault url** and a credential object. The examples shown in this document use a credential object named [`DefaultAzureCredential`][default_azure_credential], which is appropriate for most scenarios, including local development and production environments. Additionally, we recommend using a [managed identity][managed_identity] for authentication in production environments. -```bash -az keyvault set-policy --name --spn $AZURE_CLIENT_ID --key-permissions backup delete get list create update encrypt decrypt -``` - -> --key-permissions: -> Accepted values: backup, delete, get, list, purge, recover, restore, create, update, encrypt, decrypt, import, wrapkey, unwrapkey, verify, sign - -If you have enabled role-based access control (RBAC) for Key Vault instead, you can find roles like "Key Vault Crypto Officer" in our [RBAC guide][rbac_guide]. -If you are managing your keys using Managed HSM, read about its [access control][access_control] that supports different built-in roles isolated from Azure Resource Manager (ARM). - -* Use the aforementioned Key Vault name to retrieve details of your Key Vault, which also contain your Key Vault URL: - -```bash -az keyvault show --name -``` - -* Create the Azure Key Vault or Managed HSM and grant the above mentioned application authorization to perform administrative operations on the Managed HSM (replace `` and `` with your own unique names and `` with the value from above): - -If you are creating a standard Key Vault resource, use the following CLI command: -```bash -az keyvault create --resource-group --name -``` - -If you are creating a Managed HSM resource, use the following CLI command: -```bash - az keyvault create --hsm-name --resource-group --administrators --location -``` +You can find more information on different ways of authenticating and their corresponding credential types in the [Azure Identity documentation][azure_identity]. -#### Activate your managed HSM -This section only applies if you are creating a Managed HSM. All data plane commands are disabled until the HSM is activated. You will not be able to create keys or assign roles. Only the designated administrators that were assigned during the create command can activate the HSM. To activate the HSM you must download the security domain. - -To activate your HSM you need: -- Minimum 3 RSA key-pairs (maximum 10) -- Specify minimum number of keys required to decrypt the security domain (quorum) - -To activate the HSM you send at least 3 (maximum 10) RSA public keys to the HSM. The HSM encrypts the security domain with these keys and sends it back. -Once this security domain is successfully downloaded, your HSM is ready to use. -You also need to specify quorum, which is the minimum number of private keys required to decrypt the security domain. - -The example below shows how to use openssl to generate 3 self signed certificate. - -```bash -openssl req -newkey rsa:2048 -nodes -keyout cert_0.key -x509 -days 365 -out cert_0.cer -openssl req -newkey rsa:2048 -nodes -keyout cert_1.key -x509 -days 365 -out cert_1.cer -openssl req -newkey rsa:2048 -nodes -keyout cert_2.key -x509 -days 365 -out cert_2.cer -``` - -Use the `az keyvault security-domain download` command to download the security domain and activate your managed HSM. -The example below uses 3 RSA key pairs (only public keys are needed for this command) and sets the quorum to 2. - -```bash -az keyvault security-domain download --hsm-name --sd-wrapping-keys ./certs/cert_0.cer ./certs/cert_1.cer ./certs/cert_2.cer --sd-quorum 2 --security-domain-file ContosoMHSM-SD.json -``` - -#### Create Key client -Once you've populated the **AZURE_CLIENT_ID**, **AZURE_CLIENT_SECRET**, and **AZURE_TENANT_ID** environment variables and replaced **your-key-vault-url** with the URI returned above, you can create the KeyClient: +#### Create key client +Once you perform [the authentication set up that suits you best][default_azure_credential] and replaced **your-key-vault-url** with the URL for your key vault or managed HSM, you can create the `KeyClient`: ```java readme-sample-createKeyClient KeyClient keyClient = new KeyClientBuilder() @@ -173,20 +72,20 @@ KeyClient keyClient = new KeyClientBuilder() .buildClient(); ``` -> NOTE: For using an asynchronous client use KeyAsyncClient instead of KeyClient and call `buildAsyncClient()` +> NOTE: For using an asynchronous client use `KeyAsyncClient` instead of `KeyClient` and call `buildAsyncClient()`. -#### Create Cryptography client -Once you've populated the **AZURE_CLIENT_ID**, **AZURE_CLIENT_SECRET**, and **AZURE_TENANT_ID** environment variables and replaced **your-vault-url** with the URI returned above, you can create the CryptographyClient: +#### Create cryptography client +Once you perform [the `DefaultAzureCredential` set up that suits you best][default_azure_credential] and replaced **your-key-vault-url** with the URL for your key vault or managed HSM, you can create the `CryptographyClient`: ```java readme-sample-createCryptographyClient -// Create client with key identifier from key vault. +// Create client with key identifier from Key Vault. CryptographyClient cryptoClient = new CryptographyClientBuilder() - .credential(new DefaultAzureCredentialBuilder().build()) .keyIdentifier("") + .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); ``` -> NOTE: For using an asynchronous client use CryptographyAsyncClient instead of CryptographyClient and call `buildAsyncClient()` +> NOTE: For using an asynchronous client use `CryptographyAsyncClient` instead of `CryptographyClient` and call `buildAsyncClient()`. ## Key concepts ### Key @@ -198,10 +97,10 @@ Azure Key Vault supports multiple key types (`RSA` & `EC`) and algorithms, and e * updated: Indicates when this version of the key was updated. ### Key client: -The key client performs the interactions with the Azure Key Vault service for getting, setting, updating, deleting, and listing keys and its versions. Asynchronous (KeyAsyncClient) and synchronous (KeyClient) clients exist in the SDK allowing for the selection of a client based on an application's use case. Once you've initialized a key, you can interact with the primary resource types in Key Vault. +The key client performs the interactions with the Azure Key Vault service for getting, setting, updating, deleting, and listing keys and its versions. Asynchronous (`KeyAsyncClient`) and synchronous (`KeyClient`) clients exist in the SDK allowing for the selection of a client based on an application's use case. Once you have initialized a key, you can interact with the primary resource types in Key Vault. ### Cryptography client: -The cryptography client performs the cryptographic operations locally or calls the Azure Key Vault service depending on how much key information is available locally. It supports encrypting, decrypting, signing, verifying, key wrapping, key unwrapping, and retrieving the configured key. Asynchronous (CryptographyAsyncClient) and synchronous (CryptographyClient) clients exist in the SDK allowing for the selection of a client based on an application's use case. +The cryptography client performs the cryptographic operations locally or calls the Azure Key Vault service depending on how much key information is available locally. It supports encrypting, decrypting, signing, verifying, key wrapping, key unwrapping, and retrieving the configured key. Asynchronous (`CryptographyAsyncClient`) and synchronous (`CryptographyClient`) clients exist in the SDK allowing for the selection of a client based on an application's use case. ## Examples ### Sync API @@ -214,7 +113,7 @@ The following sections provide several code snippets covering some of the most c - [Encrypt](#encrypt) - [Decrypt](#decrypt) -### Create a key +#### Create a key Create a key to be stored in the Azure Key Vault. - `createKey` creates a new key in the key vault. If a key with the same name already exists then a new version of the key is created. @@ -230,7 +129,7 @@ KeyVaultKey ecKey = keyClient.createEcKey(new CreateEcKeyOptions("CloudEcKey") System.out.printf("Key created with name \"%s\" and id %s%n", ecKey.getName(), ecKey.getId()); ``` -### Retrieve a key +#### Retrieve a key Retrieve a previously stored key by calling `getKey`. ```java readme-sample-retrieveKey @@ -238,7 +137,7 @@ KeyVaultKey key = keyClient.getKey(""); System.out.printf("A key was returned with name \"%s\" and id %s%n", key.getName(), key.getId()); ``` -### Update an existing key +#### Update an existing key Update an existing key by calling `updateKeyProperties`. ```java readme-sample-updateKey @@ -250,7 +149,7 @@ KeyVaultKey updatedKey = keyClient.updateKeyProperties(key.getProperties()); System.out.printf("Key's updated expiry time: %s%n", updatedKey.getProperties().getExpiresOn()); ``` -### Delete a key +#### Delete a key Delete an existing key by calling `beginDeleteKey`. ```java readme-sample-deleteKey @@ -260,14 +159,14 @@ PollResponse deletedKeyPollResponse = deletedKeyPoller.poll(); // Deleted key is accessible as soon as polling begins. DeletedKey deletedKey = deletedKeyPollResponse.getValue(); -// Deletion date only works for a SoftDelete-enabled Key Vault. +// Deletion date only works for a soft-delete enabled key vault. System.out.printf("Deletion date: %s%n", deletedKey.getDeletedOn()); -// Key is being deleted on server. +// The key is being deleted on the server. deletedKeyPoller.waitForCompletion(); ``` -### List keys +#### List keys List the keys in the key vault by calling `listPropertiesOfKeys`. ```java readme-sample-listKeys @@ -280,7 +179,7 @@ for (KeyProperties keyProperties : keyClient.listPropertiesOfKeys()) { } ``` -### Encrypt +#### Encrypt Encrypt plain text by calling `encrypt`. ```java readme-sample-encrypt @@ -293,7 +192,7 @@ System.out.printf("Returned ciphertext size is %d bytes with algorithm \"%s\"%n" encryptionResult.getCipherText().length, encryptionResult.getAlgorithm()); ``` -### Decrypt +#### Decrypt Decrypt encrypted content by calling `decrypt`. ```java readme-sample-decrypt @@ -318,7 +217,7 @@ The following sections provide several code snippets covering some of the most c > Note : You should add `System.in.read()` or `Thread.sleep()` after the function calls in the main class/thread to allow async functions/operations to execute and finish before the main application/thread exits. -### Create a key asynchronously +#### Create a key asynchronously Create a key to be stored in the Azure Key Vault. - `createKey` creates a new key in the key vault. If a key with the same name already exists then a new version of the key is created. @@ -335,7 +234,7 @@ keyAsyncClient.createEcKey(new CreateEcKeyOptions("CloudEcKey") System.out.printf("Key created with name \"%s\" and id %s%n", key.getName(), key.getId())); ``` -### Retrieve a key asynchronously +#### Retrieve a key asynchronously Retrieve a previously stored key by calling `getKey`. ```java readme-sample-retrieveKeyAsync @@ -344,7 +243,7 @@ keyAsyncClient.getKey("") System.out.printf("Key was returned with name \"%s\" and id %s%n", key.getName(), key.getId())); ``` -### Update an existing key asynchronously +#### Update an existing key asynchronously Update an existing key by calling `updateKeyProperties`. ```java readme-sample-updateKeyAsync @@ -357,7 +256,7 @@ keyAsyncClient.getKey("") System.out.printf("Key's updated expiry time: %s%n", updatedKey.getProperties().getExpiresOn())); ``` -### Delete a key asynchronously +#### Delete a key asynchronously Delete an existing key by calling `beginDeleteKey`. ```java readme-sample-deleteKeyAsync @@ -369,7 +268,7 @@ keyAsyncClient.beginDeleteKey("") }); ``` -### List keys asynchronously +#### List keys asynchronously List the keys in the Azure Key Vault by calling `listPropertiesOfKeys`. ```java readme-sample-listKeysAsync @@ -381,7 +280,7 @@ keyAsyncClient.listPropertiesOfKeys() System.out.printf("Received key with name \"%s\" and type \"%s\"", key.getName(), key.getKeyType())); ``` -### Encrypt asynchronously +#### Encrypt asynchronously Encrypt plain text by calling `encrypt`. ```java readme-sample-encryptAsync @@ -394,7 +293,7 @@ cryptoAsyncClient.encrypt(EncryptionAlgorithm.RSA_OAEP, plaintext) encryptionResult.getCipherText().length, encryptionResult.getAlgorithm())); ``` -### Decrypt asynchronously +#### Decrypt asynchronously Decrypt encrypted content by calling `decrypt`. ```java readme-sample-decryptAsync @@ -433,7 +332,7 @@ All client libraries by default use the Netty HTTP client. Adding the above depe All client libraries, by default, use the Tomcat-native Boring SSL library to enable native-level performance for SSL operations. The Boring SSL library is an Uber JAR containing native libraries for Linux / macOS / Windows, and provides better performance compared to the default SSL implementation within the JDK. For more information, including how to reduce the dependency size, refer to the [performance tuning][performance_tuning] section of the wiki. ## Next steps -Several Key Vault Java SDK samples are available to you in the SDK's GitHub repository. These samples provide example code for additional scenarios commonly encountered while working with Azure Key Vault. +Several Azure Key Vault Java client library samples are available to you in the SDK's GitHub repository. These samples provide example code for additional scenarios commonly encountered while working with Azure Key Vault. ## Next steps samples Samples are explained in detail [here][samples_readme]. @@ -452,25 +351,22 @@ This project has adopted the [Microsoft Open Source Code of Conduct][microsoft_c [source_code]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/src [api_documentation]: https://azure.github.io/azure-sdk-for-java [azkeyvault_docs]: https://docs.microsoft.com/azure/key-vault/ -[azure_identity]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/identity/azure-identity -[maven]: https://maven.apache.org/ +[azure_identity]: https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable [azure_subscription]: https://azure.microsoft.com/ [azure_keyvault]: https://docs.microsoft.com/azure/key-vault/keys/quick-create-portal -[azure_cli]: https://docs.microsoft.com/cli/azure -[rest_api]: https://docs.microsoft.com/rest/api/keyvault/ +[azure_keyvault_cli]: https://docs.microsoft.com/azure/key-vault/general/quick-create-cli +[azure_keyvault_portal]: https://docs.microsoft.com/azure/key-vault/general/quick-create-portal +[azure_keyvault_mhsm]: https://docs.microsoft.com/azure/key-vault/managed-hsm/overview +[azure_keyvault_mhsm_cli]: https://docs.microsoft.com/azure/key-vault/managed-hsm/quick-create-cli +[default_azure_credential]: https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#defaultazurecredential +[managed_identity]: https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview [azkeyvault_rest]: https://docs.microsoft.com/rest/api/keyvault/ -[azure_create_application_in_portal]: https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal -[azure_keyvault_cli]: https://docs.microsoft.com/azure/key-vault/quick-create-cli -[azure_keyvault_cli_full]: https://docs.microsoft.com/cli/azure/keyvault?view=azure-cli-latest [keys_samples]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys [samples_readme]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/src/samples/README.md [performance_tuning]: https://github.com/Azure/azure-sdk-for-java/wiki/Performance-Tuning [jdk_link]: https://docs.microsoft.com/java/azure/jdk/?view=azure-java-stable -[azure_cloud_shell]: https://shell.azure.com/bash [jwk_specification]: https://tools.ietf.org/html/rfc7517 [http_clients_wiki]: https://github.com/Azure/azure-sdk-for-java/wiki/HTTP-clients [microsoft_code_of_conduct]: https://opensource.microsoft.com/codeofconduct/ -[access_control]: https://docs.microsoft.com/azure/key-vault/managed-hsm/access-control -[rbac_guide]: https://docs.microsoft.com/azure/key-vault/general/rbac-guide ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%2Fkeyvault%2Fazure-security-keyvault-keys%2FREADME.png) diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyAsyncClient.java b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyAsyncClient.java index 7c6baea48ee5..97ec56a5441f 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyAsyncClient.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyAsyncClient.java @@ -72,7 +72,7 @@ * *
  * KeyAsyncClient keyAsyncClient = new KeyClientBuilder()
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildAsyncClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClient.java b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClient.java index 0006a846339c..cd9526e5c79d 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClient.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClient.java @@ -43,7 +43,7 @@ * *
  * KeyClient keyClient = new KeyClientBuilder()
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildClient();
  * 
@@ -834,7 +834,7 @@ public Response updateKeyPropertiesWithResponse(KeyProperties keyPr * System.out.printf("Key delete date: %s%n" + deletedKey.getDeletedOn()); * System.out.printf("Deleted key's recovery id: %s%n", deletedKey.getRecoveryId()); * - * // Key is being deleted on server. + * // Key is being deleted on the server. * deleteKeyPoller.waitForCompletion(); * // Key is deleted * @@ -980,7 +980,7 @@ public Response purgeDeletedKeyWithResponse(String name, Context context) * System.out.printf("Recovered key name: %s%n", recoveredKey.getName()); * System.out.printf("Recovered key id: %s%n", recoveredKey.getId()); * - * // Key is being recovered on server. + * // Key is being recovered on the server. * recoverKeyPoller.waitForCompletion(); * // Key is recovered * diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java index d47527b549b3..8dc8b79795d6 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/main/java/com/azure/security/keyvault/keys/KeyClientBuilder.java @@ -50,7 +50,7 @@ * *
  * KeyAsyncClient keyAsyncClient = new KeyClientBuilder()
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildAsyncClient();
  * 
@@ -62,7 +62,7 @@ * *
  * KeyAsyncClient keyAsyncClient = new KeyClientBuilder()
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
  *     .httpClient(HttpClient.createDefault())
@@ -74,17 +74,17 @@
  * {@link String vaultUrl} can be specified. It provides finer control over the construction of {@link KeyAsyncClient}
  * and {@link KeyClient}

* - * + * *
  * HttpPipeline pipeline = new HttpPipelineBuilder()
  *     .policies(new KeyVaultCredentialPolicy(new DefaultAzureCredentialBuilder().build()), new RetryPolicy())
  *     .build();
  * KeyAsyncClient keyAsyncClient = new KeyClientBuilder()
  *     .pipeline(pipeline)
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .buildAsyncClient();
  * 
- * + * * *

The minimal configuration options required by {@link KeyClientBuilder secretClientBuilder} to build {@link * KeyClient} are {@link String vaultUrl} and {@link TokenCredential credential}.

@@ -92,7 +92,7 @@ * *
  * KeyClient keyClient = new KeyClientBuilder()
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .buildClient();
  * 
diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/BackupAndRestoreOperations.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/BackupAndRestoreOperations.java index 2013e5a87f0e..e389f7730b60 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/BackupAndRestoreOperations.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/BackupAndRestoreOperations.java @@ -25,50 +25,55 @@ public class BackupAndRestoreOperations { * Authenticates with the key vault and shows how to backup and restore keys in the key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. * @throws IOException when writing backup to file is unsuccessful. */ public static void main(String[] args) throws IOException, InterruptedException, IllegalArgumentException { + /* Instantiate a KeyClient that will be used to call the service. Notice that the client is using default Azure + credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyClient keyClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildClient(); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildClient(); - // Let's create a Rsa key valid for 1 year. if the key - // already exists in the key vault, then a new version of the key is created. + // Let's create an RSA key valid for 1 year. If the key already exists in the key vault, then a new version of + // the key is created. keyClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") - .setExpiresOn(OffsetDateTime.now().plusYears(1)) - .setKeySize(2048)); + .setExpiresOn(OffsetDateTime.now().plusYears(1)) + .setKeySize(2048)); // Backups are good to have, if in case keys get accidentally deleted by you. // For long term storage, it is ideal to write the backup to a file. String backupFilePath = "YOUR_BACKUP_FILE_PATH"; byte[] keyBackup = keyClient.backupKey("CloudRsaKey"); + writeBackupToFile(keyBackup, backupFilePath); - // The Cloud Rsa key is no longer in use, so you delete it. + // The RSA key is no longer in use, so you delete it. SyncPoller rsaDeletedKeyPoller = keyClient.beginDeleteKey("CloudRsaKey"); - PollResponse pollResponse = rsaDeletedKeyPoller.poll(); DeletedKey rsaDeletedKey = pollResponse.getValue(); + System.out.println("Deleted Date %s" + rsaDeletedKey.getDeletedOn().toString()); System.out.printf("Deleted Key's Recovery Id %s", rsaDeletedKey.getRecoveryId()); - // Key is being deleted on server. + // The key is being deleted on the server. rsaDeletedKeyPoller.waitForCompletion(); - //To ensure key is deleted on server side. + // To ensure the key is deleted server-side. Thread.sleep(30000); // If the vault is soft-delete enabled, then you need to purge the key as well for permanent deletion. keyClient.purgeDeletedKey("CloudRsaKey"); - //To ensure key is purged on server side. + // To ensure the key is purged server-side. Thread.sleep(15000); // After sometime, the key is required again. We can use the backup value to restore it in the key vault. @@ -79,13 +84,18 @@ public static void main(String[] args) throws IOException, InterruptedException, private static void writeBackupToFile(byte[] bytes, String filePath) { try { File file = new File(filePath); + if (file.exists()) { file.delete(); } + file.createNewFile(); + OutputStream os = new FileOutputStream(file); os.write(bytes); + System.out.println("Successfully wrote backup to file."); + // Close the file os.close(); } catch (IOException e) { diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/BackupAndRestoreOperationsAsync.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/BackupAndRestoreOperationsAsync.java index 99c0ed7c352f..d888fb65e64c 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/BackupAndRestoreOperationsAsync.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/BackupAndRestoreOperationsAsync.java @@ -26,16 +26,19 @@ public class BackupAndRestoreOperationsAsync { * @throws IOException when writing backup to file is unsuccessful. */ public static void main(String[] args) throws IOException, InterruptedException, IllegalArgumentException { + /* Instantiate a KeyAsyncClient that will be used to call the service. Notice that the client is using default + Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate async key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyAsyncClient keyAsyncClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - // Let's create Cloud Rsa key valid for 1 year. if the key + // Let's create RSA key valid for 1 year. If the key // already exists in the key vault, then a new version of the key is created. keyAsyncClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") .setExpiresOn(OffsetDateTime.now().plusYears(1)) @@ -55,7 +58,7 @@ public static void main(String[] args) throws IOException, InterruptedException, Thread.sleep(7000); - // The Cloud Rsa key is no longer in use, so you delete it. + // The RSA key is no longer in use, so you delete it. keyAsyncClient.beginDeleteKey("CloudRsaKey") .subscribe(pollResponse -> { System.out.println("Delete Status: " + pollResponse.getStatus().toString()); @@ -63,14 +66,14 @@ public static void main(String[] args) throws IOException, InterruptedException, System.out.println("Key Delete Date: " + pollResponse.getValue().getDeletedOn().toString()); }); - //To ensure file is deleted on server side. + // To ensure file is deleted server-side. Thread.sleep(30000); // If the vault is soft-delete enabled, then you need to purge the key as well for permanent deletion. keyAsyncClient.purgeDeletedKeyWithResponse("CloudRsaKey").subscribe(purgeResponse -> System.out.printf("Purge Status response %d %n", purgeResponse.getStatusCode())); - //To ensure file is purged on server side. + // To ensure file is purged server-side. Thread.sleep(15000); // After sometime, the key is required again. We can use the backup value to restore it in the key vault. @@ -78,7 +81,7 @@ public static void main(String[] args) throws IOException, InterruptedException, keyAsyncClient.restoreKeyBackup(backupFromFile).subscribe(keyResponse -> System.out.printf("Restored Key with name %s %n", keyResponse.getName())); - //To ensure key is restored on server side. + // To ensure the key is restored server-side. Thread.sleep(15000); } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/HelloWorld.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/HelloWorld.java index 744d0ed324c1..6825c8560a51 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/HelloWorld.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/HelloWorld.java @@ -18,66 +18,73 @@ * Sample demonstrates how to set, get, update and delete a key. */ public class HelloWorld { - /** * Authenticates with the key vault and shows how to set, get, update and delete a key in the key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException, IllegalArgumentException { + /* Instantiate a KeyClient that will be used to call the service. Notice that the client is using default Azure + credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyClient keyClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildClient(); - - // Let's create a Rsa key valid for 1 year. if the key - // already exists in the key vault, then a new version of the key is created. - Response createKeyResponse = keyClient.createRsaKeyWithResponse(new CreateRsaKeyOptions("CloudRsaKey") - .setExpiresOn(OffsetDateTime.now().plusYears(1)) - .setKeySize(2048), new Context("key1", "value1")); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildClient(); + + // Let's create an RSA key valid for 1 year. If the key already exists in the key vault, then a new version of + // the key is created. + Response createKeyResponse = + keyClient.createRsaKeyWithResponse(new CreateRsaKeyOptions("CloudRsaKey") + .setExpiresOn(OffsetDateTime.now().plusYears(1)) + .setKeySize(2048), new Context("key1", "value1")); - // Let's validate create key operation succeeded using the status code information in the response. + // Let's validate the create key operation succeeded using the status code information in the response. System.out.printf("Create Key operation succeeded with status code %s \n", createKeyResponse.getStatusCode()); - // Let's Get the Cloud Rsa Key from the key vault. + // Let's get the RSA key from the key vault. KeyVaultKey cloudRsaKey = keyClient.getKey("CloudRsaKey"); + System.out.printf("Key is returned with name %s and type %s \n", cloudRsaKey.getName(), cloudRsaKey.getKeyType()); - // After one year, the Cloud Rsa Key is still required, we need to update the expiry time of the key. + // After one year, the RSA key is still required, we need to update the expiry time of the key. // The update method can be used to update the expiry attribute of the key. cloudRsaKey.getProperties().setExpiresOn(cloudRsaKey.getProperties().getExpiresOn().plusYears(1)); + KeyVaultKey updatedKey = keyClient.updateKeyProperties(cloudRsaKey.getProperties()); + System.out.printf("Key's updated expiry time %s \n", updatedKey.getProperties().getExpiresOn()); - // We need the Cloud Rsa key with bigger key size, so you want to update the key in key vault to ensure it has the required size. - // Calling createRsaKey on an existing key creates a new version of the key in the key vault with the new specified size. + // We need the RSA key with bigger key size, so you want to update the key in key vault to ensure it has the + // required size. Calling createRsaKey() on an existing key creates a new version of the key in the key vault + // with the new specified size. keyClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") - .setExpiresOn(OffsetDateTime.now().plusYears(1)) - .setKeySize(4096)); + .setExpiresOn(OffsetDateTime.now().plusYears(1)) + .setKeySize(4096)); - // The Cloud Rsa Key is no longer needed, need to delete it from the key vault. + // The RSA key is no longer needed, need to delete it from the key vault. SyncPoller rsaDeletedKeyPoller = keyClient.beginDeleteKey("CloudRsaKey"); - PollResponse pollResponse = rsaDeletedKeyPoller.poll(); - DeletedKey rsaDeletedKey = pollResponse.getValue(); + System.out.println("Deleted Date %s" + rsaDeletedKey.getDeletedOn().toString()); System.out.printf("Deleted Key's Recovery Id %s", rsaDeletedKey.getRecoveryId()); - // Key is being deleted on server. + // The key is being deleted on the server. rsaDeletedKeyPoller.waitForCompletion(); - // To ensure key is deleted on server side. + // To ensure the key is deleted server-side. Thread.sleep(30000); - // If the keyvault is soft-delete enabled, then for permanent deletion deleted keys need to be purged. + // If the keyvault is soft-delete enabled, then deleted keys need to be purged for permanent deletion. keyClient.purgeDeletedKey("CloudRsaKey"); } } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/HelloWorldAsync.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/HelloWorldAsync.java index 6d7b8c1d762f..0ab8b4d4da48 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/HelloWorldAsync.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/HelloWorldAsync.java @@ -15,64 +15,74 @@ */ public class HelloWorldAsync { /** - * Authenticates with the key vault and shows how to asynchronously set, get, update and delete a key in the key vault. + * Authenticates with the key vault and shows how to asynchronously set, get, update and delete a key in the key + * vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException { + /* Instantiate a KeyAsyncClient that will be used to call the service. Notice that the client is using default + Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate an async key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyAsyncClient keyAsyncClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - // Let's create Cloud Rsa key valid for 1 year. if the key - // already exists in the key vault, then a new version of the key is created. + // Let's create an RSA key valid for 1 year. If the key already exists in the key vault, then a new version of + // the key is created. Response createKeyResponse = keyAsyncClient.createRsaKeyWithResponse(new CreateRsaKeyOptions("CloudRsaKey") - .setExpiresOn(OffsetDateTime.now().plusYears(1)) - .setKeySize(2048)).block(); + .setExpiresOn(OffsetDateTime.now().plusYears(1)) + .setKeySize(2048)).block(); // Let's validate create key operation succeeded using the status code information in the response. System.out.printf("Create Key operation succeeded with status code %s%n", createKeyResponse.getStatusCode()); - System.out.printf("Key is created with name %s and type %s%n", createKeyResponse.getValue().getName(), createKeyResponse.getValue().getKeyType()); + System.out.printf("Key is created with name %s and type %s%n", createKeyResponse.getValue().getName(), + createKeyResponse.getValue().getKeyType()); Thread.sleep(2000); - // Let's Get the Cloud Rsa Key from the key vault. + // Let's get the RSA key from the key vault. keyAsyncClient.getKey("CloudRsaKey").subscribe(keyResponse -> - System.out.printf("Key returned with name %s and type %s%n", keyResponse.getName(), keyResponse.getKeyType())); + System.out.printf("Key returned with name %s and type %s%n", keyResponse.getName(), keyResponse.getKeyType())); Thread.sleep(2000); - - // After one year, the Cloud Rsa Key is still required, we need to update the expiry time of the key. + // After one year, the RSA key is still required, we need to update the expiry time of the key. // The update method can be used to update the expiry attribute of the key. keyAsyncClient.getKey("CloudRsaKey").subscribe(keyResponse -> { KeyVaultKey key = keyResponse; - //Update the expiry time of the key. + + // Update the expiry time of the key. key.getProperties().setExpiresOn(key.getProperties().getExpiresOn().plusYears(1)); - keyAsyncClient.updateKeyProperties(key.getProperties()).subscribe(updatedKeyResponse -> - System.out.printf("Key's updated expiry time %s%n", updatedKeyResponse.getProperties().getExpiresOn().toString())); + keyAsyncClient.updateKeyProperties(key.getProperties()) + .subscribe(updatedKeyResponse -> + System.out.printf("Key's updated expiry time %s%n", + updatedKeyResponse.getProperties().getExpiresOn().toString())); }); Thread.sleep(2000); - // We need the Cloud Rsa key with bigger key size, so you want to update the key in key vault to ensure it has the required size. - // Calling createRsaKey on an existing key creates a new version of the key in the key vault with the new specified size. + // We need the RSA key with bigger key size, so you want to update the key in key vault to ensure it has the + // required size. Calling createRsaKey() on an existing key creates a new version of the key in the key vault + // with the new specified size. keyAsyncClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") .setExpiresOn(OffsetDateTime.now().plusYears(1)) .setKeySize(4096)) - .subscribe(keyResponse -> - System.out.printf("Key is created with name %s and type %s%n", keyResponse.getName(), keyResponse.getKeyType())); + .subscribe(keyResponse -> + System.out.printf("Key is created with name %s and type %s%n", keyResponse.getName(), + keyResponse.getKeyType())); Thread.sleep(2000); - // The Cloud Rsa Key is no longer needed, need to delete it from the key vault. + // The RSA key is no longer needed, need to delete it from the key vault. keyAsyncClient.beginDeleteKey("CloudRsaKey") .subscribe(pollResponse -> { System.out.println("Delete Status: " + pollResponse.getStatus().toString()); @@ -80,14 +90,15 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Key Delete Date: " + pollResponse.getValue().getDeletedOn().toString()); }); - //To ensure key is deleted on server side. + // To ensure the key is deleted server-side. Thread.sleep(30000); // If the keyvault is soft-delete enabled, then for permanent deletion deleted keys need to be purged. - keyAsyncClient.purgeDeletedKeyWithResponse("CloudRsaKey").subscribe(purgeResponse -> - System.out.printf("Cloud Rsa key purge status response %d%n", purgeResponse.getStatusCode())); + keyAsyncClient.purgeDeletedKeyWithResponse("CloudRsaKey") + .subscribe(purgeResponse -> + System.out.printf("RSA key purge status response %d%n", purgeResponse.getStatusCode())); - //To ensure key is purged on server side. + // To ensure the key is purged server-side. Thread.sleep(15000); } } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyAsyncClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyAsyncClientJavaDocCodeSnippets.java index 93ab3e70734a..f79903c02fee 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyAsyncClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyAsyncClientJavaDocCodeSnippets.java @@ -45,7 +45,7 @@ public final class KeyAsyncClientJavaDocCodeSnippets { public KeyAsyncClient createAsyncClient() { // BEGIN: com.azure.security.keyvault.keys.KeyAsyncClient.instantiation KeyAsyncClient keyAsyncClient = new KeyClientBuilder() - .vaultUrl("https://myvault.azure.net/") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); // END: com.azure.security.keyvault.keys.KeyAsyncClient.instantiation @@ -60,7 +60,7 @@ public KeyAsyncClient createAsyncClient() { public KeyAsyncClient createAsyncClientWithHttpClient() { // BEGIN: com.azure.security.keyvault.keys.KeyAsyncClient.instantiation.withHttpClient KeyAsyncClient keyAsyncClient = new KeyClientBuilder() - .vaultUrl("https://myvault.azure.net/") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)) .httpClient(HttpClient.createDefault()) @@ -74,15 +74,15 @@ public KeyAsyncClient createAsyncClientWithHttpClient() { * @return An instance of {@link KeyAsyncClient} */ public KeyAsyncClient createAsyncClientWithPipeline() { - // BEGIN: com.azure.security.keyvault.keys.KeyAsyncClient.instantiation.withHttpPipeline + // BEGIN: com.azure.security.keyvault.keys.KeyAsyncClient.instantiation.withPipeline HttpPipeline pipeline = new HttpPipelineBuilder() .policies(new KeyVaultCredentialPolicy(new DefaultAzureCredentialBuilder().build()), new RetryPolicy()) .build(); KeyAsyncClient keyAsyncClient = new KeyClientBuilder() .pipeline(pipeline) - .vaultUrl("https://myvault.azure.net/") + .vaultUrl("") .buildAsyncClient(); - // END: com.azure.security.keyvault.keys.KeyAsyncClient.instantiation.withHttpPipeline + // END: com.azure.security.keyvault.keys.KeyAsyncClient.instantiation.withPipeline return keyAsyncClient; } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyClientJavaDocCodeSnippets.java index 393246f0c977..af2366cb9a4a 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyClientJavaDocCodeSnippets.java @@ -44,7 +44,7 @@ public final class KeyClientJavaDocCodeSnippets { public KeyClient createClient() { // BEGIN: com.azure.security.keyvault.keys.KeyClient.instantiation KeyClient keyClient = new KeyClientBuilder() - .vaultUrl("https://myvault.azure.net/") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); // END: com.azure.security.keyvault.keys.KeyClient.instantiation @@ -153,7 +153,7 @@ public void beginDeleteKey() { System.out.printf("Key delete date: %s%n" + deletedKey.getDeletedOn()); System.out.printf("Deleted key's recovery id: %s%n", deletedKey.getRecoveryId()); - // Key is being deleted on server. + // Key is being deleted on the server. deleteKeyPoller.waitForCompletion(); // Key is deleted // END: com.azure.security.keyvault.keys.KeyClient.deleteKey#String @@ -350,7 +350,7 @@ public void beginRecoverDeletedKey() { System.out.printf("Recovered key name: %s%n", recoveredKey.getName()); System.out.printf("Recovered key id: %s%n", recoveredKey.getId()); - // Key is being recovered on server. + // Key is being recovered on the server. recoverKeyPoller.waitForCompletion(); // Key is recovered // END: com.azure.security.keyvault.keys.KeyClient.recoverDeletedKey#String diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyRotation.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyRotation.java index 482bcf2df309..8717c3941233 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyRotation.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyRotation.java @@ -23,14 +23,19 @@ public class KeyRotation { * create a new key version. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when an invalid key vault endpoint is passed. */ public static void main(String[] args) { - // Instantiate a KeyClient that will be used to call the service. Notice that the KeyClient is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + /* Instantiate a KeyClient that will be used to call the service. Notice that the client is using default Azure + credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. + + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyClient keyClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); @@ -47,15 +52,16 @@ public static void main(String[] args) { List keyRotationLifetimeActionList = new ArrayList<>(); KeyRotationLifetimeAction rotateLifetimeAction = new KeyRotationLifetimeAction(KeyRotationPolicyAction.ROTATE) .setTimeAfterCreate("P90D"); // Rotate the key after 90 days of its creation. + keyRotationLifetimeActionList.add(rotateLifetimeAction); + KeyRotationPolicy keyRotationPolicy = new KeyRotationPolicy() .setLifetimeActions(keyRotationLifetimeActionList) .setExpiresIn("P6M"); // Make any new versions of the key expire 6 months after creation. // An object containing the details of the recently updated key rotation policy will be returned by the update // method. - KeyRotationPolicy updatedPolicy = - keyClient.updateKeyRotationPolicy(keyName, keyRotationPolicy); + KeyRotationPolicy updatedPolicy = keyClient.updateKeyRotationPolicy(keyName, keyRotationPolicy); System.out.printf("Updated key rotation policy with id: %s%n", updatedPolicy.getId()); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyRotationAsync.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyRotationAsync.java index 24cfe13e5fc5..c3458ea0b5ba 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyRotationAsync.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/KeyRotationAsync.java @@ -22,14 +22,19 @@ public class KeyRotationAsync { * create a new key version. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when an invalid key vault endpoint is passed. */ public static void main(String[] args) { - // Instantiate a KeyAsyncClient that will be used to call the service. Notice that the KeyAsyncClient is using - // default Azure credentials. To make default credentials work, ensure that environment variables - // 'AZURE_CLIENT_ID', 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + /* Instantiate a KeyAsyncClient that will be used to call the service. Notice that the client is using default + Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. + + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyAsyncClient keyAsyncClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); @@ -47,7 +52,9 @@ public static void main(String[] args) { List keyRotationLifetimeActionList = new ArrayList<>(); KeyRotationLifetimeAction rotateLifetimeAction = new KeyRotationLifetimeAction(KeyRotationPolicyAction.ROTATE) .setTimeAfterCreate("P90D"); // Rotate the key after 90 days of its creation. + keyRotationLifetimeActionList.add(rotateLifetimeAction); + KeyRotationPolicy keyRotationPolicy = new KeyRotationPolicy() .setLifetimeActions(keyRotationLifetimeActionList) .setExpiresIn("P6M"); // Make any new versions of the key expire 6 months after creation. diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ListOperations.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ListOperations.java index 3d0ed3295223..3ae26850cb2b 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ListOperations.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ListOperations.java @@ -19,44 +19,54 @@ public class ListOperations { * Authenticates with the key vault and shows how to list keys and list versions of a specific key in the key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. */ public static void main(String[] args) throws IllegalArgumentException { + /* Instantiate a KeyClient that will be used to call the service. Notice that the client is using default Azure + credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a keyClient that will be used to call the service. Notice that the keyClient is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyClient keyClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildClient(); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildClient(); - // Let's create Ec and Rsa keys valid for 1 year. if the key - // already exists in the key vault, then a new version of the key is created. + // Let's create EC and ESA keys valid for 1 year. If a key already exists in the key vault, then a new version + // of the key is created. keyClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") - .setExpiresOn(OffsetDateTime.now().plusYears(1)) - .setKeySize(2048)); + .setExpiresOn(OffsetDateTime.now().plusYears(1)) + .setKeySize(2048)); keyClient.createEcKey(new CreateEcKeyOptions("CloudEcKey") - .setExpiresOn(OffsetDateTime.now().plusYears(1))); + .setExpiresOn(OffsetDateTime.now().plusYears(1))); // You need to check te type of keys already exist in your key vault. Let's list the keys and print their types. - // List operations don't return the keys with key material information. So, for each returned key we call getKey to get the key with its key material information. + // List operations don't return the keys with key material information. So, for each returned key we call + // getKey() to get the key with its key material information. for (KeyProperties key : keyClient.listPropertiesOfKeys()) { KeyVaultKey keyWithMaterial = keyClient.getKey(key.getName(), key.getVersion()); - System.out.printf("Received key with name %s and type %s", keyWithMaterial.getName(), keyWithMaterial.getKeyType()); + + System.out.printf("Received key with name %s and type %s", keyWithMaterial.getName(), + keyWithMaterial.getKeyType()); } - // We need the Cloud Rsa key with bigger key size, so you want to update the key in key vault to ensure it has the required size. - // Calling createRsaKey on an existing key creates a new version of the key in the key vault with the new specified size. + // We need the RSA key with a bigger key size, so you want to update the key in key vault to ensure it has the + // required size. Calling createRsaKey() on an existing key creates a new version of the key in the key vault + // with the new specified size. keyClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") - .setExpiresOn(OffsetDateTime.now().plusYears(1)) - .setKeySize(4096)); + .setExpiresOn(OffsetDateTime.now().plusYears(1)) + .setKeySize(4096)); - // You need to check all the different versions Cloud Rsa key had previously. Lets print all the versions of this key. + // You need to check all the different versions RSA key had previously. Lets print all the versions of this key. for (KeyProperties key : keyClient.listPropertiesOfKeyVersions("CloudRsaKey")) { - KeyVaultKey keyWithMaterial = keyClient.getKey(key.getName(), key.getVersion()); - System.out.printf("Received key's version with name %s, type %s and verison %s", keyWithMaterial.getName(), keyWithMaterial.getKeyType(), keyWithMaterial.getProperties().getVersion()); + KeyVaultKey keyWithMaterial = keyClient.getKey(key.getName(), key.getVersion()); + + System.out.printf("Received key's version with name %s, type %s and verison %s", keyWithMaterial.getName(), + keyWithMaterial.getKeyType(), keyWithMaterial.getProperties().getVersion()); } } } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ListOperationsAsync.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ListOperationsAsync.java index 99ef7486cee2..76fef8f8a684 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ListOperationsAsync.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ListOperationsAsync.java @@ -14,61 +14,77 @@ */ public class ListOperationsAsync { /** - * Authenticates with the key vault and shows how to asynchronously list keys and list versions of a specific key in the key vault. + * Authenticates with the key vault and shows how to asynchronously list keys and list versions of a specific key in + * the key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException { + /* Instantiate a KeyAsyncClient that will be used to call the service. Notice that the client is using default + Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate an async key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyAsyncClient keyAsyncClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildAsyncClient(); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildAsyncClient(); - // Let's create Ec and Rsa keys valid for 1 year. if the key - // already exists in the key vault, then a new version of the key is created. + // Let's create EC and RSA keys valid for 1 year. If a key already exists in the key vault, then a new version + // of the key is created. keyAsyncClient.createEcKey(new CreateEcKeyOptions("CloudEcKey") .setExpiresOn(OffsetDateTime.now().plusYears(1))) - .subscribe(keyResponse -> - System.out.printf("Key is created with name %s and type %s \n", keyResponse.getName(), keyResponse.getKeyType())); + .subscribe(keyResponse -> + System.out.printf("Key is created with name %s and type %s \n", keyResponse.getName(), + keyResponse.getKeyType())); Thread.sleep(2000); keyAsyncClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") .setExpiresOn(OffsetDateTime.now().plusYears(1))) - .subscribe(keyResponse -> - System.out.printf("Key is created with name %s and type %s \n", keyResponse.getName(), keyResponse.getKeyType())); + .subscribe(keyResponse -> + System.out.printf("Key is created with name %s and type %s \n", keyResponse.getName(), + keyResponse.getKeyType())); Thread.sleep(2000); // You need to check te type of keys already exist in your key vault. Let's list the keys and print their types. - // List operations don't return the keys with key material information. So, for each returned key we call getKey to get the key with its key material information. + // List operations don't return the keys with key material information. So, for each returned key we call + // getKey() to get the key with its key material information. keyAsyncClient.listPropertiesOfKeys() .subscribe(keyBase -> - keyAsyncClient.getKey(keyBase.getName(), keyBase.getVersion()).subscribe(keyResponse -> - System.out.printf("Received key with name %s and type %s \n", keyResponse.getName(), keyResponse.getKeyType()))); + keyAsyncClient.getKey(keyBase.getName(), keyBase.getVersion()) + .subscribe(keyResponse -> + System.out.printf("Received key with name %s and type %s \n", keyResponse.getName(), + keyResponse.getKeyType()))); Thread.sleep(15000); - // We need the Cloud Rsa key with bigger key size, so you want to update the key in key vault to ensure it has the required size. - // Calling createRsaKey on an existing key creates a new version of the key in the key vault with the new specified size. + // We need the RSA key with a bigger key size, so you want to update the key in key vault to ensure it has the + // required size. Calling createRsaKey on an existing key creates a new version of the key in the key vault + // with the new specified size. keyAsyncClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") - .setKeySize(4096) - .setExpiresOn(OffsetDateTime.now().plusYears(1))).subscribe(keyResponse -> - System.out.printf("Key is created with name %s and type %s \n", keyResponse.getName(), keyResponse.getKeyType())); + .setKeySize(4096) + .setExpiresOn(OffsetDateTime.now().plusYears(1))) + .subscribe(keyResponse -> + System.out.printf("Key is created with name %s and type %s \n", keyResponse.getName(), + keyResponse.getKeyType())); Thread.sleep(2000); - // You need to check all the different versions Cloud Rsa key had previously. Lets print all the versions of this key. - keyAsyncClient.listPropertiesOfKeyVersions("CloudRsaKey").subscribe(keyBase -> - keyAsyncClient.getKey(keyBase.getName(), keyBase.getVersion()).subscribe(keyResponse -> - System.out.printf("Received key's version with name %s, type %s and version %s \n", keyResponse.getName(), - keyResponse.getKeyType(), keyResponse.getProperties().getVersion()))); + // You need to check all the different versions RSA key had previously. Lets print all the versions of this key. + keyAsyncClient.listPropertiesOfKeyVersions("CloudRsaKey") + .subscribe(keyBase -> + keyAsyncClient.getKey(keyBase.getName(), keyBase.getVersion()) + .subscribe(keyResponse -> + System.out.printf("Received key's version with name %s, type %s and version %s \n", + keyResponse.getName(), keyResponse.getKeyType(), + keyResponse.getProperties().getVersion()))); Thread.sleep(15000); } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ManagingDeletedKeys.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ManagingDeletedKeys.java index a701ab6691ca..21c4bdbf5366 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ManagingDeletedKeys.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ManagingDeletedKeys.java @@ -18,81 +18,82 @@ */ public class ManagingDeletedKeys { /** - * Authenticates with the key vault and shows how to list, recover and purge deleted keys in a soft-delete enabled key vault. + * Authenticates with the key vault and shows how to list, recover and purge deleted keys in a soft-delete enabled + * key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws IllegalArgumentException, InterruptedException { + /* NOTE: To manage deleted keys, your key vault needs to have soft-delete enabled. Soft-delete allows deleted + keys to be retained for a given retention period (90 days). During this period deleted keys can be recovered + and if a key needs to be permanently deleted then it needs to be purged.*/ - // NOTE: To manage deleted keys, your key vault needs to have soft-delete enabled. Soft-delete allows deleted keys - // to be retained for a given retention period (90 days). During this period deleted keys can be recovered and if - // a key needs to be permanently deleted then it needs to be purged. + /* Instantiate a KeyClient that will be used to call the service. Notice that the client is using default Azure + credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyClient keyClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildClient(); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildClient(); - // Let's create Ec and Rsa keys valid for 1 year. if the key - // already exists in the key vault, then a new version of the key is created. + // Let's create EC and RSA keys valid for 1 year. If the key already exists in the key vault, then a new version + // of the key is created. keyClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") - .setExpiresOn(OffsetDateTime.now().plusYears(1)) - .setKeySize(2048)); + .setExpiresOn(OffsetDateTime.now().plusYears(1)) + .setKeySize(2048)); keyClient.createEcKey(new CreateEcKeyOptions("CloudEcKey") - .setExpiresOn(OffsetDateTime.now().plusYears(1))); + .setExpiresOn(OffsetDateTime.now().plusYears(1))); - // The Cloud Rsa Key is no longer needed, need to delete it from the key vault. + // The RSA key is no longer needed, need to delete it from the key vault. SyncPoller deletedKeyPoller = keyClient.beginDeleteKey("CloudEcKey"); - PollResponse deletedKeyPollResponse = deletedKeyPoller.poll(); - - DeletedKey deletedKey = deletedKeyPollResponse.getValue(); + System.out.println("Deleted Date %s" + deletedKey.getDeletedOn().toString()); System.out.printf("Deleted Key's Recovery Id %s", deletedKey.getRecoveryId()); - // Key is being deleted on server. + // The key is being deleted on the server. deletedKeyPoller.waitForCompletion(); - // We accidentally Cloud Ec key. Let's recover it. + // We accidentally deleted the EC key. Let's recover it. // A deleted key can only be recovered if the key vault is soft-delete enabled. SyncPoller recoverEcKeyPoller = keyClient.beginRecoverDeletedKey("CloudEcKey"); - PollResponse recoveryEcKeyPollResponse = recoverEcKeyPoller.poll(); KeyVaultKey recoveredKey = recoveryEcKeyPollResponse.getValue(); + System.out.println("Recovered Key Name %s" + recoveredKey.getName()); System.out.printf("Recovered Key's Id %s", recoveredKey.getId()); - // Key is being recovered on server. + // The key is being recovered on the server. recoverEcKeyPoller.waitForCompletion(); - // The Cloud Ec and Rsa keys are no longer needed, need to delete them from the key vault. + // The EC and RSA keys are no longer needed, need to delete them from the key vault. SyncPoller ecDeletedKeyPoller = keyClient.beginDeleteKey("CloudEcKey"); - PollResponse ecDeletedKeyPollResponse = ecDeletedKeyPoller.poll(); - DeletedKey ecDeletedKey = ecDeletedKeyPollResponse.getValue(); + System.out.println("Deleted Date %s" + ecDeletedKey.getDeletedOn().toString()); System.out.printf("Deleted Key's Recovery Id %s", ecDeletedKey.getRecoveryId()); - // Key is being deleted on server. + // The key is being deleted on the server. ecDeletedKeyPoller.waitForCompletion(); SyncPoller rsaDeletedKeyPoller = keyClient.beginDeleteKey("CloudRsaKey"); - PollResponse rsaDeletedKeyPollResponse = rsaDeletedKeyPoller.poll(); - DeletedKey rsaDeletedKey = rsaDeletedKeyPollResponse.getValue(); + System.out.println("Deleted Date %s" + rsaDeletedKey.getDeletedOn().toString()); System.out.printf("Deleted Key's Recovery Id %s", rsaDeletedKey.getRecoveryId()); - // Key is being deleted on server. + // The key is being deleted on the server. rsaDeletedKeyPoller.waitForCompletion(); // You can list all the deleted and non-purged keys, assuming key vault is soft-delete enabled. @@ -104,7 +105,7 @@ public static void main(String[] args) throws IllegalArgumentException, Interrup keyClient.purgeDeletedKey("CloudEcKey"); keyClient.purgeDeletedKey("CloudRsaKey"); - //To ensure key is purged on server side. + // To ensure the key is purged server-side. Thread.sleep(15000); } } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ManagingDeletedKeysAsync.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ManagingDeletedKeysAsync.java index 9b2678df353a..1d8f5e136117 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ManagingDeletedKeysAsync.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ManagingDeletedKeysAsync.java @@ -14,43 +14,50 @@ */ public class ManagingDeletedKeysAsync { /** - * Authenticates with the key vault and shows how to asynchronously list, recover and purge deleted keys in a soft-delete enabled key vault. + * Authenticates with the key vault and shows how to asynchronously list, recover and purge deleted keys in a + * soft-delete enabled key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException { + /* NOTE: To manage deleted keys, your key vault needs to have soft-delete enabled. Soft-delete allows deleted + keys to be retained for a given retention period (90 days). During this period deleted keys can be recovered + and if a key needs to be permanently deleted then it needs to be purged.*/ - // NOTE: To manage deleted keys, your key vault needs to have soft-delete enabled. Soft-delete allows deleted keys - // to be retained for a given retention period (90 days). During this period deleted keys can be recovered and if - // a key needs to be permanently deleted then it needs to be purged. + /* Instantiate a KeyAsyncClient that will be used to call the service. Notice that the client is using default + Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ KeyAsyncClient keyAsyncClient = new KeyClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildAsyncClient(); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildAsyncClient(); - // Let's create Ec and Rsa keys valid for 1 year. if the key - // already exists in the key vault, then a new version of the key is created. + // Let's create EC and RSA keys valid for 1 year. If the key already exists in the key vault, then a new version + // of the key is created. keyAsyncClient.createEcKey(new CreateEcKeyOptions("CloudEcKey") .setExpiresOn(OffsetDateTime.now().plusYears(1))) - .subscribe(keyResponse -> - System.out.printf("Key is created with name %s and type %s %n", keyResponse.getName(), keyResponse.getKeyType())); + .subscribe(keyResponse -> + System.out.printf("Key is created with name %s and type %s %n", keyResponse.getName(), + keyResponse.getKeyType())); Thread.sleep(2000); keyAsyncClient.createRsaKey(new CreateRsaKeyOptions("CloudRsaKey") .setExpiresOn(OffsetDateTime.now().plusYears(1))) - .subscribe(keyResponse -> - System.out.printf("Key is created with name %s and type %s %n", keyResponse.getName(), keyResponse.getKeyType())); + .subscribe(keyResponse -> + System.out.printf("Key is created with name %s and type %s %n", keyResponse.getName(), + keyResponse.getKeyType())); Thread.sleep(2000); - // The Cloud Rsa Key is no longer needed, need to delete it from the key vault. + // The RSA key is no longer needed, need to delete it from the key vault. keyAsyncClient.beginDeleteKey("CloudEcKey") .subscribe(pollResponse -> { System.out.println("Delete Status: " + pollResponse.getStatus().toString()); @@ -58,10 +65,10 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Key Delete Date: " + pollResponse.getValue().getDeletedOn().toString()); }); - //To ensure key is deleted on server side. + // To ensure the key is deleted server-side. Thread.sleep(30000); - // We accidentally deleted Cloud Ec key. Let's recover it. + // We accidentally deleted the EC key. Let's recover it. // A deleted key can only be recovered if the key vault is soft-delete enabled. keyAsyncClient.beginRecoverDeletedKey("CloudEcKey") .subscribe(pollResponse -> { @@ -70,10 +77,10 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Recover Key Type: " + pollResponse.getValue().getKeyType()); }); - //To ensure key is recovered on server side before moving forward. + // To ensure the key is recovered server-side before moving forward. Thread.sleep(10000); - // The Cloud Ec and Rsa keys are no longer needed, need to delete them from the key vault. + // The EC and RSA keys are no longer needed, need to delete them from the key vault. keyAsyncClient.beginDeleteKey("CloudEcKey") .subscribe(pollResponse -> { System.out.println("Delete Status: " + pollResponse.getStatus().toString()); @@ -88,23 +95,26 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Key Delete Date: " + pollResponse.getValue().getDeletedOn().toString()); }); - // To ensure key is deleted on server side. + // To ensure the key is deleted server-side. Thread.sleep(30000); // You can list all the deleted and non-purged keys, assuming key vault is soft-delete enabled. - keyAsyncClient.listDeletedKeys().subscribe(deletedKey -> - System.out.printf("Deleted key's recovery Id %s %n", deletedKey.getRecoveryId())); + keyAsyncClient.listDeletedKeys() + .subscribe(deletedKey -> + System.out.printf("Deleted key's recovery Id %s %n", deletedKey.getRecoveryId())); Thread.sleep(15000); // If the keyvault is soft-delete enabled, then for permanent deletion deleted keys need to be purged. - keyAsyncClient.purgeDeletedKeyWithResponse("CloudRsaKey").subscribe(purgeResponse -> - System.out.printf("Storage account key purge status response %d %n", purgeResponse.getStatusCode())); + keyAsyncClient.purgeDeletedKeyWithResponse("CloudRsaKey") + .subscribe(purgeResponse -> + System.out.printf("Storage account key purge status response %d %n", purgeResponse.getStatusCode())); - keyAsyncClient.purgeDeletedKeyWithResponse("CloudEcKey").subscribe(purgeResponse -> - System.out.printf("Bank account key purge status response %d %n", purgeResponse.getStatusCode())); + keyAsyncClient.purgeDeletedKeyWithResponse("CloudEcKey") + .subscribe(purgeResponse -> + System.out.printf("Bank account key purge status response %d %n", purgeResponse.getStatusCode())); - // To ensure key is purged on server side. + // To ensure the key is purged server-side. Thread.sleep(15000); } } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ReadmeSamples.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ReadmeSamples.java index c92d3ab28c9b..78e2859750b6 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ReadmeSamples.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/ReadmeSamples.java @@ -74,10 +74,10 @@ public void createKeyClient() { public void createCryptographyClient() { // BEGIN: readme-sample-createCryptographyClient - // Create client with key identifier from key vault. + // Create client with key identifier from Key Vault. CryptographyClient cryptoClient = new CryptographyClientBuilder() - .credential(new DefaultAzureCredentialBuilder().build()) .keyIdentifier("") + .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); // END: readme-sample-createCryptographyClient } @@ -122,10 +122,10 @@ public void deleteKey() { // Deleted key is accessible as soon as polling begins. DeletedKey deletedKey = deletedKeyPollResponse.getValue(); - // Deletion date only works for a SoftDelete-enabled Key Vault. + // Deletion date only works for a soft-delete enabled key vault. System.out.printf("Deletion date: %s%n", deletedKey.getDeletedOn()); - // Key is being deleted on server. + // The key is being deleted on the server. deletedKeyPoller.waitForCompletion(); // END: readme-sample-deleteKey } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/EncryptDecryptOperations.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/EncryptDecryptOperations.java index c74bbddfb2f7..6fea13cd83a5 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/EncryptDecryptOperations.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/EncryptDecryptOperations.java @@ -14,22 +14,25 @@ * Sample demonstrates how to set, get, update and delete a key. */ public class EncryptDecryptOperations { - /** * Authenticates with the key vault and shows how to set, get, update and delete a key in the key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException, IllegalArgumentException { + /* Instantiate a CryptographyClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a key identifier for a key stored in a key vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ CryptographyClient cryptoClient = new CryptographyClientBuilder() .credential(new DefaultAzureCredentialBuilder().build()) - .keyIdentifier("") + .keyIdentifier("") .buildAsyncClient(); byte[] plaintext = new byte[100]; @@ -38,9 +41,10 @@ public static void main(String[] args) throws InterruptedException, IllegalArgum .subscribe(encryptResult -> { System.out.printf("Returned ciphertext size is %d bytes with algorithm %s\n", encryptResult.getCipherText().length, encryptResult.getAlgorithm().toString()); - //Let's decrypt the encrypted response. + // Let's decrypt the encrypted response. cryptoAsyncClient.decrypt(EncryptionAlgorithm.RSA_OAEP, encryptResult.getCipherText()) - .subscribe(decryptResult -> System.out.printf("Returned plaintext size is %d bytes\n", decryptResult.getPlainText().length)); + .subscribe(decryptResult -> System.out.printf("Returned plaintext size is %d bytes\n", + decryptResult.getPlainText().length)); }); Thread.sleep(5000); diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/KeyWrapUnwrapOperations.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/KeyWrapUnwrapOperations.java index e11d3a192c52..e1edd93564e4 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/KeyWrapUnwrapOperations.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/KeyWrapUnwrapOperations.java @@ -15,22 +15,25 @@ * Sample demonstrates how to set, get, update and delete a key. */ public class KeyWrapUnwrapOperations { - /** * Authenticates with the key vault and shows how to set, get, update and delete a key in the key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException, IllegalArgumentException { + /* Instantiate a CryptographyClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a key identifier for a key stored in a key vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ CryptographyClient cryptoClient = new CryptographyClientBuilder() .credential(new DefaultAzureCredentialBuilder().build()) - .keyIdentifier("") + .keyIdentifier("") .buildAsyncClient(); byte[] plaintext = new byte[100]; @@ -35,17 +39,22 @@ public static void main(String[] args) throws InterruptedException, IllegalArgum // Let's wrap a simple dummy key content. cryptoAsyncClient.wrapKey(KeyWrapAlgorithm.RSA_OAEP, plaintext) .subscribe(keyWrapResult -> { - System.out.printf("Returned encrypted key size is %d bytes with algorithm %s\n", keyWrapResult.getEncryptedKey().length, keyWrapResult.getAlgorithm().toString()); - //Let's decrypt the encrypted response. + System.out.printf("Returned encrypted key size is %d bytes with algorithm %s\n", + keyWrapResult.getEncryptedKey().length, keyWrapResult.getAlgorithm().toString()); + // Let's decrypt the encrypted response. cryptoAsyncClient.unwrapKey(KeyWrapAlgorithm.RSA_OAEP, keyWrapResult.getEncryptedKey()) - .subscribe(keyUnwrapResult -> System.out.printf("Returned unwrapped key size is %d bytes\n", keyUnwrapResult.getKey().length)); + .subscribe(keyUnwrapResult -> + System.out.printf("Returned unwrapped key size is %d bytes\n", keyUnwrapResult.getKey().length)); }); Thread.sleep(5000); // Let's do Key Wrap and Unwrap operations with a symmetric key. - byte[] symmetrickeyContent = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; - byte[] keyContentToWrap = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, (byte) 0x88, (byte) 0x99, (byte) 0xAA, (byte) 0xBB, (byte) 0xCC, (byte) 0xDD, (byte) 0xEE, (byte) 0xFF }; + byte[] symmetricKeyContent = + {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}; + byte[] keyContentToWrap = + {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, (byte) 0x88, (byte) 0x99, (byte) 0xAA, (byte) 0xBB, + (byte) 0xCC, (byte) 0xDD, (byte) 0xEE, (byte) 0xFF}; } } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/SignVerifyOperations.java b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/SignVerifyOperations.java index 68301fbb0671..9938158a6ded 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/SignVerifyOperations.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/samples/java/com/azure/security/keyvault/keys/cryptography/SignVerifyOperations.java @@ -16,23 +16,26 @@ * Sample demonstrates how to set, get, update and delete a key. */ public class SignVerifyOperations { - /** * Authenticates with the key vault and shows how to set, get, update and delete a key in the key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. * @throws NoSuchAlgorithmException when the specified algorithm doesn't exist. */ public static void main(String[] args) throws InterruptedException, IllegalArgumentException, NoSuchAlgorithmException { + /* Instantiate a CryptographyClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a key client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a key identifier for a key stored in a key vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-keys/README.md) + for links and instructions. */ CryptographyClient cryptoClient = new CryptographyClientBuilder() .credential(new DefaultAzureCredentialBuilder().build()) - .keyIdentifier("") + .keyIdentifier("") .buildAsyncClient(); byte[] plaintext = new byte[100]; @@ -42,24 +45,28 @@ public static void main(String[] args) throws InterruptedException, IllegalArgum // Let's create a signature from a simple digest. cryptoAsyncClient.sign(SignatureAlgorithm.RS256, digest) .subscribe(signResult -> { - System.out.printf("Returned signature size is %d bytes with algorithm %s\n", signResult.getSignature().length, signResult.getAlgorithm().toString()); + System.out.printf("Returned signature size is %d bytes with algorithm %s\n", + signResult.getSignature().length, signResult.getAlgorithm().toString()); // Let's verify the signature against the digest. cryptoAsyncClient.verify(SignatureAlgorithm.RS256, digest, signResult.getSignature()) - .subscribe(verifyResult -> System.out.printf("Signature verified : %s\n", verifyResult.isValid())); + .subscribe(verifyResult -> + System.out.printf("Signature verified : %s\n", verifyResult.isValid())); }); Thread.sleep(4000); - // We can sign the raw plain text data without having to create a digest + // We can sign the raw plain text data without having to create a digest. cryptoAsyncClient.sign(SignatureAlgorithm.RS256, digest) .subscribe(signResult -> { - System.out.printf("Returned signature size is %d bytes with algorithm %s\n", signResult.getSignature().length, signResult.getAlgorithm().toString()); + System.out.printf("Returned signature size is %d bytes with algorithm %s\n", + signResult.getSignature().length, signResult.getAlgorithm().toString()); // Let's verify the signature against the raw plain text data. cryptoAsyncClient.verify(SignatureAlgorithm.RS256, digest, signResult.getSignature()) - .subscribe(verifyDataResult -> System.out.printf("Signature verified : %s\n", verifyDataResult.isValid())); + .subscribe(verifyDataResult -> + System.out.printf("Signature verified : %s\n", verifyDataResult.isValid())); }); - //Block main thread to let async operations finish + // Block main thread to let async operations finish. Thread.sleep(4000); } } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTest.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTest.java index 67f8f982f487..a43f9c6eaad3 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTest.java @@ -257,7 +257,7 @@ public void deleteKey(HttpClient httpClient, KeyServiceVersion serviceVersion) { PollResponse pollResponse = deletedKeyPoller.poll(); DeletedKey deletedKey = pollResponse.getValue(); - // Key is being deleted on server. + // Key is being deleted on the server. while (!pollResponse.getStatus().isComplete()) { sleepInRecordMode(10000); diff --git a/sdk/keyvault/azure-security-keyvault-secrets/README.md b/sdk/keyvault/azure-security-keyvault-secrets/README.md index d8da935d2d04..0fb6ea7f0d92 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/README.md +++ b/sdk/keyvault/azure-security-keyvault-secrets/README.md @@ -9,10 +9,8 @@ Use the Azure Key Vault Secrets client library to create and manage secrets. ## Getting started ### Include the package - #### Include the BOM file - -Please include the azure-sdk-bom to your project to take dependency on the General Availability (GA) version of the library. In the following snippet, replace the {bom_version_to_target} placeholder with the version number. +Please include the `azure-sdk-bom` to your project to take dependency on the General Availability (GA) version of the library. In the following snippet, replace the {bom_version_to_target} placeholder with the version number. To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/boms/azure-sdk-bom/README.md). ```xml @@ -28,6 +26,7 @@ To learn more about the BOM, see the [AZURE SDK BOM README](https://github.com/A ``` + and then include the direct dependency in the dependencies section without the version tag as shown below. ```xml @@ -40,8 +39,7 @@ and then include the direct dependency in the dependencies section without the v ``` #### Include direct dependency -If you want to take dependency on a particular version of the library that is not present in the BOM, -add the direct dependency to your project as follows. +If you want to take dependency on a particular version of the library that is not present in the BOM, add the direct dependency to your project as follows. [//]: # ({x-version-update-start;com.azure:azure-security-keyvault-secrets;current}) ```xml @@ -56,68 +54,16 @@ add the direct dependency to your project as follows. ### Prerequisites - A [Java Development Kit (JDK)][jdk_link], version 8 or later. -- [Azure Subscription][azure_subscription] -- An existing [Azure Key Vault][azure_keyvault]. If you need to create a Key Vault, you can use the [Azure Cloud Shell][azure_cloud_shell] to create one with this Azure CLI command. Replace `` and `` with your own, unique names: - -```bash -az keyvault create --resource-group --name -``` +- An [Azure Subscription][azure_subscription]. +- An existing [Azure Key Vault][azure_keyvault]. If you need to create a key vault, you can do so in the Azure Portal by following the steps in [this document][azure_keyvault_portal]. Alternatively, you can use the Azure CLI by following the steps in [this document][azure_keyvault_cli]. ### Authenticate the client -In order to interact with the Key Vault service, you'll need to create an instance of the [SecretClient](#create-secret-client) class. You would need a **vault url** and **client secret credentials (client id, client secret, tenant id)** to instantiate a client object using the `DefaultAzureCredential` examples shown in this document. - -The `DefaultAzureCredential` way of authentication by providing client secret credentials is being used in this getting started section but you can find more ways to authenticate with [azure-identity][azure_identity]. - -#### Create/Get credentials -To create/get client secret credentials you can use the [Azure Portal][azure_create_application_in_portal], [Azure CLI][azure_keyvault_cli_full] or [Azure Cloud Shell][azure_cloud_shell] - -Here is an [Azure Cloud Shell][azure_cloud_shell] snippet below to - - * Create a service principal and configure its access to Azure resources: - -```bash -az ad sp create-for-rbac -n --skip-assignment -``` - -Output: +In order to interact with the Azure Key Vault service, you will need to create an instance of the [`SecretClient`](#create-secret-client) class, a **vault url** and a credential object. The examples shown in this document use a credential object named [`DefaultAzureCredential`][default_azure_credential], which is appropriate for most scenarios, including local development and production environments. Additionally, we recommend using a [managed identity][managed_identity] for authentication in production environments. -```json -{ - "appId": "generated-app-ID", - "displayName": "dummy-app-name", - "name": "http://dummy-app-name", - "password": "random-password", - "tenant": "tenant-ID" -} -``` - -* Use the above returned credentials information to set **AZURE_CLIENT_ID** (appId), **AZURE_CLIENT_SECRET** (password), and **AZURE_TENANT_ID** (tenant) environment variables. The following example shows a way to do this in Bash: - -```bash -export AZURE_CLIENT_ID="generated-app-ID" -export AZURE_CLIENT_SECRET="random-password" -export AZURE_TENANT_ID="tenant-ID" -```` - -* Grant the aforementioned application authorization to perform secret operations on the Key Vault: - -```bash -az keyvault set-policy --name --spn $AZURE_CLIENT_ID --secret-permissions backup delete get list set -``` - -> --secret-permissions: -> Accepted values: backup, delete, get, list, purge, recover, restore, set - -If you have enabled role-based access control (RBAC) for Key Vault instead, you can find roles like "Key Vault Secrets Officer" in our [RBAC guide][rbac_guide]. - -* Use the aforementioned Key Vault name to retrieve details of your Vault, which also contain your Key Vault URL: - -```bash -az keyvault show --name -``` +You can find more information on different ways of authenticating and their corresponding credential types in the [Azure Identity documentation][azure_identity]. #### Create secret client -Once you've populated the **AZURE_CLIENT_ID**, **AZURE_CLIENT_SECRET**, and **AZURE_TENANT_ID** environment variables and replaced **your-key-vault-url** with the URI returned above, you can create the SecretClient: +Once you perform [the authentication set up that suits you best][default_azure_credential] and replaced **your-key-vault-url** with the URL for your key vault, you can create the `SecretClient`: ```java readme-sample-createSecretClient SecretClient secretClient = new SecretClientBuilder() @@ -126,7 +72,7 @@ SecretClient secretClient = new SecretClientBuilder() .buildClient(); ``` -> NOTE: For using an asynchronous client use SecretAsyncClient instead of SecretClient and call `buildAsyncClient()` +> NOTE: For using an asynchronous client use `SecretAsyncClient` instead of `SecretClient` and call `buildAsyncClient()`. ## Key concepts ### Secret @@ -138,7 +84,7 @@ A secret is the fundamental resource within Azure Key Vault. From a developer's * updated: Indicates when this version of the secret was updated. ### Secret client: -The secret client performs the interactions with the Azure Key Vault service for getting, setting, updating, deleting, and listing secrets and its versions. Asynchronous (SecretAsyncClient) and synchronous (SecretClient) clients exist in the SDK allowing for selection of a client based on an application's use case. Once you've initialized a secret, you can interact with the primary resource types in Key Vault. +The secret client performs the interactions with the Azure Key Vault service for getting, setting, updating, deleting, and listing secrets and its versions. Asynchronous (`SecretAsyncClient`) and synchronous (`SecretClient`) clients exist in the SDK allowing for selection of a client based on an application's use case. Once you've initialized a secret, you can interact with the primary resource types in Key Vault. ## Examples ### Sync API @@ -299,7 +245,7 @@ All client libraries, by default, use the Tomcat-native Boring SSL library to en Several Key Vault Java SDK samples are available to you in the SDK's GitHub repository. These samples provide example code for additional scenarios commonly encountered while working with Azure Key Vault. ## Next steps samples -Samples are explained in detail [here][samples]. +Samples are explained in detail [here][samples_readme]. ### Additional documentation For more extensive documentation on Azure Key Vault, see the [API reference documentation][azkeyvault_rest]. @@ -314,24 +260,20 @@ This project has adopted the [Microsoft Open Source Code of Conduct][microsoft_c [source_code]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/src [api_documentation]: https://azure.github.io/azure-sdk-for-java -[azure_identity]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/identity/azure-identity [azkeyvault_docs]: https://docs.microsoft.com/azure/key-vault/ -[maven]: https://maven.apache.org/ +[azure_identity]: https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable [azure_subscription]: https://azure.microsoft.com/ -[azure_keyvault]: https://docs.microsoft.com/azure/key-vault/secrets/quick-create-portal -[azure_cli]: https://docs.microsoft.com/cli/azure -[rest_api]: https://docs.microsoft.com/rest/api/keyvault/ +[azure_keyvault]: https://docs.microsoft.com/azure/key-vault/general/overview +[azure_keyvault_cli]: https://docs.microsoft.com/azure/key-vault/general/quick-create-cli +[azure_keyvault_portal]: https://docs.microsoft.com/azure/key-vault/general/quick-create-portal +[default_azure_credential]: https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable#defaultazurecredential +[managed_identity]: https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview [azkeyvault_rest]: https://docs.microsoft.com/rest/api/keyvault/ -[azure_create_application_in_portal]: https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal -[azure_keyvault_cli]: https://docs.microsoft.com/azure/key-vault/quick-create-cli -[azure_keyvault_cli_full]: https://docs.microsoft.com/cli/azure/keyvault?view=azure-cli-latest [secrets_samples]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets -[samples]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/src/samples/README.md +[samples_readme]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/src/samples/README.md [performance_tuning]: https://github.com/Azure/azure-sdk-for-java/wiki/Performance-Tuning [jdk_link]: https://docs.microsoft.com/java/azure/jdk/?view=azure-java-stable -[azure_cloud_shell]: https://shell.azure.com/bash [http_clients_wiki]: https://github.com/Azure/azure-sdk-for-java/wiki/HTTP-clients [microsoft_code_of_conduct]: https://opensource.microsoft.com/codeofconduct/ -[rbac_guide]: https://docs.microsoft.com/azure/key-vault/general/rbac-guide ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%2Fkeyvault%2Fazure-security-keyvault-secrets%2FREADME.png) diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretAsyncClient.java b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretAsyncClient.java index 6343a2f80b43..68ee2da903ab 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretAsyncClient.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretAsyncClient.java @@ -51,15 +51,15 @@ * Azure Key Vault. * *

Construct the async client

- * + * *
  * SecretAsyncClient secretAsyncClient = new SecretClientBuilder()
  *     .credential(new DefaultAzureCredentialBuilder().build())
- *     .vaultUrl("https://myvault.vault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
  *     .buildAsyncClient();
  * 
- * + * * * @see SecretClientBuilder * @see PagedFlux @@ -130,7 +130,7 @@ Duration getDefaultPollingInterval() { *

Creates a new secret which activates in one day and expires in one year. Subscribes to the call asynchronously * and prints out the newly created secret details when a response is received.

* - * + * *
      * SecretProperties properties = new SecretProperties()
      *     .setExpiresOn(OffsetDateTime.now().plusDays(60));
@@ -139,10 +139,10 @@ Duration getDefaultPollingInterval() {
      *
      * secretAsyncClient.setSecret(newSecret)
      *     .subscribe(secretResponse ->
-     *     System.out.printf("Secret is created with name %s and value %s %n",
-     *         secretResponse.getName(), secretResponse.getValue()));
+     *         System.out.printf("Secret is created with name %s and value %s %n",
+     *             secretResponse.getName(), secretResponse.getValue()));
      * 
- * + * * * @param secret The Secret object containing information about the secret and its properties. The properties * {@link KeyVaultSecret#getName() secret.name} and {@link KeyVaultSecret#getValue() secret.value} cannot be @@ -174,7 +174,7 @@ public Mono setSecret(KeyVaultSecret secret) { *

Creates a new secret which activates in one day and expires in one year. Subscribes to the call asynchronously * and prints out the newly created secret details when a response is received.

* - * + * *
      * KeyVaultSecret newSecret = new KeyVaultSecret("secretName", "secretValue").
      *     setProperties(new SecretProperties().setExpiresOn(OffsetDateTime.now().plusDays(60)));
@@ -183,7 +183,7 @@ public Mono setSecret(KeyVaultSecret secret) {
      *         System.out.printf("Secret is created with name %s and value %s %n",
      *             secretResponse.getValue().getName(), secretResponse.getValue().getValue()));
      * 
- * + * * * @param secret The Secret object containing information about the secret and its properties. The properties * {@link KeyVaultSecret#getName() secret.name} and {@link KeyVaultSecret#getValue() secret.value} cannot be @@ -227,14 +227,14 @@ Mono> setSecretWithResponse(KeyVaultSecret secret, Cont *

Code sample

*

Creates a new secret in the key vault. Subscribes to the call asynchronously and prints out * the newly created secret details when a response is received.

- * + * *
      * secretAsyncClient.setSecret("secretName", "secretValue")
      *     .subscribe(secretResponse ->
      *         System.out.printf("Secret is created with name %s and value %s%n",
      *             secretResponse.getName(), secretResponse.getValue()));
      * 
- * + * * * @param name The name of the secret. It is required and cannot be null. * @param value The value of the secret. It is required and cannot be null. @@ -269,7 +269,7 @@ Mono> setSecretWithResponse(String name, String value, *

Gets a specific version of the secret in the key vault. Subscribes to the call * asynchronously and prints out the returned secret details when a response is received.

* - * + * *
      * String secretVersion = "6A385B124DEF4096AF1361A85B16C204";
      * secretAsyncClient.getSecret("secretName", secretVersion)
@@ -280,7 +280,7 @@ Mono> setSecretWithResponse(String name, String value,
      *         System.out.printf("Secret is returned with name %s and value %s %n",
      *             secretWithVersion.getName(), secretWithVersion.getValue()));
      * 
- * + * * * @param name The name of the secret, cannot be null. * @param version The version of the secret to retrieve. If this is an empty string or null, this @@ -308,7 +308,7 @@ public Mono getSecret(String name, String version) { *

Code sample

*

Gets a specific version of the secret in the key vault. Subscribes to the call asynchronously and prints out * the returned secret details when a response is received.

- * + * *
      * String secretVersion = "6A385B124DEF4096AF1361A85B16C204";
      * secretAsyncClient.getSecretWithResponse("secretName", secretVersion)
@@ -319,7 +319,7 @@ public Mono getSecret(String name, String version) {
      *         System.out.printf("Secret is returned with name %s and value %s %n",
      *             secretWithVersion.getValue().getName(), secretWithVersion.getValue().getValue()));
      * 
- * + * * * @param name The name of the secret, cannot be null. * @param version The version of the secret to retrieve. If this is an empty string or null, this call is equivalent @@ -355,14 +355,14 @@ Mono> getSecretWithResponse(String name, String version *

Code sample

*

Gets latest version of the secret in the key vault. Subscribes to the call asynchronously and prints out the * returned secret details when a response is received.

- * + * *
      * secretAsyncClient.getSecret("secretName")
      *     .subscribe(secretWithVersion ->
      *         System.out.printf("Secret is returned with name %s and value %s %n",
      *             secretWithVersion.getName(), secretWithVersion.getValue()));
      * 
- * + * * * @param name The name of the secret. * @return A {@link Mono} containing the requested {@link KeyVaultSecret secret}. @@ -391,7 +391,7 @@ public Mono getSecret(String name) { * time, and then updates it in the Azure Key Vault. Subscribes to the call asynchronously and prints out the * returned secret details when a response is received.

* - * + * *
      * secretAsyncClient.getSecret("secretName")
      *     .subscribe(secretResponseValue -> {
@@ -404,7 +404,7 @@ public Mono getSecret(String name) {
      *                     secretResponse.getNotBefore().toString()));
      *     });
      * 
- * + * * * @param secretProperties The {@link SecretProperties secret properties} object with updated properties. * @return A {@link Mono} containing the {@link SecretProperties updated secret}. @@ -433,7 +433,7 @@ public Mono updateSecretProperties(SecretProperties secretProp * time, and then updates it in the Azure Key Vault. Subscribes to the call asynchronously and prints out the * returned secret details when a response is received.

* - * + * *
      * secretAsyncClient.getSecret("secretName")
      *     .subscribe(secretResponseValue -> {
@@ -446,7 +446,7 @@ public Mono updateSecretProperties(SecretProperties secretProp
      *                     secretResponse.getValue().getNotBefore().toString()));
      *     });
      * 
- * + * * *

The {@code secret} is required and its fields {@link SecretProperties#getName() name} and * {@link SecretProperties#getVersion() version} cannot be null.

@@ -493,7 +493,7 @@ Mono> updateSecretPropertiesWithResponse(SecretProper *

Code sample

*

Deletes the secret in the Azure Key Vault. Subscribes to the call asynchronously and prints out the deleted * secret details when a response is received.

- * + * *
      * secretAsyncClient.beginDeleteSecret("secretName")
      *     .subscribe(pollResponse -> {
@@ -502,7 +502,7 @@ Mono> updateSecretPropertiesWithResponse(SecretProper
      *         System.out.println("Deleted Secret Value: " + pollResponse.getValue().getValue());
      *     });
      * 
- * + * * * @param name The name of the secret to be deleted. * @return A {@link PollerFlux} to poll on and retrieve {@link DeletedSecret deleted secret}. @@ -559,13 +559,13 @@ Mono> deleteSecretWithResponse(String name, Context cont *

Gets the deleted secret from the key vault enabled for soft-delete. Subscribes to the call * asynchronously and prints out the deleted secret details when a response is received.

* - * + * *
      * secretAsyncClient.getDeletedSecret("secretName")
      *     .subscribe(deletedSecretResponse ->
      *         System.out.printf("Deleted Secret's Recovery Id %s %n", deletedSecretResponse.getRecoveryId()));
      * 
- * + * * * @param name The name of the deleted secret. * @return A {@link Mono} containing the {@link DeletedSecret deleted secret}. @@ -589,14 +589,14 @@ public Mono getDeletedSecret(String name) { *

Gets the deleted secret from the key vault enabled for soft-delete. Subscribes to the call * asynchronously and prints out the deleted secret details when a response is received.

* - * + * *
      * secretAsyncClient.getDeletedSecretWithResponse("secretName")
      *     .subscribe(deletedSecretResponse ->
      *         System.out.printf("Deleted Secret's Recovery Id %s %n",
      *             deletedSecretResponse.getValue().getRecoveryId()));
      * 
- * + * * * @param name The name of the deleted secret. * @return A {@link Mono} containing a {@link Response} whose {@link Response#getValue() value} contains the @@ -630,14 +630,14 @@ Mono> getDeletedSecretWithResponse(String name, Context *

Purges the deleted secret from the key vault enabled for soft-delete. Subscribes to the call * asynchronously and prints out the status code from the server response when a response is received.

* - * + * *
      * secretAsyncClient.purgeDeletedSecret("deletedSecretName")
      *     .doOnSuccess(purgeResponse ->
      *         System.out.println("Successfully Purged deleted Secret"))
      *     .subscribe();
      * 
- * + * * * @param name The name of the secret. * @return An empty {@link Mono}. @@ -661,13 +661,13 @@ public Mono purgeDeletedSecret(String name) { *

Purges the deleted secret from the key vault enabled for soft-delete. Subscribes to the call * asynchronously and prints out the status code from the server response when a response is received.

* - * + * *
      * secretAsyncClient.purgeDeletedSecretWithResponse("deletedSecretName")
      *     .subscribe(purgeResponse ->
      *         System.out.printf("Purge Status response %d %n", purgeResponse.getStatusCode()));
      * 
- * + * * * @param name The name of the secret. * @return A {@link Mono} containing a Response containing status code and HTTP headers. @@ -700,7 +700,7 @@ Mono> purgeDeletedSecretWithResponse(String name, Context context *

Recovers the deleted secret from the key vault enabled for soft-delete. Subscribes to the call * asynchronously and prints out the recovered secret details when a response is received.

* - * + * *
      * secretAsyncClient.beginRecoverDeletedSecret("deletedSecretName")
      *     .subscribe(pollResponse -> {
@@ -709,7 +709,7 @@ Mono> purgeDeletedSecretWithResponse(String name, Context context
      *         System.out.println("Recovered Secret Value: " + pollResponse.getValue().getValue());
      *     });
      * 
- * + * * * @param name The name of the deleted secret to be recovered. * @return A {@link PollerFlux} to poll on and retrieve the {@link KeyVaultSecret recovered secret}. @@ -765,13 +765,13 @@ Mono> recoverDeletedSecretWithResponse(String name, Con *

Backs up the secret from the key vault. Subscribes to the call asynchronously and prints out * the length of the secret's backup byte array returned in the response.

* - * + * *
      * secretAsyncClient.backupSecret("secretName")
      *     .subscribe(secretBackupResponse ->
      *         System.out.printf("Secret's Backup Byte array's length %s%n", secretBackupResponse.length));
      * 
- * + * * * @param name The name of the secret. * @return A {@link Mono} containing the backed up secret blob. @@ -795,13 +795,13 @@ public Mono backupSecret(String name) { *

Backs up the secret from the key vault. Subscribes to the call asynchronously and prints out * the length of the secret's backup byte array returned in the response.

* - * + * *
      * secretAsyncClient.backupSecretWithResponse("secretName")
      *     .subscribe(secretBackupResponse ->
      *         System.out.printf("Secret's Backup Byte array's length %s%n", secretBackupResponse.getValue().length));
      * 
- * + * * * @param name The name of the secret. * @return A {@link Mono} containing a {@link Response} whose {@link Response#getValue() value} @@ -838,7 +838,7 @@ Mono> backupSecretWithResponse(String name, Context context) { *

Restores the secret in the key vault from its backup. Subscribes to the call asynchronously * and prints out the restored secret details when a response is received.

* - * + * *
      * // Pass the secret backup byte array to the restore operation.
      * byte[] secretBackupByteArray = {};
@@ -846,7 +846,7 @@ Mono> backupSecretWithResponse(String name, Context context) {
      *     .subscribe(secretResponse -> System.out.printf("Restored Secret with name %s and value %s %n",
      *         secretResponse.getName(), secretResponse.getValue()));
      * 
- * + * * * @param backup The backup blob associated with the secret. * @return A {@link Mono} containing the {@link KeyVaultSecret restored secret}. @@ -869,7 +869,7 @@ public Mono restoreSecretBackup(byte[] backup) { *

Restores the secret in the key vault from its backup. Subscribes to the call asynchronously * and prints out the restored secret details when a response is received.

* - * + * *
      * // Pass the secret backup byte array to the restore operation.
      * byte[] secretBackupByteArray = {};
@@ -877,7 +877,7 @@ public Mono restoreSecretBackup(byte[] backup) {
      *     .subscribe(secretResponse -> System.out.printf("Restored Secret with name %s and value %s %n",
      *         secretResponse.getValue().getName(), secretResponse.getValue().getValue()));
      * 
- * + * * * @param backup The backup blob associated with the secret. * @return A {@link Mono} containing a {@link Response} whose {@link Response#getValue() value} @@ -912,7 +912,7 @@ Mono> restoreSecretBackupWithResponse(byte[] backup, Co *

The sample below fetches the all the secret properties in the vault. For each secret retrieved, makes a call * to {@link #getSecret(String, String) getSecret(String, String)} to get its value, and then prints it out.

* - * + * *
      * secretAsyncClient.listPropertiesOfSecrets()
      *     .flatMap(secretProperties -> {
@@ -925,7 +925,7 @@ Mono> restoreSecretBackupWithResponse(byte[] backup, Co
      *     .subscribe(secretResponse -> System.out.printf("Received secret with name %s and type %s",
      *         secretResponse.getName(), secretResponse.getValue()));
      * 
- * + * * * @return A {@link PagedFlux} containing {@link SecretProperties properties} of all the secrets in the vault. */ @@ -991,13 +991,13 @@ private Mono> listSecretsFirstPage(Context conte *

Lists the deleted secrets in the key vault. Subscribes to the call asynchronously and prints out the * recovery id of each deleted secret when a response is received.

* - * + * *
      * secretAsyncClient.listDeletedSecrets()
-     *     .subscribe(deletedSecretResponse ->  System.out.printf("Deleted Secret's Recovery Id %s %n",
+     *     .subscribe(deletedSecretResponse -> System.out.printf("Deleted Secret's Recovery Id %s %n",
      *         deletedSecretResponse.getRecoveryId()));
      * 
- * + * * * @return A {@link Flux} containing all of the {@link DeletedSecret deleted secrets} in the vault. */ @@ -1067,7 +1067,7 @@ private Mono> listDeletedSecretsFirstPage(Context c *

The sample below fetches the all the versions of the given secret. For each version retrieved, makes a call * to {@link #getSecret(String, String) getSecret(String, String)} to get the version's value, and then prints it out.

* - * + * *
      * secretAsyncClient.listPropertiesOfSecretVersions("secretName")
      *     .flatMap(secretProperties -> {
@@ -1077,7 +1077,7 @@ private Mono> listDeletedSecretsFirstPage(Context c
      *     .subscribe(secret -> System.out.printf("Received secret with name %s and type %s%n",
      *         secret.getName(), secret.getValue()));
      * 
- * + * * * @param name The name of the secret. * @return A {@link PagedFlux} containing {@link SecretProperties properties} of all the versions of the specified diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClient.java b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClient.java index 70497b181198..1a510bcad2eb 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClient.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClient.java @@ -25,15 +25,15 @@ * Vault. * *

Construct the sync client

- * + * *
  * SecretClient secretClient = new SecretClientBuilder()
  *     .credential(new DefaultAzureCredentialBuilder().build())
- *     .vaultUrl("https://myvault.vault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
  *     .buildClient();
  * 
- * + * * * @see SecretClientBuilder * @see PagedIterable @@ -70,7 +70,7 @@ public String getVaultUrl() { *

Code sample

*

Creates a new secret in the key vault. Prints out the details of the newly created secret returned in the * response.

- * + * *
      * KeyVaultSecret newSecret = new KeyVaultSecret("secretName", "secretValue")
      *     .setProperties(new SecretProperties().setExpiresOn(OffsetDateTime.now().plusDays(60)));
@@ -78,7 +78,7 @@ public String getVaultUrl() {
      * System.out.printf("Secret is created with name %s and value %s%n", returnedSecret.getName(),
      *     returnedSecret.getValue());
      * 
- * + * * * @param secret The Secret object containing information about the secret and its properties. The properties * {@link KeyVaultSecret#getName() secret.name} and {@link KeyVaultSecret#getValue() secret.value} cannot be @@ -101,12 +101,12 @@ public KeyVaultSecret setSecret(KeyVaultSecret secret) { *

Code sample

*

Creates a new secret in the key vault. Prints out the details of the newly created secret returned in the * response.

- * + * *
      * KeyVaultSecret secret = secretClient.setSecret("secretName", "secretValue");
      * System.out.printf("Secret is created with name %s and value %s%n", secret.getName(), secret.getValue());
      * 
- * + * * * @param name The name of the secret. It is required and cannot be null. * @param value The value of the secret. It is required and cannot be null. @@ -126,14 +126,14 @@ public KeyVaultSecret setSecret(String name, String value) { *

Code sample

*

Creates a new secret in the key vault. Prints out the details of the newly created secret returned in the * response.

- * + * *
      * KeyVaultSecret newSecret = new KeyVaultSecret("secretName", "secretValue")
-     *          .setProperties(new SecretProperties().setExpiresOn(OffsetDateTime.now().plusDays(60)));
+     *     .setProperties(new SecretProperties().setExpiresOn(OffsetDateTime.now().plusDays(60)));
      * KeyVaultSecret secret = secretClient.setSecretWithResponse(newSecret, new Context(key1, value1)).getValue();
      * System.out.printf("Secret is created with name %s and value %s%n", secret.getName(), secret.getValue());
      * 
- * + * * * @param secret The Secret object containing information about the secret and its properties. The properties * secret.name and secret.value must be non null. @@ -153,14 +153,14 @@ public Response setSecretWithResponse(KeyVaultSecret secret, Con * *

Code sample

*

Gets a specific version of the secret in the key vault. Prints out the details of the returned secret.

- * + * *
      * String secretVersion = "6A385B124DEF4096AF1361A85B16C204";
      * KeyVaultSecret secretWithVersion = secretClient.getSecret("secretName", secretVersion);
      * System.out.printf("Secret is returned with name %s and value %s%n",
      *     secretWithVersion.getName(), secretWithVersion.getValue());
      * 
- * + * * * @param name The name of the secret, cannot be null. * @param version The version of the secret to retrieve. If this is an empty string or null, this call is @@ -181,13 +181,13 @@ public KeyVaultSecret getSecret(String name, String version) { * *

Code sample

*

Gets the latest version of the secret in the key vault. Prints out the details of the returned secret.

- * + * *
      * KeyVaultSecret secretWithoutVersion = secretClient.getSecret("secretName", secretVersion);
      * System.out.printf("Secret is returned with name %s and value %s%n",
      *     secretWithoutVersion.getName(), secretWithoutVersion.getValue());
      * 
- * + * * * @param name The name of the secret. * @return The requested {@link KeyVaultSecret}. @@ -205,7 +205,7 @@ public KeyVaultSecret getSecret(String name) { * *

Code sample

*

Gets a specific version of the secret in the key vault. Prints out the details of the returned secret.

- * + * *
      * String secretVersion = "6A385B124DEF4096AF1361A85B16C204";
      * KeyVaultSecret secretWithVersion = secretClient.getSecretWithResponse("secretName", secretVersion,
@@ -213,7 +213,7 @@ public KeyVaultSecret getSecret(String name) {
      * System.out.printf("Secret is returned with name %s and value %s%n",
      *     secretWithVersion.getName(), secretWithVersion.getValue());
      * 
- * + * * * @param name The name of the secret, cannot be null * @param version The version of the secret to retrieve. If this is an empty string or null, this call is equivalent @@ -240,7 +240,7 @@ public Response getSecretWithResponse(String name, String versio *

Code sample

*

Gets the latest version of the secret, changes its expiry time, and the updates the secret in the key vault. *

- * + * *
      * SecretProperties secretProperties = secretClient.getSecret("secretName").getProperties();
      * secretProperties.setExpiresOn(OffsetDateTime.now().plusDays(60));
@@ -250,7 +250,7 @@ public Response getSecretWithResponse(String name, String versio
      * System.out.printf("Updated Secret is returned with name %s, value %s and expires %s%n",
      *     updatedSecret.getName(), updatedSecret.getValue(), updatedSecret.getProperties().getExpiresOn());
      * 
- * + * * * @param secretProperties The {@link SecretProperties secret properties} object with updated properties. * @param context Additional context that is passed through the HTTP pipeline during the service call. @@ -277,7 +277,7 @@ public Response updateSecretPropertiesWithResponse(SecretPrope *

Code sample

*

Gets the latest version of the secret, changes its expiry time, and the updates the secret in the key * vault.

- * + * *
      * SecretProperties secretProperties = secretClient.getSecret("secretName").getProperties();
      * secretProperties.setExpiresOn(OffsetDateTime.now().plusDays(60));
@@ -286,7 +286,7 @@ public Response updateSecretPropertiesWithResponse(SecretPrope
      * System.out.printf("Updated Secret is returned with name %s, value %s and expires %s%n",
      *     updatedSecret.getName(), updatedSecret.getValue(), updatedSecret.getProperties().getExpiresOn());
      * 
- * + * * * @param secretProperties The {@link SecretProperties secret properties} object with updated properties. * @return The {@link SecretProperties updated secret}. @@ -310,7 +310,7 @@ public SecretProperties updateSecretProperties(SecretProperties secretProperties *

Code sample

*

Deletes the secret from a soft-delete enabled key vault. Prints out the recovery id of the deleted secret * returned in the response.

- * + * *
      * SyncPoller<DeletedSecret, Void> deleteSecretPoller = secretClient.beginDeleteSecret("secretName");
      *
@@ -326,7 +326,7 @@ public SecretProperties updateSecretProperties(SecretProperties secretProperties
      * // Secret is being deleted on server.
      * deleteSecretPoller.waitForCompletion();
      * 
- * + * * * @param name The name of the secret to be deleted. * @return A {@link SyncPoller} to poll on and retrieve the {@link DeletedSecret deleted secret}. @@ -345,12 +345,12 @@ public SyncPoller beginDeleteSecret(String name) { *

Code sample

*

Gets the deleted secret from the key vault enabled for soft-delete. Prints out the details of the * deleted secret returned in the response.

- * + * *
      * DeletedSecret deletedSecret = secretClient.getDeletedSecret("secretName");
      * System.out.printf("Deleted Secret's Recovery Id %s", deletedSecret.getRecoveryId());
      * 
- * + * * * @param name The name of the deleted secret. * @return The {@link DeletedSecret deleted secret}. @@ -369,13 +369,13 @@ public DeletedSecret getDeletedSecret(String name) { *

Code sample

*

Gets the deleted secret from the key vault enabled for soft-delete. Prints out the details of the * deleted secret returned in the response.

- * + * *
      * DeletedSecret deletedSecret = secretClient.getDeletedSecretWithResponse("secretName",
      *     new Context(key2, value2)).getValue();
      * System.out.printf("Deleted Secret's Recovery Id %s", deletedSecret.getRecoveryId());
      * 
- * + * * * @param name The name of the deleted secret. * @param context Additional context that is passed through the HTTP pipeline during the service call. @@ -397,11 +397,11 @@ public Response getDeletedSecretWithResponse(String name, Context *

Purges the deleted secret from the key vault enabled for soft-delete. Prints out the status code from * the server response.

* - * + * *
      * secretClient.purgeDeletedSecret("secretName");
      * 
- * + * * * @param name The name of the secret. * @throws ResourceNotFoundException when a secret with {@code name} doesn't exist in the key vault. @@ -419,13 +419,13 @@ public void purgeDeletedSecret(String name) { *

Code sample

*

Purges the deleted secret from the key vault enabled for soft-delete. Prints out the status code from * the server response.

- * + * *
      * Response<Void> purgeResponse = secretClient.purgeDeletedSecretWithResponse("secretName",
      *     new Context(key1, value1));
      * System.out.printf("Purge Status Code: %d", purgeResponse.getStatusCode());
      * 
- * + * * * @param name The name of the secret. * @param context Additional context that is passed through the HTTP pipeline during the service call. @@ -445,7 +445,7 @@ public Response purgeDeletedSecretWithResponse(String name, Context contex *

Code sample

*

Recovers the deleted secret from the key vault enabled for soft-delete. Prints out the details of the * recovered secret returned in the response.

- * + * *
      * SyncPoller<KeyVaultSecret, Void> recoverSecretPoller =
      *     secretClient.beginRecoverDeletedSecret("deletedSecretName");
@@ -458,7 +458,7 @@ public Response purgeDeletedSecretWithResponse(String name, Context contex
      * // Key is being recovered on server.
      * recoverSecretPoller.waitForCompletion();
      * 
- * + * * * @param name The name of the deleted secret to be recovered. * @return A {@link SyncPoller} to poll on and retrieve the {@link KeyVaultSecret recovered secret}. @@ -477,12 +477,12 @@ public SyncPoller beginRecoverDeletedSecret(String name) { *

Code sample

*

Backs up the secret from the key vault and prints out the length of the secret's backup byte array returned in * the response

- * + * *
      * byte[] secretBackup = secretClient.backupSecret("secretName");
      * System.out.printf("Secret's Backup Byte array's length %s", secretBackup.length);
      * 
- * + * * * @param name The name of the secret. * @return A {@link Response} whose {@link Response#getValue() value} contains the backed up secret blob. @@ -502,13 +502,13 @@ public byte[] backupSecret(String name) { *

Backs up the secret from the key vault and prints out the length of the secret's backup byte array returned in * the response

* - * + * *
      * byte[] secretBackup = secretClient.backupSecretWithResponse("secretName",
      *     new Context(key1, value1)).getValue();
      * System.out.printf("Secret's Backup Byte array's length %s", secretBackup.length);
      * 
- * + * * * @param name The name of the secret. * @param context Additional context that is passed through the HTTP pipeline during the service call. @@ -529,7 +529,7 @@ public Response backupSecretWithResponse(String name, Context context) { *

Restores the secret in the key vault from its backup byte array. Prints out the details of the restored secret * returned in the response.

* - * + * *
      * // Pass the secret backup byte array of the secret to be restored.
      * byte[] secretBackupByteArray = {};
@@ -537,7 +537,7 @@ public Response backupSecretWithResponse(String name, Context context) {
      * System.out
      *     .printf("Restored Secret with name %s and value %s", restoredSecret.getName(), restoredSecret.getValue());
      * 
- * + * * * @param backup The backup blob associated with the secret. * @return A {@link Response} whose {@link Response#getValue() value} contains the {@link KeyVaultSecret restored secret}. @@ -556,7 +556,7 @@ public KeyVaultSecret restoreSecretBackup(byte[] backup) { *

Restores the secret in the key vault from its backup byte array. Prints out the details of the restored secret * returned in the response.

* - * + * *
      * // Pass the secret backup byte array of the secret to be restored.
      * byte[] secretBackupByteArray = {};
@@ -565,7 +565,7 @@ public KeyVaultSecret restoreSecretBackup(byte[] backup) {
      * System.out
      *     .printf("Restored Secret with name %s and value %s", restoredSecret.getName(), restoredSecret.getValue());
      * 
- * + * * * @param backup The backup blob associated with the secret. * @param context Additional context that is passed through the HTTP pipeline during the service call. @@ -587,7 +587,7 @@ public Response restoreSecretBackupWithResponse(byte[] backup, C * {@link #getSecret(String, String) getSecret(String, String)}. This gets the {@link KeyVaultSecret secret} and the * value of its latest version.

* - * + * *
      * for (SecretProperties secret : secretClient.listPropertiesOfSecrets()) {
      *     KeyVaultSecret secretWithValue = secretClient.getSecret(secret.getName(), secret.getVersion());
@@ -595,14 +595,14 @@ public Response restoreSecretBackupWithResponse(byte[] backup, C
      *         secretWithValue.getName(), secretWithValue.getValue());
      * }
      * 
- * + * * *

Iterate over secrets by page

*

The snippet below loops over each {@link SecretProperties secret} by page and calls * {@link #getSecret(String, String) getSecret(String, String)}. This gets the {@link KeyVaultSecret secret} and the * value of its latest version.

* - * + * *
      * secretClient.listPropertiesOfSecrets().iterableByPage().forEach(resp -> {
      *     System.out.printf("Response headers are %s. Url %s  and status code %d %n", resp.getHeaders(),
@@ -614,7 +614,7 @@ public Response restoreSecretBackupWithResponse(byte[] backup, C
      *     });
      * });
      * 
- * + * * * @return {@link PagedIterable} of {@link SecretProperties} of all the secrets in the vault. The * {@link SecretProperties} contains all the information about the secret, except its value. @@ -633,7 +633,7 @@ public PagedIterable listPropertiesOfSecrets() { *

The snippet below loops over each {@link SecretProperties secret} and calls * {@link #getSecret(String, String) getSecret(String, String)}. This gets the {@link KeyVaultSecret secret} and the * value of its latest version.

- * + * *
      * for (SecretProperties secret : secretClient.listPropertiesOfSecrets(new Context(key1, value2))) {
      *     KeyVaultSecret secretWithValue = secretClient.getSecret(secret.getName(), secret.getVersion());
@@ -641,7 +641,7 @@ public PagedIterable listPropertiesOfSecrets() {
      *         secretWithValue.getName(), secretWithValue.getValue());
      * }
      * 
- * + * * * @param context Additional context that is passed through the HTTP pipeline during the service call. * @return {@link PagedIterable} of {@link SecretProperties} of all the secrets in the vault. {@link SecretProperties} @@ -658,13 +658,13 @@ public PagedIterable listPropertiesOfSecrets(Context context) * *

Code sample

*

Lists the deleted secrets in the key vault and for each deleted secret prints out its recovery id.

- * + * *
      * for (DeletedSecret deletedSecret : secretClient.listDeletedSecrets(new Context(key1, value2))) {
      *     System.out.printf("Deleted secret's recovery Id %s", deletedSecret.getRecoveryId());
      * }
      * 
- * + * * * @param context Additional context that is passed through the HTTP pipeline during the service call. * @return {@link PagedIterable} of all of the {@link DeletedSecret deleted secrets} in the vault. @@ -680,18 +680,18 @@ public PagedIterable listDeletedSecrets(Context context) { * *

Iterate over secrets

*

Lists the deleted secrets in the key vault and for each deleted secret prints out its recovery id.

- * + * *
      * for (DeletedSecret deletedSecret : secretClient.listDeletedSecrets()) {
      *     System.out.printf("Deleted secret's recovery Id %s", deletedSecret.getRecoveryId());
      * }
      * 
- * + * * *

Iterate over secrets by page

*

Iterate over Lists the deleted secrets by page in the key vault and for each deleted secret prints out its * recovery id.

- * + * *
      * secretClient.listDeletedSecrets().iterableByPage().forEach(resp -> {
      *     System.out.printf("Got response headers . Url: %s, Status code: %d %n",
@@ -701,7 +701,7 @@ public PagedIterable listDeletedSecrets(Context context) {
      *     });
      * });
      * 
- * + * * * @return {@link PagedIterable} of all of the {@link DeletedSecret deleted secrets} in the vault. */ @@ -718,7 +718,7 @@ public PagedIterable listDeletedSecrets() { *

Code sample

*

The sample below fetches all versions of the given secret. For each secret version retrieved, makes a call * to {@link #getSecret(String, String) getSecret(String, String)} to get the version's value, and then prints it out.

- * + * *
      * for (SecretProperties secret : secretClient.listPropertiesOfSecretVersions("secretName")) {
      *     KeyVaultSecret secretWithValue = secretClient.getSecret(secret.getName(), secret.getVersion());
@@ -726,7 +726,7 @@ public PagedIterable listDeletedSecrets() {
      *         secretWithValue.getName(), secretWithValue.getValue());
      * }
      * 
- * + * * * @param name The name of the secret. * @return {@link PagedIterable} of {@link SecretProperties} of all the versions of the specified secret in the vault. @@ -747,7 +747,7 @@ public PagedIterable listPropertiesOfSecretVersions(String nam *

Code sample

*

The sample below fetches all versions of the given secret. For each secret version retrieved, makes a call * to {@link #getSecret(String, String) getSecret(String, String)} to get the version's value, and then prints it out.

- * + * *
      * for (SecretProperties secret : secretClient
      *     .listPropertiesOfSecretVersions("secretName", new Context(key1, value2))) {
@@ -756,27 +756,27 @@ public PagedIterable listPropertiesOfSecretVersions(String nam
      *         secretWithValue.getName(), secretWithValue.getValue());
      * }
      * 
- * + * * *

Iterate over secret versions by page

*

The sample below iterates over each {@link SecretProperties secret} by each page and calls * {@link SecretClient#getSecret(String, String)}. This will return the {@link KeyVaultSecret secret} with the * corresponding version's value.

* - * + * *
      * secretClient.listPropertiesOfSecretVersions("secretName", new Context(key1, value2))
-     *             .iterableByPage().forEach(resp -> {
-     *                 System.out.printf("Got response headers . Url: %s, Status code: %d %n",
-     *                     resp.getRequest().getUrl(), resp.getStatusCode());
-     *                 resp.getItems().forEach(value -> {
-     *                     KeyVaultSecret secretWithValue = secretClient.getSecret(value.getName(), value.getVersion());
-     *                     System.out.printf("Received secret's version with name %s and value %s",
-     *                         secretWithValue.getName(), secretWithValue.getValue());
-     *                 });
-     *             });
+     *     .iterableByPage().forEach(resp -> {
+     *         System.out.printf("Got response headers . Url: %s, Status code: %d %n",
+     *             resp.getRequest().getUrl(), resp.getStatusCode());
+     *         resp.getItems().forEach(value -> {
+     *             KeyVaultSecret secretWithValue = secretClient.getSecret(value.getName(), value.getVersion());
+     *             System.out.printf("Received secret's version with name %s and value %s",
+     *                 secretWithValue.getName(), secretWithValue.getValue());
+     *         });
+     *     });
      * 
- * + * * * @param name The name of the secret. * @param context Additional context that is passed through the HTTP pipeline during the service call. diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java index d763c641ebab..5af05636ea4b 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/main/java/com/azure/security/keyvault/secrets/SecretClientBuilder.java @@ -48,56 +48,56 @@ *

The minimal configuration options required by {@link SecretClientBuilder secretClientBuilder} to build * {@link SecretAsyncClient} are {@link String vaultUrl} and {@link TokenCredential credential}.

* - * + * *
  * SecretAsyncClient secretAsyncClient = new SecretClientBuilder()
  *     .credential(new DefaultAzureCredentialBuilder().build())
- *     .vaultUrl("https://myvault.vault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
  *     .buildAsyncClient();
  * 
- * + * * *

Samples to construct the sync client

- * + * *
  * SecretClient secretClient = new SecretClientBuilder()
  *     .credential(new DefaultAzureCredentialBuilder().build())
- *     .vaultUrl("https://myvault.vault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
  *     .buildClient();
  * 
- * + * * *

The {@link HttpLogDetailLevel log detail level}, multiple custom {@link HttpLoggingPolicy policies} and custom * {@link HttpClient http client} can be optionally configured in the {@link SecretClientBuilder}.

* - * + * *
  * SecretAsyncClient secretAsyncClient = new SecretClientBuilder()
  *     .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS))
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .credential(new DefaultAzureCredentialBuilder().build())
  *     .httpClient(HttpClient.createDefault())
  *     .buildAsyncClient();
  * 
- * + * * *

Alternatively, custom {@link HttpPipeline http pipeline} with custom {@link HttpPipelinePolicy} policies and * {@link String vaultUrl} * can be specified. It provides finer control over the construction of {@link SecretAsyncClient client}

* - * + * *
  * HttpPipeline pipeline = new HttpPipelineBuilder()
  *     .policies(new KeyVaultCredentialPolicy(credential), new RetryPolicy())
  *     .build();
  * SecretAsyncClient secretAsyncClient = new SecretClientBuilder()
  *     .pipeline(pipeline)
- *     .vaultUrl("https://myvault.azure.net/")
+ *     .vaultUrl("<your-key-vault-url>")
  *     .buildAsyncClient();
  * 
- * + * * * @see SecretClient * @see SecretAsyncClient diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/BackupAndRestoreOperations.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/BackupAndRestoreOperations.java index fbaa997d16b1..27938c5ccef5 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/BackupAndRestoreOperations.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/BackupAndRestoreOperations.java @@ -30,17 +30,20 @@ public class BackupAndRestoreOperations { * @throws IOException when writing backup to file is unsuccessful. */ public static void main(String[] args) throws IOException, InterruptedException, IllegalArgumentException { + /* Instantiate a SecretClient that will be used to call the service. Notice that the client is using default + Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/README.md) + for links and instructions. */ SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); - // Let's create secrets holding storage account credentials valid for 1 year. if the secret - // already exists in the key vault, then a new version of the secret is created. + // Let's create secrets holding storage account credentials valid for 1 year. If the secret already exists in + // the key vault, then a new version of the secret is created. client.setSecret(new KeyVaultSecret("StorageAccountPassword", "f4G34fMh8v-fdsgjsk2323=-asdsdfsdf") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.now().plusYears(1)))); @@ -49,30 +52,28 @@ public static void main(String[] args) throws IOException, InterruptedException, // For long term storage, it is ideal to write the backup to a file. String backupFilePath = "YOUR_BACKUP_FILE_PATH"; byte[] secretBackup = client.backupSecret("StorageAccountPassword"); + writeBackupToFile(secretBackup, backupFilePath); // The storage account secret is no longer in use, so you delete it. - SyncPoller deletedStorageSecretPoller - = client.beginDeleteSecret("StorageAccountPassword"); - + SyncPoller deletedStorageSecretPoller = + client.beginDeleteSecret("StorageAccountPassword"); PollResponse pollResponse = deletedStorageSecretPoller.poll(); - - DeletedSecret deletedStorageSecret = pollResponse.getValue(); + System.out.println("Deleted Date %s" + deletedStorageSecret.getDeletedOn().toString()); System.out.printf("Deleted Secret's Recovery Id %s", deletedStorageSecret.getRecoveryId()); - // Key is being deleted on server. + // Secret is being deleted on server. deletedStorageSecretPoller.waitForCompletion(); - - //To ensure secret is deleted on server side. + //To ensure the secret is deleted server-side. Thread.sleep(30000); // If the vault is soft-delete enabled, then you need to purge the secret as well for permanent deletion. client.purgeDeletedSecret("StorageAccountPassword"); - //To ensure secret is purged on server side. + // To ensure the secret is purged server-side. Thread.sleep(15000); // After sometime, the secret is required again. We can use the backup value to restore it in the key vault. @@ -83,13 +84,18 @@ public static void main(String[] args) throws IOException, InterruptedException, private static void writeBackupToFile(byte[] bytes, String filePath) { try { File file = new File(filePath); + if (file.exists()) { file.delete(); } + file.createNewFile(); + OutputStream os = new FileOutputStream(file); os.write(bytes); + System.out.println("Successfully wrote backup to file."); + // Close the file os.close(); } catch (IOException e) { diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/BackupAndRestoreOperationsAsync.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/BackupAndRestoreOperationsAsync.java index db7922ec27e8..8d2f52cc53d6 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/BackupAndRestoreOperationsAsync.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/BackupAndRestoreOperationsAsync.java @@ -27,30 +27,36 @@ public class BackupAndRestoreOperationsAsync { * @throws IOException when writing backup to file is unsuccessful. */ public static void main(String[] args) throws IOException, InterruptedException, IllegalArgumentException { + /* Instantiate a SecretAsyncClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate async secret client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/README.md) + for links and instructions. */ SecretAsyncClient secretAsyncClient = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - // Let's create secrets holding storage account credentials valid for 1 year. if the secret - // already exists in the key vault, then a new version of the secret is created. + // Let's create secrets holding storage account credentials valid for 1 year. If the secret already exists in + // the key vault, then a new version of the secret is created. secretAsyncClient.setSecret(new KeyVaultSecret("StorageAccountPassword", "f4G34fMh8v-fdsgjsk2323=-asdsdfsdf") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.now().plusYears(1)))) .subscribe(secretResponse -> - System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getName(), secretResponse.getValue())); + System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getName(), + secretResponse.getValue())); Thread.sleep(2000); // Backups are good to have, if in case secrets get accidentally deleted by you. // For long term storage, it is ideal to write the backup to a file. String backupFilePath = "YOUR_BACKUP_FILE_PATH"; + secretAsyncClient.backupSecret("StorageAccountPassword").subscribe(backupResponse -> { byte[] backupBytes = backupResponse; + writeBackupToFile(backupBytes, backupFilePath); }); @@ -64,14 +70,15 @@ public static void main(String[] args) throws IOException, InterruptedException, System.out.println("Deleted Secret Value: " + pollResponse.getValue().getValue()); }); - //To ensure file is deleted on server side. + //To ensure the file is deleted server-side. Thread.sleep(30000); // If the vault is soft-delete enabled, then you need to purge the secret as well for permanent deletion. - secretAsyncClient.purgeDeletedSecretWithResponse("StorageAccountPassword").subscribe(purgeResponse -> - System.out.printf("Purge Status response %d %n", purgeResponse.getStatusCode())); + secretAsyncClient.purgeDeletedSecretWithResponse("StorageAccountPassword") + .subscribe(purgeResponse -> + System.out.printf("Purge Status response %d %n", purgeResponse.getStatusCode())); - //To ensure file is purged on server side. + // To ensure the secret is purged server-side. Thread.sleep(15000); // After sometime, the secret is required again. We can use the backup value to restore it in the key vault. @@ -79,20 +86,25 @@ public static void main(String[] args) throws IOException, InterruptedException, secretAsyncClient.restoreSecretBackup(backupFromFile).subscribe(secretResponse -> System.out.printf("Restored Secret with name %s %n", secretResponse.getName())); - //To ensure secret is restored on server side. + // To ensure the secret is restored server-side. Thread.sleep(15000); } private static void writeBackupToFile(byte[] bytes, String filePath) { try { File file = new File(filePath); + if (file.exists()) { file.delete(); } + file.createNewFile(); + OutputStream os = new FileOutputStream(file); os.write(bytes); + System.out.println("Successfully wrote backup to file."); + // Close the file os.close(); } catch (IOException e) { diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/HelloWorld.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/HelloWorld.java index 2eed335978ab..78c772ab5859 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/HelloWorld.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/HelloWorld.java @@ -16,7 +16,6 @@ * Sample demonstrates how to set, get, update and delete a secret. */ public class HelloWorld { - /** * Authenticates with the key vault and shows how to set, get, update and delete a secret in the key vault. * @@ -25,31 +24,36 @@ public class HelloWorld { * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException, IllegalArgumentException { + /* Instantiate a SecretClient that will be used to call the service. Notice that the client is using default + Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a secret client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/README.md) + for links and instructions. */ SecretClient secretClient = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); - // Let's create a secret holding bank account credentials valid for 1 year. if the secret - // already exists in the key vault, then a new version of the secret is created. + // Let's create a secret holding bank account credentials valid for 1 year. If the secret already exists in the + // key vault, then a new version of the secret is created. secretClient.setSecret(new KeyVaultSecret("BankAccountPassword", "f4G34fMh8v") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.now().plusYears(1)))); - // Let's Get the bank secret from the key vault. + // Let's get the bank secret from the key vault. KeyVaultSecret bankSecret = secretClient.getSecret("BankAccountPassword"); + System.out.printf("Secret is returned with name %s and value %s \n", bankSecret.getName(), bankSecret.getValue()); // After one year, the bank account is still active, we need to update the expiry time of the secret. - // The update method can be used to update the expiry attribute of the secret. It cannot be used to update - // the value of the secret. + // The update method can be used to update the expiry attribute of the secret. It cannot be used to update the + // value of the secret. bankSecret.getProperties() .setExpiresOn(OffsetDateTime.now().plusYears(1)); SecretProperties updatedSecret = secretClient.updateSecretProperties(bankSecret.getProperties()); + System.out.printf("Secret's updated expiry time %s \n", updatedSecret.getExpiresOn()); // Bank forced a password update for security purposes. Let's change the value of the secret in the key vault. @@ -60,18 +64,17 @@ public static void main(String[] args) throws InterruptedException, IllegalArgum .setExpiresOn(OffsetDateTime.now().plusYears(1)))); // The bank account was closed, need to delete its credentials from the key vault. - SyncPoller deletedBankSecretPoller - = secretClient.beginDeleteSecret("BankAccountPassword"); - + SyncPoller deletedBankSecretPoller = + secretClient.beginDeleteSecret("BankAccountPassword"); PollResponse deletedBankSecretPollResponse = deletedBankSecretPoller.poll(); System.out.println("Deleted Date %s" + deletedBankSecretPollResponse.getValue().getDeletedOn().toString()); System.out.printf("Deleted Secret's Recovery Id %s", deletedBankSecretPollResponse.getValue().getRecoveryId()); - // Key is being deleted on server. + // Secret is being deleted on the server. deletedBankSecretPoller.waitForCompletion(); - // If the key vault is soft-delete enabled, then for permanent deletion deleted secrets need to be purged. + // If the key vault is soft-delete enabled, then deleted secrets need to be purged for permanent deletion. secretClient.purgeDeletedSecret("BankAccountPassword"); } } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/HelloWorldAsync.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/HelloWorldAsync.java index f551600806f5..dddf21106b3b 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/HelloWorldAsync.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/HelloWorldAsync.java @@ -21,49 +21,59 @@ public class HelloWorldAsync { * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException { + /* Instantiate a SecretAsyncClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate an async secret client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/README.md) + for links and instructions. */ SecretAsyncClient secretAsyncClient = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildAsyncClient(); - // Let's create a secret holding bank account credentials valid for 1 year. if the secret - // already exists in the key vault, then a new version of the secret is created. + // Let's create a secret holding bank account credentials valid for 1 year. If the secret already exists in the + // key vault, then a new version of the secret is created. secretAsyncClient.setSecret(new KeyVaultSecret("BankAccountPassword", "f4G34fMh8v") .setProperties(new SecretProperties() - .setExpiresOn(OffsetDateTime.now().plusYears(1)))).subscribe(secretResponse -> + .setExpiresOn(OffsetDateTime.now().plusYears(1)))) + .subscribe(secretResponse -> System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getName(), secretResponse.getValue())); Thread.sleep(2000); - // Let's Get the bank secret from the key vault. + // Let's get the bank secret from the key vault. secretAsyncClient.getSecret("BankAccountPassword").subscribe(secretResponse -> System.out.printf("Secret returned with name %s , value %s %n", secretResponse.getName(), secretResponse.getValue())); Thread.sleep(2000); // After one year, the bank account is still active, we need to update the expiry time of the secret. - // The update method can be used to update the expiry attribute of the secret. It cannot be used to update - // the value of the secret. - secretAsyncClient.getSecret("BankAccountPassword").subscribe(secretResponse -> { - KeyVaultSecret secret = secretResponse; - //Update the expiry time of the secret. - secret.getProperties() - .setExpiresOn(OffsetDateTime.now().plusYears(1)); - secretAsyncClient.updateSecretProperties(secret.getProperties()).subscribe(updatedSecretResponse -> - System.out.printf("Secret's updated expiry time %s %n", updatedSecretResponse.getExpiresOn().toString())); - }); + // The update method can be used to update the expiry attribute of the secret. It cannot be used to update the + // value of the secret. + secretAsyncClient.getSecret("BankAccountPassword") + .subscribe(secretResponse -> { + KeyVaultSecret secret = secretResponse; + + //Update the expiry time of the secret. + secret.getProperties() + .setExpiresOn(OffsetDateTime.now().plusYears(1)); + secretAsyncClient.updateSecretProperties(secret.getProperties()) + .subscribe(updatedSecretResponse -> + System.out.printf("Secret's updated expiry time %s %n", + updatedSecretResponse.getExpiresOn().toString())); + }); Thread.sleep(2000); // Bank forced a password update for security purposes. Let's change the value of the secret in the key vault. // To achieve this, we need to create a new version of the secret in the key vault. The update operation cannot // change the value of the secret. - secretAsyncClient.setSecret("BankAccountPassword", "bhjd4DDgsa").subscribe(secretResponse -> - System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getName(), secretResponse.getValue())); + secretAsyncClient.setSecret("BankAccountPassword", "bhjd4DDgsa") + .subscribe(secretResponse -> + System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getName(), + secretResponse.getValue())); Thread.sleep(2000); @@ -75,14 +85,15 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Deleted Secret Value: " + pollResponse.getValue().getValue()); }); - //To ensure secret is deleted on server side. + // To ensure the secret is deleted server-side. Thread.sleep(30000); // If the key vault is soft-delete enabled, then for permanent deletion deleted secrets need to be purged. - secretAsyncClient.purgeDeletedSecretWithResponse("BankAccountPassword").subscribe(purgeResponse -> - System.out.printf("Bank account secret purge status response %d %n", purgeResponse.getStatusCode())); + secretAsyncClient.purgeDeletedSecretWithResponse("BankAccountPassword") + .subscribe(purgeResponse -> + System.out.printf("Bank account secret purge status response %d %n", purgeResponse.getStatusCode())); - //To ensure secret is purged on server side. + // To ensure the secret is purged server-side. Thread.sleep(15000); } } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/IdentityReadmeSamples.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/IdentityReadmeSamples.java deleted file mode 100644 index f04932086c4a..000000000000 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/IdentityReadmeSamples.java +++ /dev/null @@ -1,272 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.security.keyvault.secrets; - -import com.azure.identity.AuthorizationCodeCredential; -import com.azure.identity.AuthorizationCodeCredentialBuilder; -import com.azure.identity.AzureCliCredential; -import com.azure.identity.AzureCliCredentialBuilder; -import com.azure.identity.ChainedTokenCredential; -import com.azure.identity.ChainedTokenCredentialBuilder; -import com.azure.identity.ClientCertificateCredential; -import com.azure.identity.ClientCertificateCredentialBuilder; -import com.azure.identity.ClientSecretCredential; -import com.azure.identity.ClientSecretCredentialBuilder; -import com.azure.identity.DefaultAzureCredential; -import com.azure.identity.DefaultAzureCredentialBuilder; -import com.azure.identity.DeviceCodeCredential; -import com.azure.identity.DeviceCodeCredentialBuilder; -import com.azure.identity.IntelliJCredential; -import com.azure.identity.IntelliJCredentialBuilder; -import com.azure.identity.InteractiveBrowserCredential; -import com.azure.identity.InteractiveBrowserCredentialBuilder; -import com.azure.identity.ManagedIdentityCredential; -import com.azure.identity.ManagedIdentityCredentialBuilder; -import com.azure.identity.UsernamePasswordCredential; -import com.azure.identity.UsernamePasswordCredentialBuilder; -import com.azure.identity.VisualStudioCodeCredential; -import com.azure.identity.VisualStudioCodeCredentialBuilder; - -/** - * WARNING: MODIFYING THIS FILE WILL REQUIRE CORRESPONDING UPDATES TO README.md FILE. LINE NUMBERS - * ARE USED TO EXTRACT APPROPRIATE CODE SEGMENTS FROM THIS FILE. ADD NEW CODE AT THE BOTTOM TO AVOID CHANGING - * LINE NUMBERS OF EXISTING CODE SAMPLES. - * - * Code snippet for creating various credentials that will be used in README.md. - */ -public class IdentityReadmeSamples { - - /** - * The default credential first checks environment variables for configuration. - * If environment configuration is incomplete, it will try managed identity. - */ - public void createDefaultAzureCredential() { - DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder().build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(defaultCredential) - .buildClient(); - } - - /** - * Authenticate with a client secret. - */ - public void createClientSecretCredential() { - ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder() - .clientId("") - .clientSecret("") - .tenantId("") - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(clientSecretCredential) - .buildClient(); - } - - /** - * Authenticate with a client certificate. - */ - public void createClientCertificateCredential() { - ClientCertificateCredential clientCertificateCredential = new ClientCertificateCredentialBuilder() - .clientId("") - .pemCertificate("") - // choose between either a PEM certificate or a PFX certificate - //.pfxCertificate("", "PFX CERTIFICATE PASSWORD") - .tenantId("") - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(clientCertificateCredential) - .buildClient(); - } - - /** - * Authenticate with device code credential. - */ - public void createDeviceCodeCredential() { - DeviceCodeCredential deviceCodeCredential = new DeviceCodeCredentialBuilder() - .challengeConsumer(challenge -> { - // lets user know of the challenge - System.out.println(challenge.getMessage()); - }) - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(deviceCodeCredential) - .buildClient(); - } - - /** - * Authenticate with username, password. - */ - public void createUserNamePasswordCredential() { - UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder() - .clientId("") - .username("") - .password("") - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(usernamePasswordCredential) - .buildClient(); - } - - /** - * Authenticate interactively in the browser. - */ - public void createInteractiveBrowserCredential() { - InteractiveBrowserCredential interactiveBrowserCredential = new InteractiveBrowserCredentialBuilder() - .clientId("") - .port(8765) - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(interactiveBrowserCredential) - .buildClient(); - } - - /** - * Authenticate with authorization code. - */ - public void createAuthCodeCredential() { - AuthorizationCodeCredential authCodeCredential = new AuthorizationCodeCredentialBuilder() - .clientId("") - .authorizationCode("") - .build(); - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(authCodeCredential) - .buildClient(); - } - - /** - * Authenticate with Azure CLI. - */ - public void createAzureCliCredential() { - AzureCliCredential cliCredential = new AzureCliCredentialBuilder().build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(cliCredential) - .buildClient(); - } - - /** - * Authenticate with IntelliJ IDEA. - */ - public void createIntelliJCredential() { - IntelliJCredential intelliJCredential = new IntelliJCredentialBuilder() - // KeePass configuration required only for Windows. No configuration needed for Linux / Mac - .keePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx") - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(intelliJCredential) - .buildClient(); - } - - /** - * Authenticate with Visual Studio Code. - */ - public void createVisualStudioCodeCredential() { - VisualStudioCodeCredential visualStudioCodeCredential = new VisualStudioCodeCredentialBuilder().build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(visualStudioCodeCredential) - .buildClient(); - } - - /** - * Authenticate with a managed identity. - */ - public void createManagedIdentityCredential() { - ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder() - .clientId("") // only required for user assigned - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(managedIdentityCredential) - .buildClient(); - } - - /** - * Authenticate with chained credentials. - */ - public void createChainedCredential() { - ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder() - .clientId("") - .build(); - - ClientSecretCredential secondServicePrincipal = new ClientSecretCredentialBuilder() - .clientId("") - .clientSecret("") - .tenantId("") - .build(); - - // when an access token is requested, the chain will try each - // credential in order, stopping when one provides a token - ChainedTokenCredential credentialChain = new ChainedTokenCredentialBuilder() - .addLast(managedIdentityCredential) - .addLast(secondServicePrincipal) - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(credentialChain) - .buildClient(); - } - - /** - * The default credential will use the user assigned managed identity with the specified client ID. - */ - public void createDefaultAzureCredentialForUserAssignedManagedIdentity() { - DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder() - .managedIdentityClientId("") - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(defaultCredential) - .buildClient(); - } - - /** - * The default credential will use the KeePass database path to find the user account in IntelliJ on Windows. - */ - public void createDefaultAzureCredentialForIntelliJ() { - DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder() - // KeePass configuration required only for Windows. No configuration needed for Linux / Mac - .intelliJKeePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx") - .build(); - - // Azure SDK client builders accept the credential as a parameter - SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(defaultCredential) - .buildClient(); - } -} diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ListOperations.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ListOperations.java index 8665b64c0a91..18a0badf1d0c 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ListOperations.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ListOperations.java @@ -14,22 +14,27 @@ */ public class ListOperations { /** - * Authenticates with the key vault and shows how to list secrets and list versions of a specific secret in the key vault. + * Authenticates with the key vault and shows how to list secrets and list versions of a specific secret in the key + * vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. */ public static void main(String[] args) throws IllegalArgumentException { + /* Instantiate a SecretClient that will be used to call the service. Notice that the client is using default + Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/README.md) + for links and instructions. */ SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildClient(); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildClient(); - // Let's create secrets holding storage and bank accounts credentials valid for 1 year. if the secret + // Let's create secrets holding storage and bank accounts credentials valid for 1 year. If the secret // already exists in the key vault, then a new version of the secret is created. client.setSecret(new KeyVaultSecret("StorageAccountPassword", "f4G34fMh8v-fdsgjsk2323=-asdsdfsdf") .setProperties(new SecretProperties() @@ -45,7 +50,7 @@ public static void main(String[] args) throws IllegalArgumentException { if (!secret.isEnabled()) { continue; } - KeyVaultSecret secretWithValue = client.getSecret(secret.getName(), secret.getVersion()); + KeyVaultSecret secretWithValue = client.getSecret(secret.getName(), secret.getVersion()); System.out.printf("Received secret with name %s and value %s \n", secretWithValue.getName(), secretWithValue.getValue()); } @@ -55,8 +60,10 @@ public static void main(String[] args) throws IllegalArgumentException { // You need to check all the different values your bank account password secret had previously. Lets print all the versions of this secret. for (SecretProperties secret : client.listPropertiesOfSecretVersions("BankAccountPassword")) { - KeyVaultSecret secretWithValue = client.getSecret(secret.getName(), secret.getVersion()); - System.out.printf("Received secret's version with name %s and value %s", secretWithValue.getName(), secretWithValue.getValue()); + KeyVaultSecret secretWithValue = client.getSecret(secret.getName(), secret.getVersion()); + + System.out.printf("Received secret's version with name %s and value %s", secretWithValue.getName(), + secretWithValue.getValue()); } } } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ListOperationsAsync.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ListOperationsAsync.java index 99baa0a89f65..258dbe78f0a6 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ListOperationsAsync.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ListOperationsAsync.java @@ -14,62 +14,78 @@ */ public class ListOperationsAsync { /** - * Authenticates with the key vault and shows how to asynchronously list secrets and list versions of a specific secret in the key vault. + * Authenticates with the key vault and shows how to asynchronously list secrets and list versions of a specific + * secret in the key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException { + /* Instantiate a SecretAsyncClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate an async secret client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/README.md) + for links and instructions. */ SecretAsyncClient secretAsyncClient = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildAsyncClient(); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildAsyncClient(); - // Let's create secrets holding storage and bank accounts credentials valid for 1 year. if the secret - // already exists in the key vault, then a new version of the secret is created. + // Let's create secrets holding storage and bank accounts credentials valid for 1 year. If the secret already + // exists in the key vault, then a new version of the secret is created. secretAsyncClient.setSecret(new KeyVaultSecret("BankAccountPassword", "f4G34fMh8v") - .setProperties(new SecretProperties() - .setExpiresOn(OffsetDateTime.now().plusYears(1)))) + .setProperties(new SecretProperties() + .setExpiresOn(OffsetDateTime.now().plusYears(1)))) .subscribe(secretResponse -> - System.out.printf("Secret is created with name %s and value %s \n", secretResponse.getName(), secretResponse.getValue())); + System.out.printf("Secret is created with name %s and value %s \n", secretResponse.getName(), + secretResponse.getValue())); Thread.sleep(2000); secretAsyncClient.setSecret(new KeyVaultSecret("StorageAccountPassword", "f4G34fMh8v-fdsgjsk2323=-asdsdfsdf") - .setProperties(new SecretProperties() - .setExpiresOn(OffsetDateTime.now().plusYears(1)))) + .setProperties(new SecretProperties() + .setExpiresOn(OffsetDateTime.now().plusYears(1)))) .subscribe(secretResponse -> - System.out.printf("Secret is created with name %s and value %s \n", secretResponse.getName(), secretResponse.getValue())); + System.out.printf("Secret is created with name %s and value %s \n", secretResponse.getName(), secretResponse.getValue())); Thread.sleep(2000); - // You need to check if any of the secrets are sharing same values. Let's list the secrets and print their values. - // List operations don't return the secrets with value information. So, for each returned secret we call getSecret to get the secret with its value information. + // You need to check if any of the secrets are sharing same values. Let's list the secrets and print their + // values. List operations don't return the secrets with value information. So, for each returned secret we + // call getSecret() to get the secret with its value information. secretAsyncClient.listPropertiesOfSecrets() .subscribe(secret -> - secretAsyncClient.getSecret(secret.getName(), secret.getVersion()).subscribe(secretResponse -> - System.out.printf("Received secret with name %s and value %s \n", secretResponse.getName(), secretResponse.getValue()))); + secretAsyncClient.getSecret(secret.getName(), secret.getVersion()) + .subscribe(secretResponse -> + System.out.printf("Received secret with name %s and value %s \n", secretResponse.getName(), + secretResponse.getValue()))); Thread.sleep(15000); - // The bank account password got updated, so you want to update the secret in key vault to ensure it reflects the new password. - // Calling setSecret on an existing secret creates a new version of the secret in the key vault with the new value. + // The bank account password got updated, so you want to update the secret in key vault to ensure it reflects + // the new password. Calling setSecret on an existing secret creates a new version of the secret in the key + // vault with the new value. secretAsyncClient.setSecret(new KeyVaultSecret("BankAccountPassword", "sskdjfsdasdjsd") .setProperties(new SecretProperties() - .setExpiresOn(OffsetDateTime.now().plusYears(1)))).subscribe(secretResponse -> - System.out.printf("Secret is created with name %s and value %s \n", secretResponse.getName(), secretResponse.getValue())); + .setExpiresOn(OffsetDateTime.now().plusYears(1)))) + .subscribe(secretResponse -> + System.out.printf("Secret is created with name %s and value %s \n", secretResponse.getName(), + secretResponse.getValue())); Thread.sleep(2000); - // You need to check all the different values your bank account password secret had previously. Lets print all the versions of this secret. - secretAsyncClient.listPropertiesOfSecretVersions("BankAccountPassword").subscribe(secret -> - secretAsyncClient.getSecret(secret.getName(), secret.getVersion()).subscribe(secretResponse -> - System.out.printf("Received secret's version with name %s and value %s \n", secretResponse.getName(), secretResponse.getValue()))); + // You need to check all the different values your bank account password secret had previously. Lets print all + // the versions of this secret. + secretAsyncClient.listPropertiesOfSecretVersions("BankAccountPassword") + .subscribe(secret -> + secretAsyncClient.getSecret(secret.getName(), secret.getVersion()) + .subscribe(secretResponse -> + System.out.printf("Received secret's version with name %s and value %s \n", + secretResponse.getName(), secretResponse.getValue()))); Thread.sleep(15000); } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ManagingDeletedSecrets.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ManagingDeletedSecrets.java index 29a5ef40313c..260af3222ad8 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ManagingDeletedSecrets.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ManagingDeletedSecrets.java @@ -17,28 +17,32 @@ */ public class ManagingDeletedSecrets { /** - * Authenticates with the key vault and shows how to list, recover and purge deleted secrets in a soft-delete enabled key vault. + * Authenticates with the key vault and shows how to list, recover and purge deleted secrets in a soft-delete + * enabled key vault. * * @param args Unused. Arguments to the program. * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws IllegalArgumentException, InterruptedException { + /* NOTE: To manage deleted secrets, your key vault needs to have soft-delete enabled. Soft-delete allows deleted + secrets to be retained for a given retention period (90 days). During this period deleted secrets can be + recovered and if a secret needs to be permanently deleted then it needs to be purged. */ - // NOTE: To manage deleted secrets, your key vault needs to have soft-delete enabled. Soft-delete allows deleted secrets - // to be retained for a given retention period (90 days). During this period deleted secrets can be recovered and if - // a secret needs to be permanently deleted then it needs to be purged. + /* Instantiate a SecretClient that will be used to call the service. Notice that the client is using default + Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/README.md) + for links and instructions. */ SecretClient client = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .buildClient(); - // Let's create secrets holding storage and bank accounts credentials valid for 1 year. if the secret - // already exists in the key vault, then a new version of the secret is created. + // Let's create secrets holding storage and bank accounts credentials valid for 1 year. If the secret already + // exists in the key vault, then a new version of the secret is created. client.setSecret(new KeyVaultSecret("StorageAccountPassword", "f4G34fMh8v-fdsgjsk2323=-asdsdfsdf") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.now().plusYears(1)))); @@ -55,7 +59,7 @@ public static void main(String[] args) throws IllegalArgumentException, Interrup System.out.println("Deleted Date %s" + deletedBankSecretPollResponse.getValue().getDeletedOn().toString()); System.out.printf("Deleted Secret's Recovery Id %s", deletedBankSecretPollResponse.getValue().getRecoveryId()); - // Key is being deleted on server. + // The secret is being deleted on the server. deletedBankSecretPoller.waitForCompletion(); // We accidentally deleted bank account secret. Let's recover it. @@ -68,34 +72,32 @@ public static void main(String[] args) throws IllegalArgumentException, Interrup System.out.println("Recovered Key Name %s" + recoverSecretResponse.getValue().getName()); System.out.printf("Recovered Key's Id %s", recoverSecretResponse.getValue().getId()); - // Key is being recovered on server. + // The secret is being recovered on the server. recoverSecretPoller.waitForCompletion(); - // The bank acoount and storage accounts got closed. - // Let's delete bank and storage accounts secrets. - SyncPoller deletedBankPwdSecretPoller - = client.beginDeleteSecret("BankAccountPassword"); - + // The bank account and storage accounts got closed. + // Let's delete bank and storage accounts secrets. + SyncPoller deletedBankPwdSecretPoller = + client.beginDeleteSecret("BankAccountPassword"); PollResponse deletedBankPwdSecretPollResponse = deletedBankPwdSecretPoller.poll(); System.out.println("Deleted Date %s" + deletedBankPwdSecretPollResponse.getValue().getDeletedOn().toString()); - System.out.printf("Deleted Secret's Recovery Id %s", deletedBankPwdSecretPollResponse.getValue().getRecoveryId()); + System.out.printf("Deleted Secret's Recovery Id %s", + deletedBankPwdSecretPollResponse.getValue().getRecoveryId()); - // Key is being deleted on server. + // The secret is being deleted on the server. deletedBankPwdSecretPoller.waitForCompletion(); - SyncPoller deletedStorageSecretPoller - = client.beginDeleteSecret("StorageAccountPassword"); - + SyncPoller deletedStorageSecretPoller = + client.beginDeleteSecret("StorageAccountPassword"); PollResponse deletedStorageSecretPollResponse = deletedStorageSecretPoller.poll(); System.out.println("Deleted Date %s" + deletedStorageSecretPollResponse.getValue().getDeletedOn().toString()); System.out.printf("Deleted Secret's Recovery Id %s", deletedStorageSecretPollResponse.getValue().getRecoveryId()); - // Key is being deleted on server. + // The secret is being deleted on the server. deletedStorageSecretPoller.waitForCompletion(); - // You can list all the deleted and non-purged secrets, assuming key vault is soft-delete enabled. for (DeletedSecret delSecret : client.listDeletedSecrets()) { System.out.printf("Deleted secret's recovery Id %s", delSecret.getRecoveryId()); @@ -105,7 +107,7 @@ public static void main(String[] args) throws IllegalArgumentException, Interrup client.purgeDeletedSecret("StorageAccountPassword"); client.purgeDeletedSecret("BankAccountPassword"); - //To ensure secret is purged on server side. + // To ensure the secret is purged server-side. Thread.sleep(15000); } } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ManagingDeletedSecretsAsync.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ManagingDeletedSecretsAsync.java index a46a114e35d3..be097d9bacb6 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ManagingDeletedSecretsAsync.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/ManagingDeletedSecretsAsync.java @@ -14,39 +14,48 @@ */ public class ManagingDeletedSecretsAsync { /** - * Authenticates with the key vault and shows how to asynchronously list, recover and purge deleted secrets in a soft-delete enabled key vault. + * Authenticates with the key vault and shows how to asynchronously list, recover and purge deleted secrets in a + * soft-delete enabled key vault. * * @param args Unused. Arguments to the program. + * * @throws IllegalArgumentException when invalid key vault endpoint is passed. * @throws InterruptedException when the thread is interrupted in sleep mode. */ public static void main(String[] args) throws InterruptedException { + /* NOTE: To manage deleted secrets, your key vault needs to have soft-delete enabled. Soft-delete allows deleted + secrets to be retained for a given retention period (90 days). During this period deleted secrets can be + recovered and if a secret needs to be permanently deleted then it needs to be purged. */ - // NOTE: To manage deleted secrets, your key vault needs to have soft-delete enabled. Soft-delete allows deleted secrets - // to be retained for a given retention period (90 days). During this period deleted secrets can be recovered and if - // a secret needs to be permanently deleted then it needs to be purged. + /* Instantiate a SecretAsyncClient that will be used to call the service. Notice that the client is using + default Azure credentials. For more information on this and other types of credentials, see this document: + https://docs.microsoft.com/java/api/overview/azure/identity-readme?view=azure-java-stable. - // Instantiate a client that will be used to call the service. Notice that the client is using default Azure - // credentials. To make default credentials work, ensure that environment variables 'AZURE_CLIENT_ID', - // 'AZURE_CLIENT_KEY' and 'AZURE_TENANT_ID' are set with the service principal credentials. + To get started, you'll need a URL to an Azure Key Vault. See the README + (https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/keyvault/azure-security-keyvault-secrets/README.md) + for links and instructions. */ SecretAsyncClient secretAsyncClient = new SecretClientBuilder() - .vaultUrl("https://{YOUR_VAULT_NAME}.vault.azure.net") - .credential(new DefaultAzureCredentialBuilder().build()) - .buildAsyncClient(); + .vaultUrl("") + .credential(new DefaultAzureCredentialBuilder().build()) + .buildAsyncClient(); - // Let's create secrets holding storage and bank accounts credentials valid for 1 year. if the secret + // Let's create secrets holding storage and bank accounts credentials valid for 1 year. If the secret // already exists in the key vault, then a new version of the secret is created. secretAsyncClient.setSecret(new KeyVaultSecret("BankAccountPassword", "f4G34fMh8v") - .setProperties(new SecretProperties() - .setExpiresOn(OffsetDateTime.now().plusYears(1)))).subscribe(secretResponse -> - System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getName(), secretResponse.getValue())); + .setProperties(new SecretProperties() + .setExpiresOn(OffsetDateTime.now().plusYears(1)))) + .subscribe(secretResponse -> + System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getName(), + secretResponse.getValue())); Thread.sleep(2000); secretAsyncClient.setSecret(new KeyVaultSecret("StorageAccountPassword", "f4G34fMh8v-fdsgjsk2323=-asdsdfsdf") .setProperties(new SecretProperties() - .setExpiresOn(OffsetDateTime.now().plusYears(1)))).subscribe(secretResponse -> - System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getName(), secretResponse.getValue())); + .setExpiresOn(OffsetDateTime.now().plusYears(1)))) + .subscribe(secretResponse -> + System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getName(), + secretResponse.getValue())); Thread.sleep(2000); @@ -58,7 +67,7 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Deleted Secret Value: " + pollResponse.getValue().getValue()); }); - //To ensure secret is deleted on server side. + // To ensure the secret is deleted server-side. Thread.sleep(30000); // We accidentally deleted bank account secret. Let's recover it. @@ -70,11 +79,11 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Recovered Secret Value: " + pollResponse.getValue().getValue()); }); - //To ensure secret is recovered on server side. + // To ensure the secret is recovered server-side. Thread.sleep(10000); - // The bank acoount and storage accounts got closed. - // Let's delete bank and storage accounts secrets. + // The bank account and storage accounts got closed. + // Let's delete bank and storage accounts secrets. secretAsyncClient.beginDeleteSecret("BankAccountPassword") .subscribe(pollResponse -> { System.out.println("Delete Status: " + pollResponse.getStatus().toString()); @@ -89,23 +98,26 @@ public static void main(String[] args) throws InterruptedException { System.out.println("Deleted Secret Value: " + pollResponse.getValue().getValue()); }); - // To ensure secret is deleted on server side. + // To ensure the secret is deleted server-side. Thread.sleep(30000); // You can list all the deleted and non-purged secrets, assuming key vault is soft-delete enabled. - secretAsyncClient.listDeletedSecrets().subscribe(deletedSecret -> + secretAsyncClient.listDeletedSecrets() + .subscribe(deletedSecret -> System.out.printf("Deleted secret's recovery Id %s %n", deletedSecret.getRecoveryId())); Thread.sleep(15000); // If the key vault is soft-delete enabled, then for permanent deletion deleted secrets need to be purged. - secretAsyncClient.purgeDeletedSecretWithResponse("StorageAccountPassword").subscribe(purgeResponse -> - System.out.printf("Storage account secret purge status response %d %n", purgeResponse.getStatusCode())); + secretAsyncClient.purgeDeletedSecretWithResponse("StorageAccountPassword") + .subscribe(purgeResponse -> + System.out.printf("Storage account secret purge status response %d %n", purgeResponse.getStatusCode())); - secretAsyncClient.purgeDeletedSecretWithResponse("BankAccountPassword").subscribe(purgeResponse -> - System.out.printf("Bank account secret purge status response %d %n", purgeResponse.getStatusCode())); + secretAsyncClient.purgeDeletedSecretWithResponse("BankAccountPassword") + .subscribe(purgeResponse -> + System.out.printf("Bank account secret purge status response %d %n", purgeResponse.getStatusCode())); - // To ensure secret is purged on server side. + // To ensure the secret is purged server-side. Thread.sleep(15000); } } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/PersistentTokenCacheDemo.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/PersistentTokenCacheDemo.java index 9369c9530016..d74bbc6464e8 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/PersistentTokenCacheDemo.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/PersistentTokenCacheDemo.java @@ -29,7 +29,9 @@ public static void main(String[] args) { // Try to get a secret! Only works if you are logged in. System.out.println("\nWhat is the super secret secret?\n\n"); + KeyVaultSecret secret = client.getSecret("the-secret"); + System.out.println("Secret was found: " + secret.getValue()); } } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/SecretAsyncClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/SecretAsyncClientJavaDocCodeSnippets.java index 1b458ede6ace..140f38b3c465 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/SecretAsyncClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/SecretAsyncClientJavaDocCodeSnippets.java @@ -19,71 +19,72 @@ import java.time.OffsetDateTime; /** - * This class contains code samples for generating javadocs through doclets for {@link SecretClient} + * This class contains code samples for generating javadocs through doclets for {@link SecretAsyncClient}. */ public final class SecretAsyncClientJavaDocCodeSnippets { - - private String key1 = "key1"; - private String key2 = "key2"; - private String value1 = "val1"; - private String value2 = "val2"; + private final String key1 = "key1"; + private final String key2 = "key2"; + private final String value1 = "val1"; + private final String value2 = "val2"; /** - * Generates code sample for creating a {@link SecretAsyncClient} - * @return An instance of {@link SecretAsyncClient} + * Generates code sample for creating a {@link SecretAsyncClient}. + * + * @return An instance of {@link SecretAsyncClient}. */ public SecretAsyncClient createAsyncClientWithHttpclient() { - // BEGIN: com.azure.security.keyvault.secrets.async.secretclient.withhttpclient.instantiation + // BEGIN: com.azure.security.keyvault.secrets.SecretAsyncClient.instantiation.withHttpClient SecretAsyncClient secretAsyncClient = new SecretClientBuilder() .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)) - .vaultUrl("https://myvault.azure.net/") + .vaultUrl("") .credential(new DefaultAzureCredentialBuilder().build()) .httpClient(HttpClient.createDefault()) .buildAsyncClient(); - // END: com.azure.security.keyvault.secrets.async.secretclient.withhttpclient.instantiation + // END: com.azure.security.keyvault.secrets.SecretAsyncClient.instantiation.withHttpClient return secretAsyncClient; } /** - * Implementation for async SecretAsyncClient - * @return sync SecretAsyncClient + * Generates code sample for creating a {@link SecretAsyncClient}. + * + * @return An instance of {@link SecretAsyncClient}. */ private SecretAsyncClient getAsyncSecretClient() { - - // BEGIN: com.azure.security.keyvault.secrets.async.secretclient.construct + // BEGIN: com.azure.security.keyvault.secrets.SecretAsyncClient.instantiation SecretAsyncClient secretAsyncClient = new SecretClientBuilder() .credential(new DefaultAzureCredentialBuilder().build()) - .vaultUrl("https://myvault.vault.azure.net/") + .vaultUrl("") .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)) .buildAsyncClient(); - // END: com.azure.security.keyvault.secrets.async.secretclient.construct + // END: com.azure.security.keyvault.secrets.SecretAsyncClient.instantiation return secretAsyncClient; } /** - * Generates code sample for creating a {@link SecretAsyncClient} - * @return An instance of {@link SecretAsyncClient} + * Generates code sample for creating a {@link SecretAsyncClient}. + * + * @return An instance of {@link SecretAsyncClient}. */ public SecretAsyncClient createAsyncClientWithPipeline() { - TokenCredential credential = null; // link to some identity samples - // BEGIN: com.azure.security.keyvault.secrets.async.secretclient.pipeline.instantiation + TokenCredential credential = null; + // BEGIN: com.azure.security.keyvault.secrets.SecretAsyncClient.instantiation.withPipeline HttpPipeline pipeline = new HttpPipelineBuilder() .policies(new KeyVaultCredentialPolicy(credential), new RetryPolicy()) .build(); SecretAsyncClient secretAsyncClient = new SecretClientBuilder() .pipeline(pipeline) - .vaultUrl("https://myvault.azure.net/") + .vaultUrl("") .buildAsyncClient(); - // END: com.azure.security.keyvault.secrets.async.secretclient.pipeline.instantiation + // END: com.azure.security.keyvault.secrets.SecretAsyncClient.instantiation.withPipeline return secretAsyncClient; } /** - * Method to insert code snippets for {@link SecretAsyncClient#getSecret(String, String)} + * Method to insert code snippets for {@link SecretAsyncClient#getSecret(String, String)}. */ public void getSecretCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.getSecret#string-string + // BEGIN: com.azure.keyvault.secrets.SecretClient.getSecret#string-string String secretVersion = "6A385B124DEF4096AF1361A85B16C204"; secretAsyncClient.getSecret("secretName", secretVersion) // Passing a Context is optional and useful if you want a set of data to flow through the request. @@ -92,23 +93,23 @@ public void getSecretCodeSnippets() { .subscribe(secretWithVersion -> System.out.printf("Secret is returned with name %s and value %s %n", secretWithVersion.getName(), secretWithVersion.getValue())); - // END: com.azure.keyvault.secrets.secretclient.getSecret#string-string + // END: com.azure.keyvault.secrets.SecretClient.getSecret#string-string - // BEGIN: com.azure.keyvault.secrets.secretclient.getSecret#string + // BEGIN: com.azure.keyvault.secrets.SecretClient.getSecret#string secretAsyncClient.getSecret("secretName") .subscribe(secretWithVersion -> System.out.printf("Secret is returned with name %s and value %s %n", secretWithVersion.getName(), secretWithVersion.getValue())); - // END: com.azure.keyvault.secrets.secretclient.getSecret#string + // END: com.azure.keyvault.secrets.SecretClient.getSecret#string } /** - * Method to insert code snippets for {@link SecretAsyncClient#getSecretWithResponse(String, String)} + * Method to insert code snippets for {@link SecretAsyncClient#getSecretWithResponse(String, String)}. */ public void getSecretWithResponseCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.getSecretWithResponse#string-string + // BEGIN: com.azure.keyvault.secrets.SecretClient.getSecretWithResponse#string-string String secretVersion = "6A385B124DEF4096AF1361A85B16C204"; secretAsyncClient.getSecretWithResponse("secretName", secretVersion) // Passing a Context is optional and useful if you want a set of data to flow through the request. @@ -117,15 +118,15 @@ public void getSecretWithResponseCodeSnippets() { .subscribe(secretWithVersion -> System.out.printf("Secret is returned with name %s and value %s %n", secretWithVersion.getValue().getName(), secretWithVersion.getValue().getValue())); - // END: com.azure.keyvault.secrets.secretclient.getSecretWithResponse#string-string + // END: com.azure.keyvault.secrets.SecretClient.getSecretWithResponse#string-string } /** - * Method to insert code snippets for {@link SecretAsyncClient#setSecret(KeyVaultSecret)} + * Method to insert code snippets for {@link SecretAsyncClient#setSecret(KeyVaultSecret)}. */ public void setSecretCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.setSecret#secret + // BEGIN: com.azure.keyvault.secrets.SecretClient.setSecret#secret SecretProperties properties = new SecretProperties() .setExpiresOn(OffsetDateTime.now().plusDays(60)); KeyVaultSecret newSecret = new KeyVaultSecret("secretName", "secretValue") @@ -133,39 +134,39 @@ public void setSecretCodeSnippets() { secretAsyncClient.setSecret(newSecret) .subscribe(secretResponse -> - System.out.printf("Secret is created with name %s and value %s %n", - secretResponse.getName(), secretResponse.getValue())); - // END: com.azure.keyvault.secrets.secretclient.setSecret#secret + System.out.printf("Secret is created with name %s and value %s %n", + secretResponse.getName(), secretResponse.getValue())); + // END: com.azure.keyvault.secrets.SecretClient.setSecret#secret - // BEGIN: com.azure.keyvault.secrets.secretclient.setSecret#string-string + // BEGIN: com.azure.keyvault.secrets.SecretClient.setSecret#string-string secretAsyncClient.setSecret("secretName", "secretValue") .subscribe(secretResponse -> System.out.printf("Secret is created with name %s and value %s%n", secretResponse.getName(), secretResponse.getValue())); - // END: com.azure.keyvault.secrets.secretclient.setSecret#string-string + // END: com.azure.keyvault.secrets.SecretClient.setSecret#string-string } /** - * Method to insert code snippets for {@link SecretAsyncClient#setSecretWithResponse(KeyVaultSecret)} + * Method to insert code snippets for {@link SecretAsyncClient#setSecretWithResponse(KeyVaultSecret)}. */ public void setSecretWithResponseCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.setSecretWithResponse#secret + // BEGIN: com.azure.keyvault.secrets.SecretClient.setSecretWithResponse#secret KeyVaultSecret newSecret = new KeyVaultSecret("secretName", "secretValue"). setProperties(new SecretProperties().setExpiresOn(OffsetDateTime.now().plusDays(60))); secretAsyncClient.setSecretWithResponse(newSecret) .subscribe(secretResponse -> System.out.printf("Secret is created with name %s and value %s %n", secretResponse.getValue().getName(), secretResponse.getValue().getValue())); - // END: com.azure.keyvault.secrets.secretclient.setSecretWithResponse#secret + // END: com.azure.keyvault.secrets.SecretClient.setSecretWithResponse#secret } /** - * Method to insert code snippets for {@link SecretAsyncClient#updateSecretProperties(SecretProperties)} + * Method to insert code snippets for {@link SecretAsyncClient#updateSecretProperties(SecretProperties)}. */ public void updateSecretCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.updateSecretProperties#secretProperties + // BEGIN: com.azure.keyvault.secrets.SecretClient.updateSecretProperties#secretProperties secretAsyncClient.getSecret("secretName") .subscribe(secretResponseValue -> { SecretProperties secretProperties = secretResponseValue.getProperties(); @@ -176,15 +177,16 @@ public void updateSecretCodeSnippets() { System.out.printf("Secret's updated not before time %s %n", secretResponse.getNotBefore().toString())); }); - // END: com.azure.keyvault.secrets.secretclient.updateSecretProperties#secretProperties + // END: com.azure.keyvault.secrets.SecretClient.updateSecretProperties#secretProperties } /** - * Method to insert code snippets for {@link SecretAsyncClient#updateSecretPropertiesWithResponse(SecretProperties)} + * Method to insert code snippets for + * {@link SecretAsyncClient#updateSecretPropertiesWithResponse(SecretProperties)}. */ public void updateSecretWithResponseCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.updateSecretPropertiesWithResponse#secretProperties + // BEGIN: com.azure.keyvault.secrets.SecretClient.updateSecretPropertiesWithResponse#secretProperties secretAsyncClient.getSecret("secretName") .subscribe(secretResponseValue -> { SecretProperties secretProperties = secretResponseValue.getProperties(); @@ -195,72 +197,72 @@ public void updateSecretWithResponseCodeSnippets() { System.out.printf("Secret's updated not before time %s %n", secretResponse.getValue().getNotBefore().toString())); }); - // END: com.azure.keyvault.secrets.secretclient.updateSecretPropertiesWithResponse#secretProperties + // END: com.azure.keyvault.secrets.SecretClient.updateSecretPropertiesWithResponse#secretProperties } /** - * Method to insert code snippets for {@link SecretAsyncClient#beginDeleteSecret(String)} + * Method to insert code snippets for {@link SecretAsyncClient#beginDeleteSecret(String)}. */ public void deleteSecretCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.deleteSecret#String + // BEGIN: com.azure.keyvault.secrets.SecretClient.deleteSecret#String secretAsyncClient.beginDeleteSecret("secretName") .subscribe(pollResponse -> { System.out.println("Delete Status: " + pollResponse.getStatus().toString()); System.out.println("Deleted Secret Name: " + pollResponse.getValue().getName()); System.out.println("Deleted Secret Value: " + pollResponse.getValue().getValue()); }); - // END: com.azure.keyvault.secrets.secretclient.deleteSecret#String + // END: com.azure.keyvault.secrets.SecretClient.deleteSecret#String } /** - * Method to insert code snippets for {@link SecretAsyncClient#getDeletedSecret(String)} + * Method to insert code snippets for {@link SecretAsyncClient#getDeletedSecret(String)}. */ public void getDeletedSecretCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.getDeletedSecret#string + // BEGIN: com.azure.keyvault.secrets.SecretClient.getDeletedSecret#string secretAsyncClient.getDeletedSecret("secretName") .subscribe(deletedSecretResponse -> System.out.printf("Deleted Secret's Recovery Id %s %n", deletedSecretResponse.getRecoveryId())); - // END: com.azure.keyvault.secrets.secretclient.getDeletedSecret#string + // END: com.azure.keyvault.secrets.SecretClient.getDeletedSecret#string } /** - * Method to insert code snippets for {@link SecretAsyncClient#getDeletedSecretWithResponse(String)} + * Method to insert code snippets for {@link SecretAsyncClient#getDeletedSecretWithResponse(String)}. */ public void getDeletedSecretWithResponseCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.getDeletedSecretWithResponse#string + // BEGIN: com.azure.keyvault.secrets.SecretClient.getDeletedSecretWithResponse#string secretAsyncClient.getDeletedSecretWithResponse("secretName") .subscribe(deletedSecretResponse -> System.out.printf("Deleted Secret's Recovery Id %s %n", deletedSecretResponse.getValue().getRecoveryId())); - // END: com.azure.keyvault.secrets.secretclient.getDeletedSecretWithResponse#string + // END: com.azure.keyvault.secrets.SecretClient.getDeletedSecretWithResponse#string } /** - * Method to insert code snippets for {@link SecretAsyncClient#purgeDeletedSecret(String)} + * Method to insert code snippets for {@link SecretAsyncClient#purgeDeletedSecret(String)}. */ public void purgeDeletedSecretCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.purgeDeletedSecret#string + // BEGIN: com.azure.keyvault.secrets.SecretClient.purgeDeletedSecret#string secretAsyncClient.purgeDeletedSecret("deletedSecretName") .doOnSuccess(purgeResponse -> System.out.println("Successfully Purged deleted Secret")) .subscribe(); - // END: com.azure.keyvault.secrets.secretclient.purgeDeletedSecret#string + // END: com.azure.keyvault.secrets.SecretClient.purgeDeletedSecret#string } /** - * Method to insert code snippets for {@link SecretAsyncClient#purgeDeletedSecretWithResponse(String)} + * Method to insert code snippets for {@link SecretAsyncClient#purgeDeletedSecretWithResponse(String)}. */ public void purgeDeletedSecretWithResponseCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.purgeDeletedSecretWithResponse#string + // BEGIN: com.azure.keyvault.secrets.SecretClient.purgeDeletedSecretWithResponse#string secretAsyncClient.purgeDeletedSecretWithResponse("deletedSecretName") .subscribe(purgeResponse -> System.out.printf("Purge Status response %d %n", purgeResponse.getStatusCode())); - // END: com.azure.keyvault.secrets.secretclient.purgeDeletedSecretWithResponse#string + // END: com.azure.keyvault.secrets.SecretClient.purgeDeletedSecretWithResponse#string } /** @@ -268,74 +270,74 @@ public void purgeDeletedSecretWithResponseCodeSnippets() { */ public void recoverDeletedSecretCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.recoverDeletedSecret#String + // BEGIN: com.azure.keyvault.secrets.SecretClient.recoverDeletedSecret#String secretAsyncClient.beginRecoverDeletedSecret("deletedSecretName") .subscribe(pollResponse -> { System.out.println("Recovery Status: " + pollResponse.getStatus().toString()); System.out.println("Recovered Secret Name: " + pollResponse.getValue().getName()); System.out.println("Recovered Secret Value: " + pollResponse.getValue().getValue()); }); - // END: com.azure.keyvault.secrets.secretclient.recoverDeletedSecret#String + // END: com.azure.keyvault.secrets.SecretClient.recoverDeletedSecret#String } /** - * Method to insert code snippets for {@link SecretAsyncClient#backupSecret(String)} + * Method to insert code snippets for {@link SecretAsyncClient#backupSecret(String)}. */ public void backupSecretCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.backupSecret#string + // BEGIN: com.azure.keyvault.secrets.SecretClient.backupSecret#string secretAsyncClient.backupSecret("secretName") .subscribe(secretBackupResponse -> System.out.printf("Secret's Backup Byte array's length %s%n", secretBackupResponse.length)); - // END: com.azure.keyvault.secrets.secretclient.backupSecret#string + // END: com.azure.keyvault.secrets.SecretClient.backupSecret#string } /** - * Method to insert code snippets for {@link SecretAsyncClient#backupSecretWithResponse(String)} + * Method to insert code snippets for {@link SecretAsyncClient#backupSecretWithResponse(String)}. */ public void backupSecretWithResponseCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.backupSecretWithResponse#string + // BEGIN: com.azure.keyvault.secrets.SecretClient.backupSecretWithResponse#string secretAsyncClient.backupSecretWithResponse("secretName") .subscribe(secretBackupResponse -> System.out.printf("Secret's Backup Byte array's length %s%n", secretBackupResponse.getValue().length)); - // END: com.azure.keyvault.secrets.secretclient.backupSecretWithResponse#string + // END: com.azure.keyvault.secrets.SecretClient.backupSecretWithResponse#string } /** - * Method to insert code snippets for {@link SecretAsyncClient#restoreSecretBackup(byte[])} + * Method to insert code snippets for {@link SecretAsyncClient#restoreSecretBackup(byte[])}. */ public void restoreSecretCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.restoreSecret#byte + // BEGIN: com.azure.keyvault.secrets.SecretClient.restoreSecret#byte // Pass the secret backup byte array to the restore operation. byte[] secretBackupByteArray = {}; secretAsyncClient.restoreSecretBackup(secretBackupByteArray) .subscribe(secretResponse -> System.out.printf("Restored Secret with name %s and value %s %n", secretResponse.getName(), secretResponse.getValue())); - // END: com.azure.keyvault.secrets.secretclient.restoreSecret#byte + // END: com.azure.keyvault.secrets.SecretClient.restoreSecret#byte } /** - * Method to insert code snippets for {@link SecretAsyncClient#restoreSecretBackupWithResponse(byte[])} + * Method to insert code snippets for {@link SecretAsyncClient#restoreSecretBackupWithResponse(byte[])}. */ public void restoreSecretWithResponseCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.restoreSecretWithResponse#byte + // BEGIN: com.azure.keyvault.secrets.SecretClient.restoreSecretWithResponse#byte // Pass the secret backup byte array to the restore operation. byte[] secretBackupByteArray = {}; secretAsyncClient.restoreSecretBackupWithResponse(secretBackupByteArray) .subscribe(secretResponse -> System.out.printf("Restored Secret with name %s and value %s %n", secretResponse.getValue().getName(), secretResponse.getValue().getValue())); - // END: com.azure.keyvault.secrets.secretclient.restoreSecretWithResponse#byte + // END: com.azure.keyvault.secrets.SecretClient.restoreSecretWithResponse#byte } /** - * Method to insert code snippets for {@link SecretAsyncClient#listPropertiesOfSecrets()} + * Method to insert code snippets for {@link SecretAsyncClient#listPropertiesOfSecrets()}. */ public void listSecretsCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.listSecrets + // BEGIN: com.azure.keyvault.secrets.SecretClient.listSecrets secretAsyncClient.listPropertiesOfSecrets() .flatMap(secretProperties -> { String name = secretProperties.getName(); @@ -346,27 +348,27 @@ public void listSecretsCodeSnippets() { }) .subscribe(secretResponse -> System.out.printf("Received secret with name %s and type %s", secretResponse.getName(), secretResponse.getValue())); - // END: com.azure.keyvault.secrets.secretclient.listSecrets + // END: com.azure.keyvault.secrets.SecretClient.listSecrets } /** - * Method to insert code snippets for {@link SecretAsyncClient#listDeletedSecrets()} + * Method to insert code snippets for {@link SecretAsyncClient#listDeletedSecrets()}. */ public void listDeletedSecretsCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.listDeletedSecrets + // BEGIN: com.azure.keyvault.secrets.SecretClient.listDeletedSecrets secretAsyncClient.listDeletedSecrets() - .subscribe(deletedSecretResponse -> System.out.printf("Deleted Secret's Recovery Id %s %n", + .subscribe(deletedSecretResponse -> System.out.printf("Deleted Secret's Recovery Id %s %n", deletedSecretResponse.getRecoveryId())); - // END: com.azure.keyvault.secrets.secretclient.listDeletedSecrets + // END: com.azure.keyvault.secrets.SecretClient.listDeletedSecrets } /** - * Method to insert code snippets for {@link SecretAsyncClient#listPropertiesOfSecretVersions(String)} + * Method to insert code snippets for {@link SecretAsyncClient#listPropertiesOfSecretVersions(String)}. */ public void listSecretVersionsCodeSnippets() { SecretAsyncClient secretAsyncClient = getAsyncSecretClient(); - // BEGIN: com.azure.keyvault.secrets.secretclient.listSecretVersions#string + // BEGIN: com.azure.keyvault.secrets.SecretClient.listSecretVersions#string secretAsyncClient.listPropertiesOfSecretVersions("secretName") .flatMap(secretProperties -> { System.out.println("Get secret value for version: " + secretProperties.getVersion()); @@ -374,6 +376,6 @@ public void listSecretVersionsCodeSnippets() { }) .subscribe(secret -> System.out.printf("Received secret with name %s and type %s%n", secret.getName(), secret.getValue())); - // END: com.azure.keyvault.secrets.secretclient.listSecretVersions#string + // END: com.azure.keyvault.secrets.SecretClient.listSecretVersions#string } } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/SecretClientJavaDocCodeSnippets.java b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/SecretClientJavaDocCodeSnippets.java index f31bdadc0d40..25ca625b2eb5 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/SecretClientJavaDocCodeSnippets.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/samples/java/com/azure/security/keyvault/secrets/SecretClientJavaDocCodeSnippets.java @@ -17,125 +17,126 @@ import java.time.OffsetDateTime; /** - * This class contains code samples for generating javadocs through doclets for {@link SecretClient} + * This class contains code samples for generating javadocs through doclets for {@link SecretClient}. */ public final class SecretClientJavaDocCodeSnippets { - - private String key1 = "key1"; - private String key2 = "key2"; - private String value1 = "val1"; - private String value2 = "val2"; + private final String key1 = "key1"; + private final String key2 = "key2"; + private final String value1 = "val1"; + private final String value2 = "val2"; /** - * Implementation for sync SecretClient - * @return sync SecretClient + * Generates code sample for creating a {@link SecretClient}. + * + * @return An instance of {@link SecretClient}. */ private SecretClient getSecretClient() { - // BEGIN: com.azure.security.keyvault.secretclient.sync.construct + // BEGIN: com.azure.security.keyvault.SecretClient.instantiation SecretClient secretClient = new SecretClientBuilder() .credential(new DefaultAzureCredentialBuilder().build()) - .vaultUrl("https://myvault.vault.azure.net/") + .vaultUrl("") .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BODY_AND_HEADERS)) .buildClient(); - // END: com.azure.security.keyvault.secretclient.sync.construct + // END: com.azure.security.keyvault.SecretClient.instantiation return secretClient; } /** - * Method to insert code snippets for {@link SecretClient#getSecret(String, String)} + * Method to insert code snippets for {@link SecretClient#getSecret(String, String)}. */ public void getSecretCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.getSecret#secretProperties + // BEGIN: com.azure.security.keyvault.SecretClient.getSecret#secretProperties for (SecretProperties secret : secretClient.listPropertiesOfSecrets()) { KeyVaultSecret secretWithValue = secretClient.getSecret(secret.getName(), secret.getVersion()); System.out.printf("Secret is returned with name %s and value %s%n", secretWithValue.getName(), secretWithValue.getValue()); } - // END: com.azure.security.keyvault.secretclient.getSecret#secretProperties + // END: com.azure.security.keyvault.SecretClient.getSecret#secretProperties - // BEGIN: com.azure.security.keyvault.secretclient.getSecret#string-string + // BEGIN: com.azure.security.keyvault.SecretClient.getSecret#string-string String secretVersion = "6A385B124DEF4096AF1361A85B16C204"; KeyVaultSecret secretWithVersion = secretClient.getSecret("secretName", secretVersion); System.out.printf("Secret is returned with name %s and value %s%n", secretWithVersion.getName(), secretWithVersion.getValue()); - // END: com.azure.security.keyvault.secretclient.getSecret#string-string + // END: com.azure.security.keyvault.SecretClient.getSecret#string-string - // BEGIN: com.azure.security.keyvault.secretclient.getSecret#string + // BEGIN: com.azure.security.keyvault.SecretClient.getSecret#string KeyVaultSecret secretWithoutVersion = secretClient.getSecret("secretName", secretVersion); System.out.printf("Secret is returned with name %s and value %s%n", secretWithoutVersion.getName(), secretWithoutVersion.getValue()); - // END: com.azure.security.keyvault.secretclient.getSecret#string + // END: com.azure.security.keyvault.SecretClient.getSecret#string } /** - * Method to insert code snippets for {@link SecretClient#getSecretWithResponse(String, String, Context)} + * Method to insert code snippets for {@link SecretClient#getSecretWithResponse(String, String, Context)}. */ public void getSecretWithResponseCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.getSecretWithResponse#string-string-Context + // BEGIN: com.azure.security.keyvault.SecretClient.getSecretWithResponse#string-string-Context String secretVersion = "6A385B124DEF4096AF1361A85B16C204"; KeyVaultSecret secretWithVersion = secretClient.getSecretWithResponse("secretName", secretVersion, new Context(key2, value2)).getValue(); System.out.printf("Secret is returned with name %s and value %s%n", secretWithVersion.getName(), secretWithVersion.getValue()); - // END: com.azure.security.keyvault.secretclient.getSecretWithResponse#string-string-Context + // END: com.azure.security.keyvault.SecretClient.getSecretWithResponse#string-string-Context } /** - * Method to insert code snippets for {@link SecretClient#setSecret(KeyVaultSecret)} + * Method to insert code snippets for {@link SecretClient#setSecret(KeyVaultSecret)}. */ public void setSecretCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.setSecret#secret + // BEGIN: com.azure.security.keyvault.SecretClient.setSecret#secret KeyVaultSecret newSecret = new KeyVaultSecret("secretName", "secretValue") .setProperties(new SecretProperties().setExpiresOn(OffsetDateTime.now().plusDays(60))); KeyVaultSecret returnedSecret = secretClient.setSecret(newSecret); System.out.printf("Secret is created with name %s and value %s%n", returnedSecret.getName(), returnedSecret.getValue()); - // END: com.azure.security.keyvault.secretclient.setSecret#secret + // END: com.azure.security.keyvault.SecretClient.setSecret#secret - // BEGIN: com.azure.security.keyvault.secretclient.setSecret#string-string + // BEGIN: com.azure.security.keyvault.SecretClient.setSecret#string-string KeyVaultSecret secret = secretClient.setSecret("secretName", "secretValue"); System.out.printf("Secret is created with name %s and value %s%n", secret.getName(), secret.getValue()); - // END: com.azure.security.keyvault.secretclient.setSecret#string-string + // END: com.azure.security.keyvault.SecretClient.setSecret#string-string } /** - * Method to insert code snippets for {@link SecretClient#setSecretWithResponse(KeyVaultSecret, Context)} + * Method to insert code snippets for {@link SecretClient#setSecretWithResponse(KeyVaultSecret, Context)}. */ public void setSecretWithResponseCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.setSecretWithResponse#secret-Context + // BEGIN: com.azure.security.keyvault.SecretClient.setSecretWithResponse#secret-Context KeyVaultSecret newSecret = new KeyVaultSecret("secretName", "secretValue") - .setProperties(new SecretProperties().setExpiresOn(OffsetDateTime.now().plusDays(60))); + .setProperties(new SecretProperties().setExpiresOn(OffsetDateTime.now().plusDays(60))); KeyVaultSecret secret = secretClient.setSecretWithResponse(newSecret, new Context(key1, value1)).getValue(); System.out.printf("Secret is created with name %s and value %s%n", secret.getName(), secret.getValue()); - // END: com.azure.security.keyvault.secretclient.setSecretWithResponse#secret-Context + // END: com.azure.security.keyvault.SecretClient.setSecretWithResponse#secret-Context } /** - * Method to insert code snippets for {@link SecretClient#updateSecretProperties(SecretProperties)} + * Method to insert code snippets for {@link SecretClient#updateSecretProperties(SecretProperties)}. */ public void updateSecretCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.updateSecretProperties#secretProperties + // BEGIN: com.azure.security.keyvault.SecretClient.updateSecretProperties#secretProperties SecretProperties secretProperties = secretClient.getSecret("secretName").getProperties(); secretProperties.setExpiresOn(OffsetDateTime.now().plusDays(60)); SecretProperties updatedSecretProperties = secretClient.updateSecretProperties(secretProperties); KeyVaultSecret updatedSecret = secretClient.getSecret(updatedSecretProperties.getName()); System.out.printf("Updated Secret is returned with name %s, value %s and expires %s%n", updatedSecret.getName(), updatedSecret.getValue(), updatedSecret.getProperties().getExpiresOn()); - // END: com.azure.security.keyvault.secretclient.updateSecretProperties#secretProperties + // END: com.azure.security.keyvault.SecretClient.updateSecretProperties#secretProperties } /** - * Method to insert code snippets for {@link SecretClient#updateSecretPropertiesWithResponse(SecretProperties, Context)} + * Method to insert code snippets for + * {@link SecretClient#updateSecretPropertiesWithResponse(SecretProperties, Context)}. */ public void updateSecretWithResponseCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.updateSecretPropertiesWithResponse#secretProperties-Context + // BEGIN: com.azure.security.keyvault.SecretClient.updateSecretPropertiesWithResponse#secretProperties-Context SecretProperties secretProperties = secretClient.getSecret("secretName").getProperties(); secretProperties.setExpiresOn(OffsetDateTime.now().plusDays(60)); SecretProperties updatedSecretBase = secretClient.updateSecretPropertiesWithResponse(secretProperties, @@ -143,7 +144,7 @@ public void updateSecretWithResponseCodeSnippets() { KeyVaultSecret updatedSecret = secretClient.getSecret(updatedSecretBase.getName()); System.out.printf("Updated Secret is returned with name %s, value %s and expires %s%n", updatedSecret.getName(), updatedSecret.getValue(), updatedSecret.getProperties().getExpiresOn()); - // END: com.azure.security.keyvault.secretclient.updateSecretPropertiesWithResponse#secretProperties-Context + // END: com.azure.security.keyvault.SecretClient.updateSecretPropertiesWithResponse#secretProperties-Context } /** @@ -151,7 +152,7 @@ public void updateSecretWithResponseCodeSnippets() { */ public void deleteSecretCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.deleteSecret#String + // BEGIN: com.azure.security.keyvault.SecretClient.deleteSecret#String SyncPoller deleteSecretPoller = secretClient.beginDeleteSecret("secretName"); // Deleted Secret is accessible as soon as polling begins. @@ -165,53 +166,53 @@ public void deleteSecretCodeSnippets() { // Secret is being deleted on server. deleteSecretPoller.waitForCompletion(); - // END: com.azure.security.keyvault.secretclient.deleteSecret#String + // END: com.azure.security.keyvault.SecretClient.deleteSecret#String } /** - * Method to insert code snippets for {@link SecretClient#beginDeleteSecret(String)} + * Method to insert code snippets for {@link SecretClient#beginDeleteSecret(String)}. */ public void getDeletedSecretCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.getDeletedSecret#string + // BEGIN: com.azure.security.keyvault.SecretClient.getDeletedSecret#string DeletedSecret deletedSecret = secretClient.getDeletedSecret("secretName"); System.out.printf("Deleted Secret's Recovery Id %s", deletedSecret.getRecoveryId()); - // END: com.azure.security.keyvault.secretclient.getDeletedSecret#string + // END: com.azure.security.keyvault.SecretClient.getDeletedSecret#string } /** - * Method to insert code snippets for {@link SecretClient#getDeletedSecretWithResponse(String, Context)} + * Method to insert code snippets for {@link SecretClient#getDeletedSecretWithResponse(String, Context)}. */ public void getDeletedSecretWithResponseCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.getDeletedSecretWithResponse#string-Context + // BEGIN: com.azure.security.keyvault.SecretClient.getDeletedSecretWithResponse#string-Context DeletedSecret deletedSecret = secretClient.getDeletedSecretWithResponse("secretName", new Context(key2, value2)).getValue(); System.out.printf("Deleted Secret's Recovery Id %s", deletedSecret.getRecoveryId()); - // END: com.azure.security.keyvault.secretclient.getDeletedSecretWithResponse#string-Context + // END: com.azure.security.keyvault.SecretClient.getDeletedSecretWithResponse#string-Context } /** - * Method to insert code snippets for {@link SecretClient#purgeDeletedSecret(String)} + * Method to insert code snippets for {@link SecretClient#purgeDeletedSecret(String)}. */ public void purgeDeletedSecretCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.purgeDeletedSecret#string + // BEGIN: com.azure.security.keyvault.SecretClient.purgeDeletedSecret#string secretClient.purgeDeletedSecret("secretName"); - // END: com.azure.security.keyvault.secretclient.purgeDeletedSecret#string + // END: com.azure.security.keyvault.SecretClient.purgeDeletedSecret#string } /** - * Method to insert code snippets for {@link SecretClient#purgeDeletedSecretWithResponse(String, Context)} + * Method to insert code snippets for {@link SecretClient#purgeDeletedSecretWithResponse(String, Context)}. */ public void purgeDeletedSecretWithResponseCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.purgeDeletedSecretWithResponse#string-Context + // BEGIN: com.azure.security.keyvault.SecretClient.purgeDeletedSecretWithResponse#string-Context Response purgeResponse = secretClient.purgeDeletedSecretWithResponse("secretName", new Context(key1, value1)); System.out.printf("Purge Status Code: %d", purgeResponse.getStatusCode()); - // END: com.azure.security.keyvault.secretclient.purgeDeletedSecretWithResponse#string-Context + // END: com.azure.security.keyvault.SecretClient.purgeDeletedSecretWithResponse#string-Context } /** @@ -219,7 +220,7 @@ public void purgeDeletedSecretWithResponseCodeSnippets() { */ public void recoverDeletedSecretCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.recoverDeletedSecret#String + // BEGIN: com.azure.security.keyvault.SecretClient.recoverDeletedSecret#String SyncPoller recoverSecretPoller = secretClient.beginRecoverDeletedSecret("deletedSecretName"); @@ -230,83 +231,83 @@ public void recoverDeletedSecretCodeSnippets() { // Key is being recovered on server. recoverSecretPoller.waitForCompletion(); - // END: com.azure.security.keyvault.secretclient.recoverDeletedSecret#String + // END: com.azure.security.keyvault.SecretClient.recoverDeletedSecret#String } /** - * Method to insert code snippets for {@link SecretClient#backupSecret(String)} + * Method to insert code snippets for {@link SecretClient#backupSecret(String)}. */ public void backupSecretCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.backupSecret#string + // BEGIN: com.azure.security.keyvault.SecretClient.backupSecret#string byte[] secretBackup = secretClient.backupSecret("secretName"); System.out.printf("Secret's Backup Byte array's length %s", secretBackup.length); - // END: com.azure.security.keyvault.secretclient.backupSecret#string + // END: com.azure.security.keyvault.SecretClient.backupSecret#string } /** - * Method to insert code snippets for {@link SecretClient#backupSecretWithResponse(String, Context)} + * Method to insert code snippets for {@link SecretClient#backupSecretWithResponse(String, Context)}. */ public void backupSecretWithResponseCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.backupSecretWithResponse#string-Context + // BEGIN: com.azure.security.keyvault.SecretClient.backupSecretWithResponse#string-Context byte[] secretBackup = secretClient.backupSecretWithResponse("secretName", new Context(key1, value1)).getValue(); System.out.printf("Secret's Backup Byte array's length %s", secretBackup.length); - // END: com.azure.security.keyvault.secretclient.backupSecretWithResponse#string-Context + // END: com.azure.security.keyvault.SecretClient.backupSecretWithResponse#string-Context } /** - * Method to insert code snippets for {@link SecretClient#restoreSecretBackup(byte[])} + * Method to insert code snippets for {@link SecretClient#restoreSecretBackup(byte[])}. */ public void restoreSecretCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.restoreSecret#byte + // BEGIN: com.azure.security.keyvault.SecretClient.restoreSecret#byte // Pass the secret backup byte array of the secret to be restored. byte[] secretBackupByteArray = {}; KeyVaultSecret restoredSecret = secretClient.restoreSecretBackup(secretBackupByteArray); System.out .printf("Restored Secret with name %s and value %s", restoredSecret.getName(), restoredSecret.getValue()); - // END: com.azure.security.keyvault.secretclient.restoreSecret#byte + // END: com.azure.security.keyvault.SecretClient.restoreSecret#byte } /** - * Method to insert code snippets for {@link SecretClient#restoreSecretBackupWithResponse(byte[], Context)} + * Method to insert code snippets for {@link SecretClient#restoreSecretBackupWithResponse(byte[], Context)}. */ public void restoreSecretWithResponseCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.restoreSecretWithResponse#byte-Context + // BEGIN: com.azure.security.keyvault.SecretClient.restoreSecretWithResponse#byte-Context // Pass the secret backup byte array of the secret to be restored. byte[] secretBackupByteArray = {}; KeyVaultSecret restoredSecret = secretClient.restoreSecretBackupWithResponse(secretBackupByteArray, new Context(key2, value2)).getValue(); System.out .printf("Restored Secret with name %s and value %s", restoredSecret.getName(), restoredSecret.getValue()); - // END: com.azure.security.keyvault.secretclient.restoreSecretWithResponse#byte-Context + // END: com.azure.security.keyvault.SecretClient.restoreSecretWithResponse#byte-Context } /** - * Method to insert code snippets for {@link SecretClient#listPropertiesOfSecrets()} + * Method to insert code snippets for {@link SecretClient#listPropertiesOfSecrets()}. */ public void listSecretsCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.listSecrets + // BEGIN: com.azure.security.keyvault.SecretClient.listSecrets for (SecretProperties secret : secretClient.listPropertiesOfSecrets()) { KeyVaultSecret secretWithValue = secretClient.getSecret(secret.getName(), secret.getVersion()); System.out.printf("Received secret with name %s and value %s", secretWithValue.getName(), secretWithValue.getValue()); } - // END: com.azure.security.keyvault.secretclient.listSecrets + // END: com.azure.security.keyvault.SecretClient.listSecrets - // BEGIN: com.azure.security.keyvault.secretclient.listSecrets#Context + // BEGIN: com.azure.security.keyvault.SecretClient.listSecrets#Context for (SecretProperties secret : secretClient.listPropertiesOfSecrets(new Context(key1, value2))) { KeyVaultSecret secretWithValue = secretClient.getSecret(secret.getName(), secret.getVersion()); System.out.printf("Received secret with name %s and value %s", secretWithValue.getName(), secretWithValue.getValue()); } - // END: com.azure.security.keyvault.secretclient.listSecrets#Context + // END: com.azure.security.keyvault.SecretClient.listSecrets#Context - // BEGIN: com.azure.security.keyvault.secretclient.listSecrets.iterableByPage + // BEGIN: com.azure.security.keyvault.SecretClient.listSecrets.iterableByPage secretClient.listPropertiesOfSecrets().iterableByPage().forEach(resp -> { System.out.printf("Response headers are %s. Url %s and status code %d %n", resp.getHeaders(), resp.getRequest().getUrl(), resp.getStatusCode()); @@ -316,7 +317,7 @@ public void listSecretsCodeSnippets() { secretWithValue.getName(), secretWithValue.getValue()); }); }); - // END: com.azure.security.keyvault.secretclient.listSecrets.iterableByPage + // END: com.azure.security.keyvault.SecretClient.listSecrets.iterableByPage } /** @@ -324,19 +325,19 @@ public void listSecretsCodeSnippets() { */ public void listDeletedSecretsCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.listDeletedSecrets + // BEGIN: com.azure.security.keyvault.SecretClient.listDeletedSecrets for (DeletedSecret deletedSecret : secretClient.listDeletedSecrets()) { System.out.printf("Deleted secret's recovery Id %s", deletedSecret.getRecoveryId()); } - // END: com.azure.security.keyvault.secretclient.listDeletedSecrets + // END: com.azure.security.keyvault.SecretClient.listDeletedSecrets - // BEGIN: com.azure.security.keyvault.secretclient.listDeletedSecrets#Context + // BEGIN: com.azure.security.keyvault.SecretClient.listDeletedSecrets#Context for (DeletedSecret deletedSecret : secretClient.listDeletedSecrets(new Context(key1, value2))) { System.out.printf("Deleted secret's recovery Id %s", deletedSecret.getRecoveryId()); } - // END: com.azure.security.keyvault.secretclient.listDeletedSecrets#Context + // END: com.azure.security.keyvault.SecretClient.listDeletedSecrets#Context - // BEGIN: com.azure.security.keyvault.secretclient.listDeletedSecrets.iterableByPage + // BEGIN: com.azure.security.keyvault.SecretClient.listDeletedSecrets.iterableByPage secretClient.listDeletedSecrets().iterableByPage().forEach(resp -> { System.out.printf("Got response headers . Url: %s, Status code: %d %n", resp.getRequest().getUrl(), resp.getStatusCode()); @@ -344,42 +345,42 @@ public void listDeletedSecretsCodeSnippets() { System.out.printf("Deleted secret's recovery Id %s", value.getRecoveryId()); }); }); - // END: com.azure.security.keyvault.secretclient.listDeletedSecrets.iterableByPage + // END: com.azure.security.keyvault.SecretClient.listDeletedSecrets.iterableByPage } /** - * Method to insert code snippets for {@link SecretClient#listPropertiesOfSecretVersions(String)} + * Method to insert code snippets for {@link SecretClient#listPropertiesOfSecretVersions(String)}. */ public void listSecretVersionsCodeSnippets() { SecretClient secretClient = getSecretClient(); - // BEGIN: com.azure.security.keyvault.secretclient.listSecretVersions#string + // BEGIN: com.azure.security.keyvault.SecretClient.listSecretVersions#string for (SecretProperties secret : secretClient.listPropertiesOfSecretVersions("secretName")) { KeyVaultSecret secretWithValue = secretClient.getSecret(secret.getName(), secret.getVersion()); System.out.printf("Received secret's version with name %s and value %s", secretWithValue.getName(), secretWithValue.getValue()); } - // END: com.azure.security.keyvault.secretclient.listSecretVersions#string + // END: com.azure.security.keyvault.SecretClient.listSecretVersions#string - // BEGIN: com.azure.security.keyvault.secretclient.listSecretVersions#string-Context + // BEGIN: com.azure.security.keyvault.SecretClient.listSecretVersions#string-Context for (SecretProperties secret : secretClient .listPropertiesOfSecretVersions("secretName", new Context(key1, value2))) { KeyVaultSecret secretWithValue = secretClient.getSecret(secret.getName(), secret.getVersion()); System.out.printf("Received secret's version with name %s and value %s", secretWithValue.getName(), secretWithValue.getValue()); } - // END: com.azure.security.keyvault.secretclient.listSecretVersions#string-Context + // END: com.azure.security.keyvault.SecretClient.listSecretVersions#string-Context - // BEGIN: com.azure.security.keyvault.secretclient.listSecretVersions#string-Context-iterableByPage + // BEGIN: com.azure.security.keyvault.SecretClient.listSecretVersions#string-Context-iterableByPage secretClient.listPropertiesOfSecretVersions("secretName", new Context(key1, value2)) - .iterableByPage().forEach(resp -> { - System.out.printf("Got response headers . Url: %s, Status code: %d %n", - resp.getRequest().getUrl(), resp.getStatusCode()); - resp.getItems().forEach(value -> { - KeyVaultSecret secretWithValue = secretClient.getSecret(value.getName(), value.getVersion()); - System.out.printf("Received secret's version with name %s and value %s", - secretWithValue.getName(), secretWithValue.getValue()); - }); - }); - // END: com.azure.security.keyvault.secretclient.listSecretVersions#string-Context-iterableByPage + .iterableByPage().forEach(resp -> { + System.out.printf("Got response headers . Url: %s, Status code: %d %n", + resp.getRequest().getUrl(), resp.getStatusCode()); + resp.getItems().forEach(value -> { + KeyVaultSecret secretWithValue = secretClient.getSecret(value.getName(), value.getVersion()); + System.out.printf("Received secret's version with name %s and value %s", + secretWithValue.getName(), secretWithValue.getValue()); + }); + }); + // END: com.azure.security.keyvault.SecretClient.listSecretVersions#string-Context-iterableByPage } }