Azure CDN Проблема продувки с использованием .NET Core ⇐ C#

Место общения программистов C#
Anonymous
Azure CDN Проблема продувки с использованием .NET Core

Сообщение Anonymous »

Я пытаюсь очистить контент из конечной точки Azure CDN с помощью Azure.resourcemanager.cdn SDK (версия 1.3.1) и Azure.Resourcemanager (версия 1.13.1) в приложении C#. Код компилизируется и запускается, но я сталкиваюсь с ошибкой аутентификации: Azure.identity.AuthenticationFailedException с сообщением «Допустимый секрет клиента».

Код: Выделить всё

public async Task PurgeContentAsync(List filePaths)
{
try
{
for (int i = 0; i < filePaths.Count; i++)
{
filePaths[i] = string.Concat("https://storage.blob.core.windows.net", filePaths[i]);
}

var contentPaths = filePaths
.Where(url => !string.IsNullOrWhiteSpace(url))
.Select(url => new Uri(url).AbsolutePath)
.Distinct()
.ToList();

var batchSize = 50; // Azure CDN Standard max

var endpointResourceId = CdnEndpointResource.CreateResourceIdentifier(
_azurePurgeConfiguration.SubscriptionId,
_azurePurgeConfiguration.ResourceGroupName,
_azurePurgeConfiguration.ProfileName,
_azurePurgeConfiguration.EndpointName
);

var endpoint = _armClient.GetCdnEndpointResource(endpointResourceId);

var retryPolicy = Policy
.Handle()
.Or()
.WaitAndRetryAsync(3, attempt => TimeSpan.FromSeconds(Math.Pow(2, attempt)),
(ex, time) => _logger.LogWarning($"Retrying purge: {ex.Message}"));

for (int i = 0; i < contentPaths.Count; i += batchSize)
{
var batch = contentPaths.Skip(i).Take(batchSize).ToList();

await retryPolicy.ExecuteAsync(async () =>
{
var purgeParams = new Azure.ResourceManager.Cdn.Models.PurgeContent(batch);
await endpoint.PurgeContentAsync(WaitUntil.Completed, purgeParams);
});
}
}
catch (Exception ex)
{
_logger.LogError(ex, $"PurgeContentAsync error: {ex.Message}");
throw;
}
}
Проблема :
Когда я запускаю код, он бросает следующее исключение в purgecontentasync call:

Код: Выделить всё

Azure.Identity.AuthenticationFailedException: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID.
Inner Exception: MsalServiceException: Invalid client secret provided. Ensure the secret being sent in the request is the client secret value, not the client secret ID, for a secret added to app . Correlation ID: d360f6c8-a044-40af-91ff-fc02259f9e0c Timestamp: 2025-05-28 11:39:33Z
что я попробовал :
  • проверенный _ArmClient инициализация :
    • Я использую DefaulaZureCredential
      PrettyPrint-Override ">

      Код: Выделить всё

      var _armClient = new ArmClient(new DefaultAzureCredential());
      < /code>
      < /li>
        Я установил переменные среды локально: < /p>
      AZURE_TENANT_ID=
      AZURE_CLIENT_ID=
      AZURE_CLIENT_SECRET=
      < /code>
      < /li>
        Я подтвердил секрет клиента в регистрации приложения Azure AD, и это не истекло. Тем не менее, я мог бы использовать секретный идентификатор вместо секретного значения по ошибке. Я сгенерировал новый секрет и обновил azure_client_secret 
      со значением , но ошибка сохраняется. Antortor роль в подписке и роли CDN конечной точки в ресурсе CDN.
    • Я предоставил согласие администратора для разрешения управления ресурсами Azure в регистрации приложения. FilePaths :

      FilePaths создаются путем добавления URL -файлов хранения Blob (например, https://storage.blob.core.windows.net/c ... r/blob.jpg ) и после New uri (uri). Стать /container/blob.jpg.
    • Я не уверен, соответствует ли это структуре моей конечной точки CDN (

      Код: Выделить всё

      yourcdn.azureedge.net
      ). Может ли это несоответствие вызвать ошибку подлинности?

      Код: Выделить всё

      _logger.LogInformation($"Purging batch: {string.Join(", ", batch)}");
      
    • Пути выглядят как/container/blob.jpg , но ошибка аутентификации возникает перед операцией чистки.



/>
[*] Что может вызвать ошибку «неверная секрет клиента»? Неужели я неправильно настроил DefaultaUrecredentialential , или есть проблема с настройкой регистрации приложения? Я уже сгенерировал новый секрет и обновил переменные своей среды. Должен ли я использовать конкретный тип учетных данных (например, Clientsecretcredential ) вместо defaultaUrecredential ? 6.0 < /li>
Работаю локально на моей машине разработки < /li>
Пакеты Nuget: [*] Значения _azurepurgeconfiguration (

Код: Выделить всё

SubscriptionId
, resourcegroupname , profilename , endpointname ) правильные и соответствуют моей настройке Azure.

Любая помощь или предложения по решению этой проблемы аутентификации были бы очень оценены! Azure-CDN, Azure-SDK, Azure-Resource-Manager, Azure-inedity < /p>


Подробнее здесь: https://stackoverflow.com/questions/796 ... g-net-core

Вернуться в «C#»