在使用Java从azure keyvault检索机密时,我面临一个问题
我使用了以下依赖项azure-security-keyvault-secrets-4.3.6。jar azure-identity-1.4.2。jar azure-core-1.12.0。罐子
还有我的密码,
String keyVaultUri = "https://keyvaultName.vault.azure.net";
SecretClient secretClient = new SecretClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
KeyVaultSecret retrievedSecret = secretClient.getSecret("azureTableConnectionString");
System.out.println(retrievedSecret.getValue());
当我运行上面的代码时,我得到了下面的错误
Exception in thread "main" java.lang.NoClassDefFoundError: org/reactivestreams/Publisher
at com.azure.core.http.policy.RetryPolicy.<init>(RetryPolicy.java:73)
at com.azure.core.http.policy.RetryPolicy.<init>(RetryPolicy.java:37)
at com.azure.security.keyvault.secrets.SecretClientBuilder.<init>(SecretClientBuilder.java:123)
at sage50ukv26.test_0_1.test.tJava_1Process(test.java:892)
at sage50ukv26.test_0_1.test.tLibraryLoad_3Process(test.java:814)
at sage50ukv26.test_0_1.test.tLibraryLoad_2Process(test.java:651)
at sage50ukv26.test_0_1.test.tLibraryLoad_1Process(test.java:499)
at sage50ukv26.test_0_1.test.runJobInTOS(test.java:1434)
at sage50ukv26.test_0_1.test.main(test.java:1204)
Caused by: java.lang.ClassNotFoundException: org.reactivestreams.Publisher
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
还有一种方法可以通过AzureAD应用程序获取azureKeyVault机密值。
访问keyVault需要以下信息。
•客户Id
添加秘密(客户端秘密)
•KeyVault URL。
确保在创建AzureKeyVault
时将访问策略
分配给keyvault。
现在保留所有默认设置,并查看创建
使用Java访问Azure Key Vault需要这些差异。
添加到pom中。xml文件
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.azure/azure-core -->
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>msal4j</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-keyvault</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
Java代码示例
package com.example.azure.keyvault;
import java.net.MalformedURLException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResult;
import com.microsoft.aad.adal4j.ClientCredential;
import com.microsoft.azure.keyvault.KeyVaultClient;
import com.microsoft.azure.keyvault.authentication.KeyVaultCredentials;
import com.microsoft.azure.keyvault.models.SecretBundle;
import java.util.concurrent.Future;
public class KeyVaultTest {
private static AuthenticationResult getAccessToken(String authorization, String resource) throws InterruptedException, ExecutionException, MalformedURLException {
String clientId = "XXXXXXXX"; // Client ID
String clientKey = "XXXXXXXXXXXX"; //Client Secret
AuthenticationResult result = null;
//Starts a service to fetch access token.
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
AuthenticationContext context = new AuthenticationContext(authorization, false, service);
Future<AuthenticationResult> future = null;
//Acquires token based on client ID and client secret.
if (clientKey != null && clientKey != null) {
ClientCredential credentials = new ClientCredential(clientId, clientKey);
future = context.acquireToken(resource, credentials, null);
}
result = future.get();
} finally {
service.shutdown();
}
if (result == null) {
throw new RuntimeException("Authentication results were null.");
}
return result;
}
public static void main(String[] args) {
String vaultBase = "https://ohankeXXXXX.vault.azure.net/"; //KeyVaultURI
KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultCredentials(){
@Override
public String doAuthenticate(String authorization, String resource, String scope) {
String token = null;
try {
AuthenticationResult authResult = getAccessToken(authorization, resource);
token = authResult.getAccessToken();
} catch (Exception e) {
e.printStackTrace();
}
return token;
}
});
SecretBundle test = keyVaultClient.getSecret(vaultBase, "test"); //created a secret in keyault with name test
System.out.println(test.value());
}
}
控制台中的输出
参考资料: 1.http://www.stratogator.com/2017/10/20/how-to-access-secrets-in-azure-key-vault-using-java/2.如何从密钥库获取机密?
我在使用来自Firebase的新FiRecovery时遇到了问题。 情境:我有一个 我使用集合(“房间”)创建房间。添加(房间) 我想做的是:我需要更新一个房间。 为此,我使用:<代码>集合('room')。doc(房间ID)。更新(update) 因此,我需要在我的收藏中的文档中添加ROOM\u ID: 有没有可能实现这一目标? 另一种方法是为自己创建一个生成的ID: 但我想避免它。
在尝试使用AzureKeyVault保护密钥时,我遇到以下错误: 00:01:41错误]读取钥匙圈时出错。微软蔚蓝色的钥匙库。模型。KeyVaultErrorException:操作在Microsoft返回了无效的状态代码“禁止”。蔚蓝色的钥匙库。KeyVault客户端。WrapkeyWithTtpMessageAsync(String Vault BaseUrl、String keyName、S
问题内容: 我在Java中有一个Hashmap,如下所示: 然后我像这样填充它: 如何获得钥匙?类似于:返回“ United”。 问题答案: 一个包含多个键。您可以用来获取所有键的集合。 将存储与key 和key 。要遍历所有键: 将打印和。
问题内容: 我有一些看起来像这样的JSON 我将其解析为JArray: 然后,我遍历数组: 是一个 如何检索每个项目的“名称”或“键”? 例如,“ MobileSiteContent”或“ PageContent” 问题答案: 是基类,,,,等你可以使用的方法来获得JToken的孩子是某种类型的过滤列表,例如。每个对象都有一个对象集合,可以通过方法访问这些对象。对于每个,您都可以得到它。(当然,如
我有一个有3个JsonNodes的数组。我设法打印了我想要的JsonNode(它是一个数组) 不幸的是,它看起来像是将值合并在一起。如何将键与值部分中的值分开? 举个例子 或dosent work!键为,值为: