401 несанкционированный API управления Azure

Я вызываю API управления Azure, чтобы получить список экземпляров в облачной службе.

Следующий код работает, когда скрипач активен и постоянно возвращает 401 неавторизованный, когда он не проходит через скрипач.

Я не могу определить причину. Без Fiddler токен возвращается правильно, поэтому я не понимаю, почему я получаю неавторизованный.

private HostedService GetCloudServiceProperties(string serviceName)
{
       if (_client == null)
        {
            GetClient();
        }

        string serviceProperties = string.Format("https://management.core.windows.net/{0}/services/hostedservices/{1}?embed-detail=true", AzureSettings.SubscriptionId, serviceName);
        var result = _client.GetStringAsync(serviceProperties).Result;
        var serializer = new XmlSerializer(typeof(HostedService), "http://schemas.microsoft.com/windowsazure");
        var returnValue = (HostedService)serializer.Deserialize(new StringReader(result));
        return returnValue;
}

private void GetClient()
{
        string authority = "https://login.microsoftonline.com/" + AzureSettings.TenantName;
        IConfidentialClientApplication app;
        app = ConfidentialClientApplicationBuilder.Create(AzureSettings.ClientId)
                                                  .WithClientSecret(AzureSettings.ClientSecret)
                                                  .WithAuthority(new Uri(authority))
                                                  .Build();

        List<string> scopes = new List<string>()
        {
            "https://management.core.windows.net/.default"
        };
        var token = app.AcquireTokenForClient(scopes).ExecuteAsync().Result;
        _client = new HttpClient();
        _client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.AccessToken}");
        _client.DefaultRequestHeaders.Add("x-ms-version", "2009-10-01");
}

person CloudAnywhere    schedule 31.03.2020    source источник


Ответы (1)


Короткий ответ, но я чувствую, что решение использует заглавную букву на предъявителя. Службы обычно ожидают «Bearer», так что это может быть проблемой.

person Roy vd Wijk    schedule 31.03.2020
comment
к сожалению нет. Пробовал с Бирером. Он также возвращает 401. Я отредактировал вопрос - person CloudAnywhere; 31.03.2020
comment
заменена аутентификация сертификатом. Та же проблема. Ошибка WWW-Authenticate: Bearer error=invalid_token, error_description=токен JWT не содержит ожидаемой аудитории uri 'management .core.windows.net/'. }. Но область содержит этот URL - person CloudAnywhere; 26.05.2020