gpt4 book ai didi

适用于 Java 的 Azure sdk 如何设置用户委派 key 和共享身份验证签名 SAS

转载 作者:行者123 更新时间:2023-12-03 00:58:19 24 4
gpt4 key购买 nike

以下代码在最后一行抛出异常:

            // Create a BlobServiceClient object which will be used to create a container client
System.out.println(String.format("Connection String %s", connectStr));
blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();

// Get a user delegation key for the Blob service that's valid for seven days.
// You can use the key to generate any number of shared access signatures over the lifetime of the key.
keyStart = OffsetDateTime.now();
keyExpiry = OffsetDateTime.now().plusHours(7);
error -> userDelegationKey = blobServiceClient.getUserDelegationKey(keyStart, keyExpiry);

异常: </Message><AuthenticationErrorDetail>Only authentication scheme Bearer is supported</AuthenticationErrorDetail></Error>"

Caused by: com.azure.storage.blob.models.BlobStorageException: Status code 403, "<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:d375b3bf-b01e-0044-1191-9c75a8000000

我尝试改编 .NET Java 教程,但到目前为止还没有运气。

这个错误似乎与 REST API 调用有关,有什么想法吗?

最佳答案

因此,经过多次尝试,使用存储帐户的连接字符串来使用用户委派 key 不起作用。我必须注册一个应用程序并添加新的应用程序环境变量。最后,在 IAM 仪表板中检查正确的权限。

就我而言,我使用 Azure 和 Spring,

  1. 仅添加了以下依赖项:
        <dependency>
<groupId>com.azure</groupId>
<artifactId>azure-storage-blob</artifactId>
<version>12.8.0</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.1.2</version>
</dependency>
  • 在 Azure 上创建/注册应用
  • 使用证书和 secret 创建应用的客户端 secret 。
  • 将应用程序-客户端 ID、租户 ID 和客户端 key 存储在环境变量中即在 Macos 上:
  • export AZURE_CLIENT_ID="xxxxxxx"
    launchctl setenv AZURE_CLIENT_ID $AZURE_CLIENT_ID

    export AZURE_TENANT_ID="xxxxxxx"
    launchctl setenv AZURE_TENANT_ID $AZURE_TENANT_ID

    export AZURE_CLIENT_SECRET="xxxxxxx"
    launchctl setenv AZURE_CLIENT_SECRET $AZURE_CLIENT_SECRET
  • Storage Blob Data Contributor的正确角色分配添加到存储帐户的用户和应用。 see this

  • 现在可以使用以下代码生成用户委托(delegate) key 和示例容器 SAS:

  • String endpoint = String.format(Locale.ROOT, "https://%s.blob.core.windows.net", "accountName");

    // Create a BlobServiceClient object which will be used to create a container client
    blobServiceClient = new BlobServiceClientBuilder().endpoint(endpoint)
    .credential(new DefaultAzureCredentialBuilder().build()).buildClient();

    // Get a user delegation key for the Blob service that's valid for seven days.
    // You can use the key to generate any number of shared access signatures over the lifetime of the key.
    keyStart = OffsetDateTime.now();
    keyExpiry = OffsetDateTime.now().plusDays(7);
    userDelegationKey = blobServiceClient.getUserDelegationKey(keyStart, keyExpiry);

    BlobContainerSasPermission blobContainerSas = new BlobContainerSasPermission();
    blobContainerSas.setReadPermission(true);
    BlobServiceSasSignatureValues blobServiceSasSignatureValues = new BlobServiceSasSignatureValues(keyExpiry,
    blobContainerSas);
    BlobContainerClient blobContainerClient = blobServiceClient.getBlobContainerClient("containerName");
    if (!blobContainerClient.exists())
    blobContainerClient.create();

    String sas = blobContainerClient
    .generateUserDelegationSas(blobServiceSasSignatureValues, userDelegationKey);

    希望这对其他人有帮助!

    关于适用于 Java 的 Azure sdk 如何设置用户委派 key 和共享身份验证签名 SAS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64242397/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com