2017-01-09 1 views
0

Я пытаюсь создать объект KeyVaultClient из Azure Java SDK из сертификата pfx. Я нашел четкий документ о том, как это сделать на C#, но должен понять, как это сделать на Java.Azure KeyVaultClient: аутентифицировать с помощью сертификата в Java

Я могу получить сертификат Windows из учетной записи пользователя keystore, но я действительно не знаю, что передать конструктору KeyVaultClient. Похоже, что он принимает объект типа TokenCredentials, но я не могу найти какой-либо документ о том, как на самом деле построить один из них (которому нужен «токен» и «схема»).

ответ

0

Кажется, я близко, чтобы иметь что-то работу, определив этот класс:.

class WindowsStoreCertificateCredentials(clientId: String, certificate: X509Certificate, privateKey: PrivateKey) extends KeyVaultCredentials { 

def getAuthResult(authority: String, resource: String): AuthenticationResult = {  
    val service = Executors.newFixedThreadPool(1) 
    val context = new AuthenticationContext(authority, false, service) 

    val certificateCredentials = AsymmetricKeyCredential.create(clientId, privateKey, certificate) 
    val authResultFuture = context.acquireToken(resource, certificateCredentials, null) 
    authResultFuture.get 
} 

override def doAuthenticate (authority: String, resource: String, scope: String): String = { 
    getAuthResult(authority, resource).getAccessToken 
} 

}

и пытается использовать его после того, как получение объекта сертификата X509Certificate и секретный ключ, используя java.security.KeyStore:

val client = new KeyVaultClient(new WindowsStoreCertificateCredentials(
    id, privateKey, certificate,)) 

val test = client.getSecret("https:/...") 

к сожалению, это вызывает исключение:

sun.security.mscapi.RSAPrivateKey cannot be cast to java.security.interfaces.RSAPrivateKey java.lang.ClassCastException: sun.security.mscapi.RSAPrivateKey cannot be cast to java.security.interfaces.RSAPrivateKey 

Я открыл вопрос на GitHub AzureAD/лазурь-ActiveDirectory-библиотека-для-Java и предложил запрос тянуть, чтобы исправить это, чтобы продолжить ...

Edit: теперь это фиксируется в версия 1.2.0 от AzureAD/azure-activedirectory-library-for-java.

-1

Похоже, что вы хотите знать, как использовать Azure SDK для Java для создания KeyVaultClient объекта с помощью метода конструктора с требуемым параметром ServiceClientCredentials credentials, как javadoc сказал.

Вот мой пример кода.

import com.microsoft.azure.AzureEnvironment; 
import com.microsoft.azure.CloudException; 
import com.microsoft.azure.credentials.ApplicationTokenCredentials; 
import com.microsoft.azure.keyvault.KeyVaultClient; 
import com.microsoft.azure.management.Azure; 
import com.microsoft.rest.credentials.ServiceClientCredentials; 

String clientId = "xxxx"; 
String domain = "xxxx"; // The same as tenant_id 
String secret = "xxxx"; // The same as client_secret or keys 
AzureEnvironment environment = AzureEnvironment.AZURE; 
ServiceClientCredentials credentials = new ApplicationTokenCredentials(clientId, domain, secret, environment); 
// New a KeyVaultClient object 
KeyVaultClient kvClient = new KeyValutClient(credentials); 

В качестве ссылки, вы можете обратиться к Azure Offical document, чтобы получить параметры clientId, domain & secret на портале Azure Management. Подробнее для API для Лазурного Java SDK, пожалуйста, просмотреть javadocs

+0

Похоже, что я не могу использовать этот конструктор, так как у меня нет приложения Azure. Чтобы конкретно указать Azure doc: я пытаюсь сделать то же самое, что и в https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-application, раздел " Аутентификация с сертификатом вместо секретности клиента ». – CanardMoussant

Смежные вопросы