我正在使用Spring Boot和Java编写应用程序,该应用程序会将文件写入Azure Blob存储。如何使用服务主体进行身份验证?理想情况下,应该通过某些属性或外部文件读取SP的详细信息。
我一直在浪费大量的文档和示例,所有这些似乎都不是我想要的。我见过的大多数示例都使用了我不想使用的存储帐户密钥。
一些示例代码将不胜感激。正如我所说,我正在努力找到一个不错的示例(如何使用SP以及通常如何使用Java编写Azure BLOB存储),因为似乎有很多不同的方法来访问分散在数据库中的存储。微软文档。
答案 0 :(得分:0)
您可以使用ADAL4J获取令牌,然后使用令牌写入blob。
获取令牌。
Copy $(ProjectDir)\dbo\Security\users\ReadonlyUser\$(Configuration)_Login.sql $(ProjectDir)\dbo\Security\users\ReadonlyUser_Login.sql
访问Blob。
public static String getToken() throws Exception {
String TENANT_ID = "your tenant id or name, e4c9*-*-*-*-*57fb";
String AUTHORITY = "https://login.microsoftonline.com/" + TENANT_ID;
String CLIENT_ID = "your application id, dc17*-*-*-*a5e7";
String CLIENT_SECRET = "the secret, /pG*32";
String RESOURCE = "https://storage.azure.com/";
String ACCESS_TOKEN = null;
ExecutorService service = Executors.newFixedThreadPool(1);
AuthenticationContext context = null;
try {
context = new AuthenticationContext(AUTHORITY, false, service);
ClientCredential credential = new ClientCredential(CLIENT_ID, CLIENT_SECRET);
Future<AuthenticationResult> future = context.acquireToken(RESOURCE, credential, null);
ACCESS_TOKEN = future.get().getAccessToken();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} finally {
service.shutdown();
}
return ACCESS_TOKEN;
}
希望有帮助。
答案 1 :(得分:0)
获取访问令牌的另一种方法是 using the MS authentication lib
此库使用“构建器”构建机密客户端。如果您使用该类,它将为您处理刷新令牌并处理缓存