Опубликован: 28.01.2014 | Уровень: для всех | Доступ: платный
Самостоятельная работа 2:

Развертывание инфраструктуры для обеспечения федеративной аутентификации в приложении с помощью Windows Azure Access Control Service и AD FS 2.0

< Лекция 5 || Самостоятельная работа 2 || Лекция 6 >
Аннотация: Работа с аутентификацией.

Для того, чтобы начать работу с аутентификацией, необходимо выполнить следующие шаги:

  1. Установить и настроить все компоненты (WIF, AD FS 2.0, IIS)
  2. Создать облачный проект, который будет содержать всего одну роль – веб-роль,
  3. Запустить проект с аутентификацией по AD FS 2.0 в локальном эмуляторе вычислений
  4. Перенести проект в Windows Azure.

Установка и настройка компонентов

WIF 3.5 и IIS можно установить с помощью Web Platform Installer. Инсталлятор автоматически выберет, установит и настроит зависимости.

Установите вручную Windows Identity Foundation SDK 4.0, который можно загрузить по ссылке - http://www.microsoft.com/en-us/download/details.aspx?id=4451. Установка не требует вмешательства пользователя.

Запустите Internet Information Services (IIS) Manager, находящийся в Control Panel\All Control Panel Items\Administrative Tools.

Выделите имя вашего сервера (в данном случае WEBSERVER) и нажмите Server Certificates. В открывшемся окне вы должны создать самоподписанный сертификат (надо помнить, что коммуникации, связанные с аутентификацией, производятся по защищенному каналу, вследствие чего необходимо использовать какой-то сертификат. Если есть доверенный сертификат, выданный имеющей на то право организацией, можно пропустить создание самоподписанного сертификата и использовать имеющийся). Нажмите Create Self-Signed Certificate. В открывшемся окне введите имя сертификата. Определите его имя как DNS-имя вашего AD FS 2.0-сервера. Будьте внимательны, когда создаете сертификат, особенно с датой, стоящей на сервере. Если она будет отличаться от реальной (например, из-за неустановленного обновления после отмены перехода времени), клиент может не войти в период, во время которого действует сертификат.

Перейдите в раздел Sites и щелкните на Default Web Site, в панели Actions нажмите Bindings. Это необходимо сделать для настройки HTTPS-точки входа для веб-приложения и привязать созданный ранее сертификат. В открывшемся окне нажмите Add. В выпадающем списке выберите https, в SSL certificate созданный только что сертификат, после чего нажмите OK. Теперь ваше приложение доступно по HTTPS. Если в процессе возникнет ошибка A specified logon session does not exist, повторите процедуру либо ещё раз нажмите OK. Настройка IIS закончена.

Создайте Cloud Service на Windows Azure и добавьте в сертификаты вашего сервиса созданный самоподписанный сертификат.

Нажмите Win + R. Введите команду mmc.

В открывшемся окне оснастки нажмите CTRL + M (Add/Remove Snap-in в меню File).

Выберите Certificates и нажмите Add. Выберите Computer account и нажмите Next, Finish. Нажмите OK.

Перейдите в хранилище Personal->Certificates и нажмите два раза на созданном сертификате.

Перейдите на вкладку Details и нажмите Copy To File.

Нажмите Next. Выберите Yes, export the private key. Нажмите Next. Выделите опции Include... и Export all.... Нажмите Next. Введите пароль для сертификата. Нажмите Next. Введите путь для файла сертификата (например, c:\cert.pfx). Нажмите Next, Finish.

Зайдите на портал управления Windows Azure (http://manage.windowsazure.com) и перейдите на вкладку SETTINGS. На вкладке MANAGEMENT CERTIFICATES загрузите файл экспортированного сертификата, введите пароль и нажмите OK. Спустя некоторое время сертификат будет добавлен в хранилище сертификатов экземпляров роли.

Перейдите в Visual Studio 2012.

Создайте облачный проект из шаблона Cloud Service. Нажмите два раза на конфигурации веб-роли, чтобы открыть графический интерфейс настройки роли.

Создание облачного сервиса

Рис. 7.1. Создание облачного сервиса

Перейдите на вкладку Certificates и нажмите Add Certificate. Дайте имя новому сертификату и нажмите на многоточие в поле Thumbprint. Из появившегося списка сертификатов выберите созданный в IIS и нажмите OK. Нажмите CTRL + S для сохранения изменений.

Перейдите на вкладку Endpoints – для доступа по HTTPS необходимо сконфигурировать дополнительную точку входа. Нажмите Add Endpoint, выберите у созданной точки Protocol https, укажите публичный порт в 443 и в выпадающем списке SSL Certificate Name укажите созданный алиас в Visual Studio для самоподписанного сертификата. Нажмите CTRL + S для сохранения настроек.

Нажмите правой кнопкой мыши на папке References ASP.NET-проекта вашего решения и нажмите Add Reference. В списке найдите Microsoft.IdentityModel, выделите ее и нажмите OK. После добавления сборки выделите ее в папке References и в окне Properties укажите свойство сборки Copy Local в true – таким образом сборка будет копироваться вместе с приложением и аутентификация будет работать в облаке Windows Azure (в образе операционной системы, разворачиваемой для веб-роли в Windows Azure, сборки WIF отсутствуют). Это же действие можно совершить с использованием startup-задачи, которая выполнит установку WIF во время старта экземпляра роли.

Теперь необходимо настроить Windows Azure Access Control Service. Для этого на портале управления Windows Azure нажмите APP SERVICES | ACTIVE DIRECTORY | ACCESS CONTROL | QUICK CREATE.

Настройка Windows Azure Access Control Service

увеличить изображение
Рис. 7.2. Настройка Windows Azure Access Control Service

После создания пространства имён выделите его и нажмите MANAGE.

На портале управления Windows Azure Access Control Service нажмите Application Integration.

Скопируйте значение WS-Federation Metadata из вкладки Endpoint Reference. Это адрес конечной точки входа для обмена метаданными федерации.

Откройте решение и нажмите правой кнопкой на ASP.NET-проекте, после чего нажмите на Add STS Reference. Если в списке команд нет Add STS Reference, попробуйте закрыть Visual Studio и переустановить Windows Identity Foundation SDK. Команда Add STS Reference нужна для добавления ссылки в приложение на конечную точку входа Security Token Serviceкомпонент провайдера идентификации, которым для приложения выступает Windows Azure Access Control Service (в реальности же Windows Azure Access Control Service является провайдером федерации). При нажатии на команду Add STS Reference будет запущена служебная утилита FedUtil.exe, входящая в состав WIF SDK. Обратите внимание, что её можно запустить и самостоятельно – из папки Program Files/Windows Identity Foundation SDK.

На первой странице Administrator: Federation Utility нажмите на кнопку Browse и выберите файл web.config вашего проекта. В поле Application URI введите какой-либо URL, который будет использоваться для вашего приложения в Windows Azure.

Administrator: Federation Utility

Рис. 7.3. Administrator: Federation Utility

На странице Security Token Service выберите Use an Existing STS и вставьте скопированный с портала управления Windows Azure Access Control Service адрес конечной точки входа. Нажмите Test locationфайл должен открыться в браузере. Нажмите Next.

Security Token Service

Рис. 7.4. Security Token Service

На странице STS signing certificate chain validation error оставьте Disable certificate chain validation – для самоподписанного сертификата это подходящий вариант. Если имеется реальный сертификат – выберите Enable. Нажмите Next. На следующей странице оставьте No encryption. Два раза нажмите Next.

STS signing certificate chain validation error

Рис. 7.5. STS signing certificate chain validation error

На странице Summary можно запланировать обновление метаданных WS-Federation. Нажмите Finish.

Настроив STS для приложения, необходимо решить проблему проверки данных POST - ASP.NET "просматривает" данные POST, и получаемый SAML-токен не подходит под то, что ASP.NET пропускает– будет выдаваться ошибка. Создайте в проекте файл SampleRequestValidator.cs и отредактируйте соответствующим образом web.config приложения, указав в качестве верификатора запросов этот класс.

web.config:
</roleManager>
…
<httpRuntime requestValidationType="SampleRequestValidator"/>
</system.web>
<system.webServer>
Код SampleRequestValidator.cs приведен ниже:
using System; 
using System.Web; 
using System.Web.Util;
using Microsoft.IdentityModel.Protocols.WSFederation;
public class SampleRequestValidator : RequestValidator 
{ 
protected override bool IsValidRequestString( HttpContext context, string value, 
RequestValidationSource requestValidationSource, string collectionKey, 
out int validationFailureIndex ) 
{ 
validationFailureIndex = 0;
if ( requestValidationSource == RequestValidationSource.Form && collectionKey.Equals
(WSFederationConstants.Parameters.Result, StringComparison.Ordinal ) ) 
{ 
SignInResponseMessage message = WSFederationMessage.CreateFromFormPost
(context.Request ) as SignInResponseMessage;
if ( message != null ) 
{ 
return true; 
} 
}
return base.IsValidRequestString( context, value, requestValidationSource, 
collectionKey, out validationFailureIndex ); 
}
}

Откройте папку с проектом в проводнике и найдите файл AdfsAzureProject\WebRole1\FederationMetadata\2007-06\FederationMetadata.xml. Скопируйте его в отдельную папку.

Теперь необходимо настроить Relying Party, приложение, которое будет использовать Windows Azure Access Control Service в качестве STS. На данный момент приложение знает о том, кого использовать в качестве STS, однако Windows Azure Access Control Service не знает об этом.

На портале управления Windows Azure Access Control Service нажмите Add Relying Party Application. Нажмите Add.

На открывшейся странице настройки приложения введите имя, под которым будет отображаться приложение на портале управления, и выберите Import WS-Federation metadata. В WS-Federation metadata выберите File и найдите скопированный из проекта файл FederationMetadata.xml. В поле Error URL введите любой URL, на который будет переходить браузер при ошибке аутентификации. Остальное оставьте без изменений. Нажмите Save. Теперь приложение и Windows Azure Access Control Service будут знать о том, что они доверяют друг другу в вопросах аутентификации.

Теперь необходимо создать группу правил, которые будут применяться к утверждениям, приходящим от провайдеров идентификации Windows Azure Access Control Service. Если правила будут отсутствовать, будет появляться ошибка 403. Перейдите во вкладку Rule Groups и нажмите на ссылку с именем вашей Relying Party.

Нажмите Generate, чтобы сгенерировать стандартные правила для утверждений публичных провайдеров.

Разверните проект в Windows Azure. Проверьте работоспособность, перейдя на развернутое Web-приложение и аутентифицировавшись с помощью провайдера идентификации.

Для того, чтобы добавить AD FS в список провайдеров идентификации, необходимо соответствующим образом его настроить. Установите пакет, загрузив по ссылке (не добавляйте AD FS как роль с помощью Server Manager, так как будет установлена версия 1.0) http://download.microsoft.com/download/F/3/D/F3D66A7E-C974-4A60-B7A5-382A61EB7BC6/RTW/W2K8R2/amd64/AdfsSetup.exe. Когда инсталлятор запустится, нажмите на всех страницах Next. Во время установки также будут установлены зависимости (если они не установлены). После установки откройте консоль управления AD FS 2.0 из меню Start.

Нажмите AD FS 2.0 Federation Server Configuration Wizard.

Выберите Create a new Federation Service. Нажмите Next.

Выберите Stand-alone federation server. Нажимайте Next до начала установки – в процессе инсталлятор определит сертификат, использующийся для SSL-точки для Default Web Site в IIS. Во время установки будет установлен сервис AD FS, настроена база данных и создан сайт для аутентификации в папке Default Web Site (там находятся все страницы, необходимые для аутентификации, которые можно изменять в соответствии со своими нуждами). Нажмите Close.

Нажмите Requred: Add a trusted relying party. Это необходимо для того, чтобы сконфигурировать Windows Azure Access Control Service в качестве Relying Party для AD FS 2.0.

Нажмите Start. Теперь необходимо импортировать файл метаданных, который вы можете получить с точки входа Windows Azure Access Control Service со вкладки Application Integration. Два раза нажмите Next.

На странице Choose Issuance Authorization Policies выберите Permit. Два раза нажмите Next. Нажмите Close.

В открывшемся окне редактирования правил утверждений нажмите Add Rule.

Оставьте Send LDAP Attributes as Claims и нажмите Next.

Введите имя правила утверждения и выберите в Attribute Store Active Directory. Выберите в LDAP Attribute любой атрибут, например Unqualified Names и в Outgoung Claim Type выберите Role. Нажмите Finish. Нажмите OK.

Настройка AD FS завершена. Теперь необходимо связать AD FS и Windows Azure Access Control Service.

На портале управления Windows Azure Access Control Service нажмите Identity Providers.

Перейдите на Add Identity Provider.

Рядом с Microsoft Active Directory Federation Services 2.0 нажмите Add.

Введите в поле Display name любое имя, характеризующее провайдера идентификации. Это имя будет появляться как на портале управления, так и на страницах аутентификации приложения.

В поле WS-Federation metadata введите URL документа метаданных для сервера AD FS 2.0 или с помощью кнопки File загрузите локальную копию.URL докумета метаданных можно получить, зайдя во вкладку Service\Endpoints в консоли управления AD FS 2.0.

Введите в поле Login link text текст, который будет отображаться для данного провайдера идентификации на странице аутентификации.

Введите URL изображения в поле Image URL, если необходимо отображать какое-либо изображение для провайдера идентификации.

В поле Relying party applications выберите любое существующее приложение, которое будет доверять этому провайдеру идентификации – после этого провайдер идентификации будет появляться на странице входа приложения. Нажмите Save.

Перейдите в Rule Groups и нажмите на ссылке с именем вашего приложения.

Нажмите Generate для автоматического добавления правил.

Таким образом утверждения будут передаваться приложению в исходном виде.

Теперь вы можете перейти на ваш веб-сайт и войти под своей доменной учетной записью. Для того, чтобы работал Single Sign-On, необходимо выполнить следующие операции:

IE: добавить сервер AD FS в зону Local Intranet Sites, при этом, если список настроек IE управляется администратором, появление сайтов блокируется функциональностью IE ESC, которую можно отключить в Server Manager во вкладке Security Information.

Firefox: необходимо перейти на страницу about:config, после чего найти настройки network.negotiate-auth.delegation-uris и network.negotiate-auth.trusted-uris и указать в качестве их значения адрес AD FS сервера.

Chrome: необходимо запустить браузер следующей командой: google-chrome –auth-server-whitelist="адрес_сервера_ADFS".

< Лекция 5 || Самостоятельная работа 2 || Лекция 6 >
Руслан Муравьев
Руслан Муравьев

Сайт dreamspark пишет что код истек :(

Andriy Zymenko
Andriy Zymenko

Этот курс требует оновления https://portal.azure.com/#create/hub здесь нет пункта Web Site в разделе Compute. К тому же для создание трубуется подписка

Абакар Сотавов
Абакар Сотавов
Россия, Санкт-Петербург
Ivan Stefanov
Ivan Stefanov
Болгария