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