Исключение при попытке получить конфигурацию с помощью Azure .NET SDK.

Я пытаюсь получить конфигурацию одного из моих веб-приложений с помощью C# .NET SDK. Я хочу использовать приложение Azure AD вместо сертификата управления (который у меня уже работал).

У меня есть следующий код:

var subscriptionId = "<subscription-guid>";
var appId = "<app-guid>";
var appKey = "<app-key>";
var tenantId = "<tenant-guid>";

var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
ClientCredential clientCredential = new ClientCredential(appId, appKey);
var tokenResponse = context.AcquireTokenAsync("https://management.core.windows.net/", clientCredential).Result;
var accessToken = tokenResponse.AccessToken;

var myWebspace = "<my-webspace>";
var myWebsite = "<my-website>";

var client = new WebSiteManagementClient(new TokenCloudCredentials(subscriptionId, accessToken));
var config = client.WebSites.GetConfigurationAsync(myWebspace, myWebsite).Result;

... но в последней строке выдает следующую ошибку:

Microsoft.WindowAzure.CloudException
ForbiddenError: The server failed to authenticate the request. Verify that the certificate is valid and is associated with this subscription.

Что может быть не так? Я создал приложение и дал ему следующие разрешения:

Управление службами Windows Azure

Разрешения приложения: 0

Делегированные разрешения: 1

Доступ к управлению службами Azure в качестве пользователей организации (предварительная версия)

Windows Azure Active Directory

Разрешения приложения: 0

Делегированные разрешения: 1

Войти и прочитать профиль пользователя

заранее спасибо

Крис


person ChrisBellew    schedule 07.11.2016    source источник
comment
См. этот поток для возможных причин ошибки, которую вы получаете: with-azure-ac" title="ошибка при вызове API-интерфейса библиотеки управления azure при аутентификации с помощью azure ac"> stackoverflow.com/questions/35190866/   -  person Gaurav Mantri    schedule 07.11.2016


Ответы (1)


Как упомянул Гаурав в другом потоке SO /а>. Мы можем переключиться на API Azure Resource Manager. Еще одна важная вещь заключается в том, что нам также необходимо создать субъект-службу для доступа к ресурсам. Мы можем использовать команду azure PowerShell, чтобы сделать это легко. Дополнительные сведения о том, как зарегистрировать веб-приложение в Azure AD и создать субъект-службу, см. в статья.

New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $app.ApplicationId.Guid

Microsoft.Azure.Management.WebSites SDK, которые реализуют API управления ресурсами WebApp . Это предварительная версия. Ниже приведен пример моего кода:

 var subscriptionId = "Your subscription Id";
 var appId = "Application Id";
 var appKey = "secret key";
 var tenantId = "tenant id";
 var serviceCreds = ApplicationTokenProvider.LoginSilentAsync(tenantId, appId, appKey).Result;
 var webClient = new WebSiteManagementClient(serviceCreds) { SubscriptionId = subscriptionId };
 var result = webClient.Sites.GetSiteConfigWithHttpMessagesAsync("ResourceGroup Name", "Web App name").Result;

Файл пакета:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.Management.Websites" version="1.3.2-preview" targetFramework="net452" />
  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.28.1" targetFramework="net452" />
  <package id="Microsoft.Rest.ClientRuntime" version="2.3.1" targetFramework="net452" />
  <package id="Microsoft.Rest.ClientRuntime.Azure" version="3.1.0" targetFramework="net452" />
  <package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" version="2.2.4.1-preview" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" />
</packages>

Результат демо-теста:

введите здесь описание изображения

person Tom Sun - MSFT    schedule 25.11.2016