Загрузка Azure DNS с новым доменом запрещена - PullRequest
0 голосов
/ 25 декабря 2018

Я использую Azure CDN и использую rest api для загрузки или загрузки файла из CDN.Все работает хорошо.Но когда я пытаюсь выполнить те же операции с новым доменным именем (https://someName.com/), операция загрузки работает нормально, но во время загрузки я получаю

Forbidden; Server failed to authenticate the request.

Мои экзамены:

СОперация загрузки отлично работает с новым доменом. Я думаю, это означает, что с новым доменом проблем нет.

Поскольку операция загрузки отлично работает со старым доменом (http://someOldName.com/), это означает, что я все правильно сделал сзаголовок авторизации и т. д. Поскольку я просто изменяю только часть домена конечной точки и пытаюсь снова сделать запрос на загрузку, но безуспешно.

Я попытался сгенерировать новые ключи после изменения домена и попытался сделатьзапрос на загрузку с новым ключом, но снова безуспешно

Что мне не хватает?Есть ли какие-либо другие конфигурации, которые я должен сделать?

Я использую httpClient, чтобы сделать put запрос.Вот код, который я использую:

public static HttpClient GetHttpClient(AzureOperationType azureOperationType, HttpContent httpContent, Uri uri, Dictionary<string, string> headers = null)
    {
        var client = new HttpClient();
        string contentType = "";
        HttpMethod httpMethod = HttpMethod.Get;
        client.Timeout = GetTimeout(APP_SETTINGS.CDNTimeout);

        client.DefaultRequestHeaders.Add("x-ms-date", DateTime.Now.ToUniversalTime().ToString("r"));
        client.DefaultRequestHeaders.Add("x-ms-version", AzureApiVersion);

        if (headers != null)
        {
            foreach (var header in headers)
            {
                client.DefaultRequestHeaders.Add(header.Key, header.Value);
            }

        }

        if (azureOperationType == AzureOperationType.PutBlockList)
        {
            contentType = "text/plain";
        }

        if (azureOperationType == AzureOperationType.GetBlob || azureOperationType == AzureOperationType.ListBlob)
        {
            httpMethod = HttpMethod.Get;
        }
        else if (azureOperationType == AzureOperationType.PutBlock || azureOperationType == AzureOperationType.PutBlockList || azureOperationType == AzureOperationType.CopyBlob)
        {
            httpMethod = HttpMethod.Put;
        }
        else if (azureOperationType == AzureOperationType.DeleteBlob)
        {
            httpMethod = HttpMethod.Delete;
        }
        else if (azureOperationType == AzureOperationType.GetBlobProperties)
        {
            httpMethod = HttpMethod.Head;
        }


        var canonicalizedHeaders = GetCanonicalizedHeaders(client);
        var canonicalizedResource = GetCanonicalizedResource(uri, APP_SETTINGS.StorageAccount);

        var stringToSign = String.Format("{0}\n\n\n{1}\n\n{4}\n\n\n\n\n\n\n{2}{3}",
               httpMethod.ToString(),
               (httpContent != null) ? httpContent.Headers.ContentLength.ToString() : "",
               canonicalizedHeaders,
               canonicalizedResource,
               contentType);

        var authorizationHeader = CreateAuthorizationHeader(stringToSign);

        client.DefaultRequestHeaders.Add("Authorization", authorizationHeader);

        return client;
    } 

И совершаю вызов с помощью следующей функции:

public static ActionResultCDN UploadBlock(String baseUri, String blockId, byte[] contentBytes)
    {
        ActionResultCDN ActionResultCDN = new ActionResultCDN();
        HttpResponseMessage response = null;
        var uri = new Uri(baseUri + "?comp=block&blockid=" + System.Web.HttpUtility.UrlEncode(Convert.ToBase64String(Encoding.UTF8.GetBytes(blockId))));
        HttpContent content = new ByteArrayContent(contentBytes);
        content.Headers.ContentLength = contentBytes.Length;

        using (var client = GetHttpClient(AzureOperationType.PutBlock, content, uri))
        {
            var result = client.PutAsync(uri, content);
            ActionResultCDN = ProcessResult(result, out response);
        }
        return ActionResultCDN;
    }    

После client.PutAsync я получаю ошибку 403.

...