Azure KeyVault - используйте сертификат и закрытый ключ сертификата. - PullRequest
0 голосов
/ 05 июня 2019

Я работаю над вариантом использования, в котором мне нужно использовать самозаверяющие сертификаты, те, которые я создал с помощью хранилища ключей Azure.

Моему приложению для аутентификации требуются ключ сертификата и закрытый ключ сертификата.

Я хочу понять, как получить эти значения с помощью Java API Azure KeyVault.

Также, пожалуйста, дайте мне знать, как я могу получить идентификатор клиента Azure и ключ клиента?

1 Ответ

1 голос
/ 06 июня 2019

На самом деле, нет необходимости использовать 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 и создать секрет для приложения , сохранить секрет самостоятельно и получить значения для входа в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...