Ошибка при доступе к SAS URL через Java, серверу не удалось аутентифицировать запрос - PullRequest
0 голосов
/ 17 января 2019
  • Элемент списка

Я получаю сообщение о том, что

Серверу не удалось аутентифицировать запрос. Убедитесь, что значение Заголовок авторизации сформирован правильно, включая подпись

Я хочу получить доступ к своему BLOB-объекту и загрузить определенный файл в локальную систему, я застрял только на первом этапе.

Я пытался доставить контейнеры Blob на SAS url с именем учетной записи и ключом, к которому можно получить доступ и через настольное приложение. я могу получить доступ к файлу и загрузить его, но, несмотря на код, я не могу.

CloudBlobContainer container = new CloudBlobContainer(new URI(uri));

ArrayList<ListBlobItem> items= (ArrayList<ListBlobItem>) container.listBlobs();

1 Ответ

0 голосов
/ 18 января 2019

Пожалуйста, используйте ниже код:

package blob;

import com.microsoft.azure.storage.CloudStorageAccount;
import com.microsoft.azure.storage.blob.*;

import java.net.URI;
import java.util.*;

public class ListBlobBySasToken {
    public static void main(String[] args) throws Exception {
        String storageConnectionString = "DefaultEndpointsProtocol=https;AccountName=***;AccountKey=***;EndpointSuffix=core.windows.net";

        CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString);
        CloudBlobClient blobClient = storageAccount.createCloudBlobClient();
        CloudBlobContainer container = blobClient.getContainerReference("jay");

        String sasToken = generateSAS(container,true);
        System.out.println(sasToken);
        String sasUrl = container.getUri()+ sasToken;

        //Then use sasUrl to init container1
        CloudBlobContainer container1 = new CloudBlobContainer(new URI(sasUrl));
        CloudBlob blob = container1.getBlockBlobReference("test.json");
        System.out.println(blob.getStorageUri());
    }

    private static String generateSAS(CloudBlobContainer container, boolean readonly) throws Exception {
        // Create a container if it does not exist.
        container.createIfNotExists();
        // Create a new shared access policy.
        SharedAccessBlobPolicy sasPolicy = new SharedAccessBlobPolicy();
        // Create a UTC Gregorian calendar value.
        GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
        // Specify the current time as the start time for the shared access
        // signature.
        //
        calendar.setTime(new Date());
        sasPolicy.setSharedAccessStartTime(calendar.getTime());
        // Use the start time delta one hour as the end time for the shared
        // access signature.
        calendar.add(Calendar.HOUR, 10);
        sasPolicy.setSharedAccessExpiryTime(calendar.getTime());
        if (readonly) {
            // Set READ permissions
            sasPolicy.setPermissions(EnumSet.of(SharedAccessBlobPermissions.READ, SharedAccessBlobPermissions.LIST));
        } else {
            // Set READ and WRITE permissions.
            //
            sasPolicy.setPermissions(EnumSet.of(SharedAccessBlobPermissions.READ, SharedAccessBlobPermissions.WRITE, SharedAccessBlobPermissions.LIST));
        }
        // Create the container permissions.
        BlobContainerPermissions containerPermissions = new BlobContainerPermissions();
        // Turn public access to the container off.
        containerPermissions.setPublicAccess(BlobContainerPublicAccessType.OFF);
        container.uploadPermissions(containerPermissions);
        // Create a shared access signature for the container.
        String sas = container.generateSharedAccessSignature(sasPolicy, null);
        // HACK: when the just generated SAS is used straight away, we get an
        // authorization error intermittently. Sleeping for 1.5 seconds fixes that
        // on my box.
//        Thread.sleep(1500);
        // Return to caller with the shared access signature.
        return sas;
    }
}

Подробнее, пожалуйста, обратитесь к этой статье .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...