通过本地运行的Java应用程序使用MSI连接到Azure Keyvault的方法

时间:2019-12-24 11:10:50

标签: java azure azure-keyvault

我正在使用REST调用从部署在azure VM上的应用程序连接到azure keyvault。下面的代码:

// msiEndpoint:http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net

URL url = new URL (msiEndpoint);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod(Keyvault.HTTPS_METHOD_GET);
con.setRequestProperty("Metadata", "true");
if (Keyvault.HTTPS_SUCCESS_CODE != con.getResponseCode()) {
throw new Exception("Error calling managed identity token endpoint.");
} else {
InputStream responseStream = con.getInputStream();  
ObjectMapper objectMapper = new ObjectMapper();
Token token = objectMapper.readValue(responseStream, Token.class);
accessToken = token.getAccess_token();
}

检索值accessToken,其中Token是带有变量的内部私有静态类:

private String access_token = null;
private String expires_in = null;
private String token_type = null;

在Azure虚拟机上部署时,此代码可以很好地连接并能够检索机密。但是当我尝试在本地运行它时,如果没有MSI,它就无法连接到keyvault。我在这里使用一个用户分配的身份,我想通过该身份在此处建立连接。或通过代码本身执行此操作的任何其他方式。 谢谢!!!

1 个答案:

答案 0 :(得分:0)

Azure托管服务身份(系统分配或用户分配)适用于在Azure上运行的资源/应用程序。

对于本地开发,您需要使用azure密钥库URL和凭据来访问azure密钥库上的密钥或机密。

Azure managed service identities

Azure key vault libraries for Java