2017-01-09 27 views
0

からKeyVaultClientオブジェクトを作成しようとしています。私はC#でそれを行う方法について明確な文書を見つけましたが、Javaでそれを行う方法を手がかりにしなければなりません。Azure KeyVaultClient:Javaで証明書を使用して認証します

ユーザーアカウントkeystoreからWindows証明書を取得できますが、実際に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 
} 

}

そして、それを使用しようとjava.security.KeyStoreクラスを使用して証明書X509Certificateオブジェクトと秘密鍵を取得した後:

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 

私は

編集... /紺碧-のActiveDirectory-ライブラリ用-javaのgithubのAzureAD上の問題を開き、継続する、それを修正するためにプル要求を提案した。これは今では固定されています。 AzureAD/azure-activedirectory-library-for-javaのバージョン1.2.0。

-1

Azure SDK for 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); 

参照として、あなたはパラメータclientId、Azureの管理ポータル上domain & secretを取得するためにdocument公式アズールを参照することができます。アズールのJava SDKのAPIの詳細は、javadocsをご覧ください

+0

Azureアプリケーションがないので、このコンストラクタを使用できないようです。 Azureのドキュメントを具体的に指すには、https://docs.microsoft.com/en-us/azure/key-vault/key-vault-use-from-web-applicationと同じ操作をしようとしています。クライアントシークレットの代わりに証明書で認証する " – CanardMoussant

関連する問題