Разработка приложений ASP.NET с Azure Active Directory

Рик Андерсон

Средства Microsoft ASP.NET для Azure Active Directory упрощают проверку подлинности для веб-приложений, размещенных в Azure. Вы можете использовать проверку подлинности Azure для проверки подлинности Office 365 пользователей из организации, корпоративных учетных записей, синхронизированных из локальной службы Active Directory, или пользователей, созданных в пользовательском домене Azure Active Directory. Включение проверки подлинности Windows Azure позволяет настроить приложение для проверки подлинности пользователей с помощью одного клиента Azure Active Directory .

В этом руководстве показано, как создать приложение ASP.NET, настроенное для входа в Azure Active Directory (Azure AD). Вы также узнаете, как вызвать API Graph, чтобы получить сведения о вошедшего в систему пользователя и как развернуть приложение в Azure.

Предварительные требования

  1. Visual Studio Express 2013 для веб-приложений или Visual Studio 2013.
  2. обновление 4 для Visual Studio 2013 — требуется обновление 3 или более поздней версии.
  3. Учетная запись Azure. Щелкните здесь , чтобы получить бесплатную пробную версию, если у вас еще нет учетной записи.

Добавление глобального администратора в Active Directory

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

  2. Все учетные записи Azure содержат каталог по умолчанию . Щелкните его, а затем перейдите на вкладку Пользователи в верхней части страницы (см. изображение ниже).

  3. Щелкните "Добавить пользователя". Снимок экрана: портал управления Azure с выделенным каталогом по умолчанию слева, пользователей — справа и параметром ADD USER в нижнем колонтитуле.

  4. Создайте нового пользователя с ролью глобального администратора . В верхнем меню щелкните Пользователи , а затем нажмите кнопку Добавить пользователя на панели команд.

  5. В диалоговом окне Добавление пользователя введите имя нового пользователя и щелкните стрелку вправо.

    Снимок экрана: диалоговое окно добавления пользователя с инструкцией

  6. Введите имя пользователя и задайте роль Глобальный администратор. Глобальным администраторам требуется альтернативный адрес электронной почты для восстановления пароля. По завершении щелкните стрелку вправо.

    Снимок экрана: профиль пользователя в диалоговом окне ДОБАВЛЕНИЯ ПОЛЬЗОВАТЕЛЯ с выбранным глобальным администратором в качестве роли. Выделено поле ALTERNATE E MAIL ADDRESS (АЛЬТЕРНАТИВНЫЙ АДРЕС ЭЛЕКТРОННОЙ ПОЧТы).

  7. На следующей странице диалогового окна нажмите кнопку Создать. Для нового пользователя будет создан временный пароль, который отобразится в диалоговом окне.

    Снимок экрана: профиль пользователя в диалоговом окне добавления пользователя с отображением инструкции

    Сохраните пароль. Вам потребуется изменить пароль после первого входа в систему. На следующем рисунке показана новая учетная запись администратора. Для входа в приложение необходимо использовать Azure Active Directory, а не учетную запись Майкрософт, также показанную на этой странице.

    Снимок экрана: новая учетная запись администратора со столбцами DISPLAY NAME, USER NAME и SOURCED FROM в таблице.

Создание приложения ASP.NET

В следующих шагах используется Visual Studio Express 2013 для Web и требуется Visual Studio 2013 обновление 3.

  1. В Visual Studio щелкните Файл , а затем — Создать проект. В диалоговом окне Новый проект выберите веб-проект Visual C# в меню слева и нажмите кнопку ОК. Вы также можете снять флажок Добавить Application Insights в Проект , если вам не нужны функциональные возможности приложения.

  2. В диалоговом окне Новый проект ASP.NET выберите MVC, а затем щелкните Изменить проверку подлинности.

    Снимок экрана: диалоговое окно

  3. В диалоговом окне Изменение проверки подлинности выберите Учетные записи организации. Эти параметры можно использовать для автоматической регистрации приложения в Azure AD а также для автоматической настройки приложения для интеграции с Azure AD. Вам не нужно использовать диалоговое окно Изменение проверки подлинности для регистрации и настройки приложения, но это значительно упрощает его. Например, если вы используете Visual Studio 2012, вы по-прежнему можете вручную зарегистрировать приложение на портале управления Azure и обновить его конфигурацию для интеграции с Azure AD. В раскрывающихся меню выберите Облако — отдельная организация и Единый вход, Чтение данных каталога. Введите домен для каталога Azure AD, например (на рисунках ниже) aricka0yahoo.onmicrosoft.com, а затем нажмите кнопку ОК. Доменное имя можно получить на вкладке Домены для каталога по умолчанию на портале Azure (см. следующее изображение).

    Снимок экрана: диалоговое окно

    На следующем рисунке показано доменное имя из портал Azure.

    Снимок экрана: портал Azure с выбранным каталогом по умолчанию слева, домены в меню справа и доменным именем каталога, отображаемым ниже.

    Примечание

    При необходимости можно настроить URI идентификатора приложения, который будет зарегистрирован в Azure AD, щелкнув Дополнительные параметры. URI идентификатора приложения — это уникальный идентификатор приложения, который регистрируется в Azure AD и используется приложением для идентификации при взаимодействии с Azure AD. Дополнительные сведения о URI идентификатора приложения и других свойствах зарегистрированных приложений см. в этой статье. Установив флажок под полем URI идентификатора приложения, вы также можете перезаписать существующую регистрацию в Azure AD, использующем тот же URI идентификатора приложения.

  4. После нажатия кнопки ОК откроется диалоговое окно входа, и вам потребуется войти с помощью учетной записи глобального администратора (а не учетной записи Майкрософт, связанной с вашей подпиской). Если вы создали новую учетную запись администратора ранее, вам потребуется изменить пароль, а затем снова войти, используя новый пароль.

    Снимок экрана: диалоговое окно входа в Azure Active Directory с полями имени и пароля учетной записи глобального администратора.

  5. После успешной проверки подлинности в диалоговом окне Создать проект ASP.NET отобразится выбор проверки подлинности (организация ) и каталог, в котором будет зарегистрировано новое приложение (aricka0yahoo.onmicrosoft.com на рисунке ниже). Под этой информацией установите флажок Host in the cloud (Узел в облаке). Если этот флажок установлен, проект будет подготовлен как веб-приложение Azure и будет включен для удобной публикации позже. Нажмите кнопку ОК.

    Снимок экрана: диалоговое окно new A P dot NET Project с шаблоном M V C, вариантом проверки подлинности и каталогом. Узел в облаке описан.

  6. Откроется диалоговое окно Настройка веб-сайта Azure с автоматически созданным именем сайта и регионом. Также обратите внимание на учетную запись, в которую вы вошли в данный момент в диалоговом окне. Вы хотите убедиться, что эта учетная запись является учетной записью, к которой подключена ваша подписка Azure( обычно это учетная запись Майкрософт).

    Примечание

    Для этого проекта требуется база данных. Необходимо выбрать одну из существующих баз данных или создать новую. База данных является обязательной, так как проект уже использует локальный файл базы данных для хранения небольшого объема данных конфигурации проверки подлинности. При развертывании приложения на веб-сайте Azure эта база данных не упакована вместе с развертыванием, поэтому необходимо выбрать ту, которая доступна в облаке. Нажмите кнопку ОК.

    Снимок экрана: диалоговое окно

  7. Проект будет создан, а параметры проверки подлинности и параметры веб-приложения будут автоматически настроены вместе с проектом. После завершения этого процесса запустите проект локально, нажав кнопку ^F5. Вам потребуется выполнить вход с помощью учетной записи организации. Укажите имя пользователя и пароль для созданной ранее учетной записи и нажмите кнопку Войти.

    Снимок экрана: диалоговое окно входа с полями имени пользователя и пароля учетной записи организации.

  8. После успешного входа на сайте ASP.NET отобразится, что вы прошли проверку подлинности, указав имя пользователя в правом верхнем углу страницы.

    Снимок экрана: сайт S P dot NET с выделенным l в адресной строке и именем пользователя в правом верхнем углу.

    Если появляется сообщение об ошибке: Значение не может быть пустым или пустым. Имя параметра: linkТекст снимок экрана ошибки сервера. Сообщение об ошибке выделено, чтение Значение не может быть пустым или пустым. Ссылка двоеточия имени параметра Текст.

    См. раздел отладки в конце руководства.

Основы API Graph

API Graph — это программный интерфейс, используемый для выполнения CRUD и других операций с объектами в каталоге Azure AD. Если при создании проекта в Visual Studio 2013 выбран параметр Учетная запись организации для проверки подлинности, приложение уже будет настроено для вызова API Graph. В этом разделе кратко показано, как работает API Graph.

  1. В запущенном приложении щелкните имя пользователя, выполнившего вход, в правом верхнем углу страницы. Откроется страница Профиля пользователя, которая является действием на домашнем контроллере. Вы заметите, что таблица содержит сведения о пользователе учетной записи администратора, созданной ранее. Эти сведения хранятся в каталоге, а API Graph вызывается для получения этих сведений при загрузке страницы.

    Снимок экрана: страница профиля пользователя с таблицей, включавшей отображаемое имя, имя и фамилию для учетной записи администратора.

  2. Назад в Visual Studio, разверните папку Контроллеры, а затем откройте файл HomeController.cs. Вы увидите действие UserProfile(), содержащее код для получения маркера, а затем вызовите API Graph. Этот код дублируется ниже:

    [Authorize]
    public async Task UserProfile()
    {
        string tenantId = ClaimsPrincipal.Current.FindFirst(TenantIdClaimType).Value;
    
        // Get a token for calling the Azure Active Directory Graph
        AuthenticationContext authContext = new AuthenticationContext(String.Format(CultureInfo.InvariantCulture, LoginUrl, tenantId));
        ClientCredential credential = new ClientCredential(AppPrincipalId, AppKey);
        AuthenticationResult assertionCredential = authContext.AcquireToken(GraphUrl, credential);
        string authHeader = assertionCredential.CreateAuthorizationHeader();
        string requestUrl = String.Format(
            CultureInfo.InvariantCulture,
            GraphUserUrl,
            HttpUtility.UrlEncode(tenantId),
            HttpUtility.UrlEncode(User.Identity.Name));
    
        HttpClient client = new HttpClient();
        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
        request.Headers.TryAddWithoutValidation("Authorization", authHeader);
        HttpResponseMessage response = await client.SendAsync(request);
        string responseString = await response.Content.ReadAsStringAsync();
        UserProfile profile = JsonConvert.DeserializeObject<UserProfile>(responseString);
    
        return View(profile);
    }
    

    Чтобы вызвать API Graph, сначала необходимо получить маркер. При извлечении маркера его строковое значение должно быть добавлено в заголовок Authorization для всех последующих запросов к API Graph. Большая часть приведенного выше кода обрабатывает сведения о проверке подлинности в Azure AD для получения маркера, использования маркера для вызова API Graph, а затем преобразования ответа, чтобы его можно было представить в представлении.

    Наиболее релевантной частью для обсуждения является следующая выделенная строка: UserProfile profile = JsonConvert.DeserializeObject<UserProfile>(responseString);. Эта строка представляет имя пользователя, которое было десериализовано из ответа JSON и представлено в представлении.

    Вы можете вызвать API Graph с помощью HttpClient и самостоятельно обрабатывать необработанные данные, но проще использовать клиентская библиотека Graph, доступная через NuGet. Клиентская библиотека обрабатывает необработанные HTTP-запросы и преобразование возвращаемых данных и значительно упрощает работу с API Graph в среде .NET. См. соответствующие примеры кода API Graph на сайте GitHub.

Развертывание приложения в Azure

Ниже показано, как развернуть приложение в Azure. На предыдущих шагах вы подключили новый проект к веб-приложению в Azure, чтобы его можно было опубликовать всего за несколько шагов.

  1. В Visual Studio щелкните правой кнопкой мыши проект и выберите Опубликовать. Откроется диалоговое окно Публикация веб-страницы с настроенными параметрами. Нажмите кнопку Далее , чтобы перейти на страницу Параметры . Может появиться запрос на проверку подлинности; Убедитесь, что вы проходите проверку подлинности с помощью учетной записи подписки Azure (обычно это учетная запись Майкрософт), а не учетной записи организации, созданной ранее.

    Снимок экрана: диалоговое окно

  2. Установите флажок Включить проверку подлинности организации . В поле Домен введите домен для каталога. В раскрывающемся списке Уровень доступа выберите Единый вход, Чтение данных каталога. Вы заметите, что предыдущая используемая база данных уже заполнена в разделе Базы данных . Нажмите кнопку Опубликовать.

    Снимок экрана: диалоговое окно

  3. Visual Studio начнет развертывание веб-сайта, а затем появится новое окно браузера. Может появиться запрос на проверку подлинности в каталоге еще раз. После проверки подлинности вы будете перенаправлены на недавно опубликованный веб-сайт в Azure.

    Снимок экрана: сайт S P dot NET, где в адресной строке отображается только что опубликованный веб-сайт в Azure.

Отладка приложения

Если возникает следующая ошибка: Значение не может быть пустым или пустым. Имя параметра: linkText

Снимок экрана: ошибка erver, которая может возникнуть. Сообщение об ошибке выделено, чтение Значение не может быть пустым или пустым. Ссылка двоеточия имени параметра Text.

Замените код в файле Views\Shared\_LoginPartial.cshtml следующим кодом:

@{
   var user = "Null User";
   if (!String.IsNullOrEmpty(User.Identity.Name))
   {
      user = User.Identity.Name;
   }

}

@if (Request.IsAuthenticated)
{
    <text>
         <ul class="nav navbar-nav navbar-right">
            <li>
                @*@Html.ActionLink(User.Identity.Name, "UserProfile", "Home", routeValues: null, htmlAttributes: null)*@
               @Html.ActionLink(user, "UserProfile", "Home", routeValues: null, htmlAttributes: null)
            </li>
            <li>
                @Html.ActionLink("Sign out", "SignOut", "Account")
            </li>
        </ul>
    </text>
}
else
{
     <ul class="nav navbar-nav navbar-right">
        <li>@Html.ActionLink("Sign in", "Index", "Home", routeValues: null, htmlAttributes: new { id = "loginLink" })</li>
    </ul>
}

Если после запуска приложения для вошедшего пользователя отображается значение "Пустой пользователь", выйдите из системы и снова войдите с помощью созданной ранее учетной записи Active Directory.

Отличное руководство для выполнения — глубокое погружение Рика Рейни: веб-сайты Azure и проверка подлинности организации с использованием Azure AD.

Дополнительные сведения