我正在使用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。我在这里使用一个用户分配的身份,我想通过该身份在此处建立连接。或通过代码本身执行此操作的任何其他方式。 谢谢!!!
答案 0 :(得分:0)
Azure托管服务身份(系统分配或用户分配)适用于在Azure上运行的资源/应用程序。
对于本地开发,您需要使用azure密钥库URL和凭据来访问azure密钥库上的密钥或机密。