如何使用带有Java / Spring-Boot的服务主体连接到Azure Blob存储

时间:2019-08-06 16:50:27

标签: java azure spring-boot azure-storage-blobs

我正在使用Spring Boot和Java编写应用程序,该应用程序会将文件写入Azure Blob存储。如何使用服务主体进行身份验证?理想情况下,应该通过某些属性或外部文件读取SP的详细信息。

我一直在浪费大量的文档和示例,所有这些似乎都不是我想要的。我见过的大多数示例都使用了我不想使用的存储帐户密钥。

一些示例代码将不胜感激。正如我所说,我正在努力找到一个不错的示例(如何使用SP以及通常如何使用Java编写Azure BLOB存储),因为似乎有很多不同的方法来访问分散在数据库中的存储。微软文档。

2 个答案:

答案 0 :(得分:0)

您可以使用ADAL4J获取令牌,然后使用令牌写入blob。

  1. 将角色分配添加到您的校长。

enter image description here

  1. 获取令牌。

    Copy $(ProjectDir)\dbo\Security\users\ReadonlyUser\$(Configuration)_Login.sql $(ProjectDir)\dbo\Security\users\ReadonlyUser_Login.sql
    
  2. 访问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

此库使用“构建器”构建机密客户端。如果您使用该类,它将为您处理刷新令牌并处理缓存