Проверка подлинности запросов по управлению службами

Обновлено: Июнь 2015 г.

Запросы к службе управления должны пройти проверку подлинности с помощью одного из следующих методов:

Безопасные запросы к службе управления могут проходить проверку подлинности за счет создания приложения Azure AD и использования Active Directory Authentication Library для получения токена доступа из приложения. Дополнительную информацию о проверке подлинности с использованием Azure AD см. в разделе Сценарии проверки подлинности для Azure AD.

Чтобы добавить приложение в Azure AD, выполните следующие действия:

  1. Войдите на портал управления Azure.

  2. В нижней части левого меню щелкните Active Directory и выберите пункт Каталог по умолчанию.

  3. На странице "Каталог по умолчанию" в разделе Интегрировать приложения щелкните Добавить разрабатываемое приложение.

    Добавление приложения Azure AD
  4. Введите имя приложения, установите флажок СОБСТВЕННОЕ КЛИЕНТСКОЕ ПРИЛОЖЕНИЕ, а затем нажмите кнопку со стрелкой вправо.

    Ввод имени для приложения
  5. Введите URI для приложения и установите флажок. URI включает имя приложения, которому предшествует http://localhost/.

    Ввод URL-адреса для перенаправления
  6. После создания приложения необходимо добавить разрешение для приложения для доступа к API управления службой. Перейдите на страницу приложения и нажмите кнопку Настройка.

  7. В разделе Разрешения для других приложений в нижней части страницы конфигурации нажмите кнопку Выбрать приложение, а затем выберите API управления службами Windows Azure.

    Назначение разрешений для приложения
  8. Щелкните Делегированные разрешения: 0, а затем выберите Управление службами доступа Azure.

    Продолжение настройки разрешений
  9. Щелкните Сохранить в нижнем меню.

Можно легко установить Active Directory Authentication Library в проект Visual Studio с помощью пакета NuGet. Чтобы установить пакет, выполните следующие действия:

  1. Щелкните правой кнопкой мыши имя проекта в обозревателе решений и выберите Управление пакетами NuGet.

    Управление пакетами NuGet
  2. Введите Active Directory в поле поиска, щелкните Установить для пакета Библиотека проверки подлинности Active Directory, а затем следуйте инструкциям по установке пакета.

    Установка библиотеки Active Directory

В следующем примере кода показано, как получать маркер доступа:


private static string GetAuthorizationHeader()
{
  AuthenticationResult result = null;
  
  var context = new AuthenticationContext("https://login.windows.net/{tenantId}");

  var thread = new Thread(() =>
  {
    result = context.AcquireToken(
      "https://management.core.windows.net/",
      "{clientId}",
      new Uri("{redirectUri}"));
  });

  thread.SetApartmentState(ApartmentState.STA);
  thread.Name = "AquireTokenThread";
  thread.Start();
  thread.Join();
            
  if (result == null)
  {
    throw new InvalidOperationException("Failed to obtain the JWT token");
  }

  string token = result.AccessToken;
  return token;
}

При использовании приведенного выше кода необходимо заменить следующее:

  • {tenantId} на идентификатор GUID приложения. Чтобы найти идентификатор GUID, перейдите к странице "Каталог по умолчанию" в разделе "Active Directory" на портале управления, выберите созданное ранее приложение и щелкните Просмотр конечных точек.

    Просмотр конечных точек

    Скопируйте идентификатор GUID приложения и замените заполнитель.

    Копирование конечной точки приложения
  • {clientId} на идентификатор клиента. Чтобы найти идентификатор клиента, перейдите на страницу настройки приложения на портале управления.

    Копирование идентификатора клиента AD
  • {redirectUri} на URI перенаправления. Чтобы найти URI перенаправления, перейдите на страницу настройки приложения на портале управления.

    Копирование универсального кода ресурса (URI) для перенаправления приложения

Используйте следующую строку кода, чтобы присвоить маркер, возвращаемый показанным выше методом GetAuthorizationHeader, переменной, которая может использоваться в запросе:

string token = GetAuthorizationHeader();

Используйте следующие строки кода для добавления маркера в запрос:


HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + token);

Безопасные запросы к службе управления могут проходить проверку подлинности с помощью сертификатов управления по протоколу SSL. Для использования сертификата управления его необходимо передать в Azure. После добавления сертификата управления в подписку запросы к службе можно подписать с помощью сертификата. Сведения о создании сертификатов управления и связывании их с подпиской см. в разделе Создание и передача сертификата управления для Azure.

При разработке приложения учитывайте следующие моменты, касающиеся управления сертификатами.

  • API управления службой не проверяет, является ли сертификат все еще допустимым. Проверка подлинности выполняется успешно и к сертификату с истекшим сроком хранения.

  • Все сертификаты управления имеют один и тот же набор прав доступа. Здесь нет понятия «основанной на роли» проверки подлинности, когда один сертификат управления может быть настроен в одной роли, а другой (в той же подписке) — в другой роли.

В следующем примере показано, как извлечь сертификат управления с помощью библиотек System.Net и System.Security.Cryptography.X509Certificates:


private static X509Certificate2 GetStoreCertificate(string thumbprint)
{
  List<StoreLocation> locations = new List<StoreLocation>
  { 
    StoreLocation.CurrentUser, 
    StoreLocation.LocalMachine
  };

  foreach (var location in locations)
  {
    X509Store store = new X509Store("My", location);
    try
    {
      store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
      X509Certificate2Collection certificates = store.Certificates.Find(
        X509FindType.FindByThumbprint, thumbprint, false);
      if (certificates.Count == 1)
      {
        return certificates[0];
      }
    }
    finally
    {
      store.Close();
    }
  }
  throw new ArgumentException(string.Format(
    "A Certificate with Thumbprint '{0}' could not be located.",
    thumbprint));
}

Используйте следующую строку кода, чтобы присвоить сертификат, возвращаемый методом GetStoreCertificate, переменной, которая может использоваться в запросе:

noteПримечание
Thumbprint представляет отпечаток сертификата управления, добавленного в подписку.


X509Certificate2 certificate = GetStoreCertificate(Thumbprint);

Используйте следующие строки кода для добавления сертификата в запрос:


HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.ClientCertificates.Add(certificate);

Показ: