Windows Azure Pack и ADFS

Сегодня мы посмотрим на процесс настройки авторизации по claims токенам Active Directory Federation Services в Windows Azure Pack. 

WAPack использует 2 портала аутентификации: админ портал и тенант портал. Админ портал использут Windows аутентификацию, а тенант портал использует ASP.NET провайдер аутентификации, однако возможно настроить аутентификацию по claims токенам ADFS.

WAP принимает User Principal Name (UPN) и Group claim токены. Когда пользователь пытается зайти на портал WAP проверяет наличие UPN пользователя в администраторах планов, если таковых нет он проверяет Group claim’ы. Удобнее всего назначить одного человека администратором плана, а он добавляет группу в Co-Administrator’s (Domain Local Group не принимаются, пробелы в имени группы недопустимы).

По умолчанию Claims провайдер не поставляет Group Claims и его необходимо расширить (таким образом, этот клейм будет передаваться всем Relying Party) и сконфигурировать Claims правила Relying Party, чтобы передавать Claims в WAP.

Вы можете настроить как оба портала, так и любой из порталов на использование ADFS.

Нам потребуется:

  1. Создать в DNS записи для порталов администраторов, тенантов и ADFS (не обязательно);

  2. Wildcard сертификат или 3 разных сертификата (для ADFS, админ и тенант порталов);

  3. Сервер и сервисный аккаунт для службы ADFS;

  4. Работающий WAP.

Установка ADFS

Я предположу что Вы самостоятельно создадите записи в DNS и сервисную учетную запись необходимые далее.

Сертификат(ы) необходимо импортировать на сервера аутентификации WAP и ADFS.

Установите роль ADFS любым удобным Вам способом, после чего запустите пост инсталл мастер.

В мастере настройки ADFS Вам необходимо будет указать сертификат, который Вы будете использовать для портала ADFS, указать сервисный аккаунт созданный ранее (никакие особые права не нужны данному аккаунту). В случае использования Wildcard сертификата Вам необходимо будет указать имя сервера федерации (его невозможно сменить), если сертификат выдан на определенное имя то этого делать не нужно (имя будет взято из сертификата).

Мастер предложит Вам выбрать база данных для ADFS. Вы можете использовать SQL или Windows Internal Database.

Windows Internal Database может поддерживать ферму до 5 серверов ADFS, но фейловер необходимо производить вручную. Кроме того, в этом сценарии не поддерживаются механизмы “token relay detection” и “artifact resolution”.

Конфигурация федерации

Для корректной работы федерации нам необходимо будет выполнить несколько изменений в конфигурации WAP и ADFS:

  1. Изменить binding сайтов WAP в IIS;

  2. Обновить базу данных WAP новыми адресами сайтов;

  3. Настроить базу данных WAP на использование ADFS;

  4. Создать Relying Party в ADFS;

  5. Создать Claims правила в ADFS;

  6. Включить JWT для Relying Part в ADFS.

Binding сайтов меняется как и для любого другого сайта, в IIS Manager. Меняете binding и на то что Вам нужно (https://manage.tailspintoys.com и https://admin.tailspintoys.com в моем случае) и порт (443) для тенант и админ портала. Если Вы хостите несколько сайтов на одной машине используйте Host Headers (Require Server Name Indication) для того, чтобы несколько сайтов сосуществовали на 443 порту.

После этого необходимо обновить базу данных WAP так как в ней содержиться URL всех endpoint’ов. Это можно осуществить на сервер с Windows Azure Pack: PowerShell API.

Import-Module -Name MgmtSvcConfig

Set-MgmtSvcFqdn -Namespace “TenantSite” -FullyQualifiedDomainName “manage.tailspintoys.com” -Port 443 -Server “wap-sql-01″

Конфигурируем базу данных использовать ADFS Endpoint

$ConnectionString = ‘Data Source=wap-sql-01;Initial Catalog=Microsoft.MgmtSvc.Config;User ID=sa;Password=пароль′

Set-MgmtSvcRelyingPartySettings -Target Tenant -MetadataEndpoint ‘https://adfs.tailspintoys.com/FederationMetadata/2007-06/FederationMetadata.xml‘ -ConnectionString $ConnectionString –DisableCertificateValidation

Далее нам необходимо убедиться что ADFS endpoint работает, для этого пройдем по адресу http://adfs.tailspintoys.com/FederationMetadata/2007-06/FederationMetadata.xml. В зависимости от настроек браузера Вам или предложат скачать xml или выведут на экран.

Теперь можно настраивать ADFS. Откройте консоль ADFS и создайте новый Relying Party Trust

wap-adfs-01

В мастере настройки необходимо указать endpoint федерации тенант портала WAP (https://manage.tailspintoys.com/FederationMetadata/2007-06/FederationMetadata.xml).

wap-adfs-02

Примите все остальные настройки по умолчанию и укажите имя для отображения в консоли ADFS. После завершения мастера у Вас откроется новый мастер. Выберите пункт “Pass Through or Filter an Incoming Claim”

wap-adfs-06

Далее необходимо настроить сам Claim для UPN

wap-adfs-03

После этого необходимо расширить Claims Provider.

wap-adfs-07

Добавляем группы

wap-adfs-04

После этого можно вернуться и настроить второй Claim для нашего портала

wap-adfs-05

Теперь нам необходимо включить JWT для данного траста. Открываем PowerShell на сервере ADFS

Set-AdfsRelyingPartyTrust -TargetIdentifier ‘http://azureservices/TenantSite‘ -EnableJWT $true

Get-AdfsRelyingPartyTrust -name manage.tailspintoys.com ft name, identifier, EnableJWT - проверяем

После этого Вы должны успешно зайти на тенант портал с использованием доменного аккаунта.

Настройка админ портала

Происходит аналогично, с той лишь разницей что нужно немного поменять значения в скриптах и не нужно расширять Claims Provider во второй раз. Красным выделены отличия.

Import-Module -Name MgmtSvcConfig

Set-MgmtSvcFqdn -Namespace “AdminSite” -FullyQualifiedDomainName “admin.tailspintoys.com” -Port 443 -Server “wap-sql-01″

$ConnectionString = ‘Data Source=wap-sql-01;Initial Catalog=Microsoft.MgmtSvc.Config;User ID=sa;Password=пароль′

Set-MgmtSvcRelyingPartySettings -Target Admin -MetadataEndpoint ‘https://adfs.tailspintoys.com/FederationMetadata/2007-06/FederationMetadata.xml‘ -ConnectionString $ConnectionString –DisableCertificateValidation

После этого необходимо создать Relying Party Trust (https://admin.tailspintoys.com/FederationMetadata/2007-06/FederationMetadata.xml), добавить в него Claims правила и включить JWT

Set-AdfsRelyingPartyTrust -TargetIdentifier ‘http://azureservices/AdminSite‘ -EnableJWT $true

Get-AdfsRelyingPartyTrust -name admin.tailspintoys.com  ft name, identifier, EnableJWT - проверяем

После этого необходимо дать доступ какому-либо пользователю или группе к админ порталу

$ConnectionString = ‘Data Source=wap-sql-01;Initial Catalog=Microsoft.MgmtSvc.Config;User ID=sa;Password=пароль′

Add-MgmtSvcAdminUser –Principal tailspintoys’пользователь или группа’ -ConnectionString $ConnectionString

Get-MgmtSvcAdminUser -ConnectionString $Connectionstring - проверяем

Remove-MgmtSvcAdminUser –Principal DOMAINGROUPNAME -ConnectionString $Connectionstring - удалить пользователя

В случае если доступа к админ порталу нет Вам необходимо убедиться что Вы корректно передаете Group Claim (может не соответствовать NetBIOS имени домена)

Token-Groups – Qualified by Long Domain Name - DNS_имя_домена\Имя_группы (tailspintoys.com\имя_группы)

Token-Groups – Qualified by Domain Name - Первое_DNS_имя_домена\Имя_группы (tailspintoys\имя_группы)

На этом настройка завершена.

ps. Вы можете сменить адреса сайтов для большего удобства пользователей, без настройки ADFS, выполнив первые два пункта настройки.

Written on June 26, 2014