На самом деле, нет необходимости использовать keyvault rest api , вы можете использовать java SDK для keyvault для получить сертификат .
package com.example.azure.keyvault;
import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResult;
import com.microsoft.aad.adal4j.ClientCredential;
import com.microsoft.azure.keyvault.authentication.KeyVaultCredentials;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* Based on example from Microsoft documentation:
* https://azure.github.io/azure-sdk-for-java/com/microsoft/azure/keyvault/authentication/KeyVaultCredentials.html
*/
public class ClientSecretKeyVaultCredential extends KeyVaultCredentials
{
private String clientId;
private String clientKey;
public ClientSecretKeyVaultCredential( String clientId, String clientKey ) {
this.clientId = clientId;
this.clientKey = clientKey;
}
@Override
public String doAuthenticate(String authorization, String resource, String scope) {
AuthenticationResult token = getAccessTokenFromClientCredentials(
authorization, resource, clientId, clientKey);
return token.getAccessToken();
}
private static AuthenticationResult getAccessTokenFromClientCredentials(
String authorization, String resource, String clientId, String clientKey) {
AuthenticationContext context = null;
AuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
context = new AuthenticationContext(authorization, false, service);
ClientCredential credentials = new ClientCredential(clientId, clientKey);
Future<AuthenticationResult> future = context.acquireToken(
resource, credentials, null);
result = future.get();
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
service.shutdown();
}
if (result == null) {
throw new RuntimeException("authentication result was null");
}
return result;
}
}
Для получения более подробной информации,Вы можете выполнить шаги в этом образце .Например, чтобы получить секрет, просто используйте метод KeyVaultClient.getCertificate , чтобы получить сертификат, а не секрет.
Примечание : не забудьте добавить приложение AD в Access Policies
keyvault, иначе ваше приложение не будет иметь разрешения.
Помимо , следует отметить, что client-id
(то есть application id
) и client-key
предназначены для приложения Azure AD, а не для пользователя, все они упомянуты в примере документа.Или для получения дополнительной информации вы можете обратиться к: Создать приложение Azure Active Directory и создать секрет для приложения , сохранить секрет самостоятельно и получить значения для входа в систему.