Настройка поставщика SAML 2.0 с AD FS
Службы федерации Active Directory (AD FS) — это один из поставщиков удостоверений SAML 2.0, который вы можете использовать для аутентификации посетителей вашего сайта Power Pages. Вы можете использовать любого поставщика, который соответствует спецификации SAML 2.0.
В этой статье рассматриваются следующие шаги:
- Настройка AD FS в Power Pages
- Создание отношения доверия с проверяющей стороной AD FS
- Завершение настройки поставщика
Внимание
Шаги по настройке AD FS могут различаться в зависимости от версии вашего сервера AD FS.
Настройка AD FS в Power Pages
Установите AD FS в качестве поставщика удостоверений для вашего сайта.
На сайте Power Pages выберите Безопасность>Поставщики удостоверений.
Если никакие поставщики удостоверений не отображаются, убедитесь, что для параметра Внешний вход задано значение Вкл. в общих параметрах проверки подлинности вашего сайта.
Выберите + Создать поставщика.
В разделе Выбор поставщика входа выберите Другой.
В пункте Протокол выберите SAML 2.0.
Введите имя для поставщика.
Имя поставщика представляет собой текст на кнопке, который пользователи видят, когда они выбирают своего поставщика удостоверений на странице входа.
Выберите Далее.
В разделе URL-адрес ответа выберите Копировать.
Не закрывайте вкладку браузера Power Pages. Вы скоро вернетесь к ней.
Создание отношения доверия с проверяющей стороной AD FS
Вы также можете использовать сценарий PowerShell для выполнения этих шагов.
В диспетчере серверов выберите Инструменты, затем выберите Управление AD FS.
Разверните пункт Служба.
На правой боковой панели выберите Добавить описание утверждения.
Введите следующие значения:
Отображаемое имя: Постоянный идентификатор
Идентификатор требования: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
Выберите оба параметра Опубликовать это описание утверждения в метаданных федерации… .
Выберите OK.
Выберите Отношения доверия>Отношения доверия с проверяющей стороной.
Выберите Добавить отношение доверия с проверяющей стороной.
Выберите Пуск.
Выберите Ввести данные о проверяющей стороне вручную, затем выберите Далее.
Введите имя, например, https://portal.contoso.com/.
Выберите Далее.
Выберите Профиль AD FS 2.0, затем выберите Далее.
На странице Настройка сертификата выберите Далее.
Выберите Включить поддержку протокола SAML 2.0 WebSSO.
В пункте URL-адрес службы SAML 2.0 единого входа проверяющей стороны введите URL-адрес ответа, который вы скопировали. Для AD FS требуется, чтобы веб-сат использовал протокол HTTPS, а не HTTP.
Выберите Далее.
На странице Настройка идентификаторов введите URL-адрес своего сайта, затем выберите Добавить.
Вы можете добавить больше удостоверений для каждого дополнительного веб-сайта проверяющей стороны, если требуется. Пользователи могут пройти аутентификацию с использованием любых доступных удостоверений.
Выберите Далее.
На странице Настроить многофакторную аутентификацию сейчас? выберите Я не хочу настраивать параметры многофакторной аутентификации для доверия проверяющей стороны на этот раз.
На странице Выберите правила авторизации выпуска выберите Разрешить всем пользователям доступ к этой проверяющей стороне, затем выберите Далее.
Просмотрите параметры доверия, затем выберите Далее.
Выберите Закрыть.
В разделе Изменить правила утверждения выберите одну из следующих вкладок в зависимости от редактируемого доверия и набора правил, в котором вы хотите создать правило:
- Правила преобразования приемки
- Правила преобразования выпуска
- Правила авторизации выпуска
- Правила авторизации делегирования
Выберите Добавить правило.
В списке Шаблон правила утверждения выберите Преобразование входящего утверждения, затем выберите Далее.
Введите или выберите следующие значения:
Имя правила утверждения: Преобразование имени учетной записи Windows в идентификатор имени
Тип входящего требования: Имя учетной записи Windows
Тип исходящего требования: Идентификатор имени
Исходящий формат идентификатора имени: Постоянный идентификатор
Выберите Передавать все значения требования.
Выберите Готово, затем выберите ОК.
Завершение настройки поставщика
После настройки отношения доверия с проверяющей стороной AD FS:
Вход, инициированный поставщиком удостоверений
AD FS поддерживает профиль единого входа (SSO), инициированного поставщиком удостоверений из спецификации SAML 2.0. Чтобы веб-сайт поставщика услуг правильно отвечал на запрос SAML поставщика удостоверений, необходимо закодировать параметр RelayState
.
Базовое строковое значение для кодирования в параметр SAML RelayState
, должно иметь формат ReturnUrl=/content/sub-content/
, где /content/sub-content/
— путь к странице, на которую надо перейти на веб-сайте поставщика услуг. Вы можете указать путь к любой допустимой странице на сайте. Строковое значение кодируется и помещается в строку-контейнер в формате RPID=<URL encoded RPID>&RelayState=<URL encoded RelayState>
. Вся эта строка еще раз кодируется и добавляется в другой контейнер в формате <https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx?RelayState=<URL> encoded RPID/RelayState>
.
Например, если имеется путь поставщика услуг /content/sub-content/
и идентификатор проверяющей стороны https://portal.contoso.com/
, выполните следующие шаги, чтобы сформировать URL-адрес:
Кодирование значения
ReturnUrl=/content/sub-content/
для полученияReturnUrl%3D%2Fcontent%2Fsub-content%2F
Кодирование значения
https://portal.contoso.com/
для полученияhttps%3A%2F%2Fportal.contoso.com%2F
Кодирование значения
RPID=https%3A%2F%2Fportal.contoso.com%2F&RelayState=ReturnUrl%3D%2Fcontent%2Fsub-content%2F
для полученияRPID%3Dhttps%253A%252F%252Fportal.contoso.com%252F%26RelayState%3DReturnUrl%253D%252Fcontent%252Fsub-content%252F
Добавьте в начало путь единого входа, инициированного поставщиком удостоверений AD FS, чтобы получить окончательный URL-адрес
https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx?RelayState=RPID%3Dhttps%253A%252F%252Fportal.contoso.com%252F%26RelayState%3DReturnUrl%253D%252Fcontent%252Fsub-content%252F
Для создания URL-адреса можно использовать следующий сценарий PowerShell. Сохраните сценарий в файл с именем Get-IdPInitiatedUrl.ps1
.
<#
.SYNOPSIS
Constructs an IdP-initiated SSO URL to access a website page on the service provider.
.PARAMETER path
The path to the website page.
.PARAMETER rpid
The relying party identifier.
.PARAMETER adfsPath
The AD FS IdP initiated SSO page.
.EXAMPLE
PS C:\\> .\\Get-IdPInitiatedUrl.ps1 -path "/content/sub-content/" -rpid "https://portal.contoso.com/" -adfsPath "https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx"
#>
param
(
[parameter(mandatory=$true,position=0)]
$path,
[parameter(mandatory=$true,position=1)]
$rpid,
[parameter(position=2)]
$adfsPath = https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx
)
$state = ReturnUrl=$path
$encodedPath = [uri]::EscapeDataString($state)
$encodedRpid = [uri]::EscapeDataString($rpid)
$encodedPathRpid = [uri]::EscapeDataString("RPID=$encodedRpid&RelayState=$encodedPath")
$idpInitiatedUrl = {0}?RelayState={1} -f $adfsPath, $encodedPathRpid
Write-Output $idpInitiatedUrl
Настройка AD FS с помощью PowerShell
Вместо добавления доверия проверяющей стороны в AD FS вручную, можно выполнить следующий сценарий PowerShell на сервере AD FS. Сохраните сценарий в файл с именем Add-AdxPortalRelyingPartyTrustForSaml.ps1
. После выполнения скрипта продолжайте настройку параметров сайта в Power Pages.
<#
.SYNOPSIS
Adds a SAML 2.0 relying party trust entry for a website.
.PARAMETER domain
The domain name of the website.
.EXAMPLE
PS C:\\> .\\Add-AdxPortalRelyingPartyTrustForSaml.ps1 -domain portal.contoso.com
#>
param
(
[parameter(Mandatory=$true,Position=0)]
$domain,
[parameter(Position=1)]
$callbackPath = /signin-saml2
)
$VerbosePreference = Continue
$ErrorActionPreference = Stop
Import-Module adfs
Function Add-CrmRelyingPartyTrust
{
param (
[parameter(Mandatory=$true,Position=0)]
$name
)
$identifier = https://{0}/ -f $name
$samlEndpoint = New-ADFSSamlEndpoint -Binding POST -Protocol SAMLAssertionConsumer -Uri (https://{0}{1} -f $name, $callbackPath)
$identityProviderValue = Get-ADFSProperties | % { $_.Identifier.AbsoluteUri }
$issuanceTransformRules = @'
@RuleTemplate = MapClaims
@RuleName = Transform [!INCLUDE[pn-ms-windows-short](../../../includes/pn-ms-windows-short.md)] Account Name to Name ID claim
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
=> issue(Type = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["https://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent");
@RuleTemplate = LdapClaims
@RuleName = Send LDAP Claims
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "[!INCLUDE[pn-active-directory](../../../includes/pn-active-directory.md)]", types = ("https://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname", "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = ";givenName,sn,mail;{{0}}", param = c.Value);
'@ -f $identityProviderValue
$issuanceAuthorizationRules = @'
@RuleTemplate = AllowAllAuthzRule
=> issue(Type = https://schemas.microsoft.com/authorization/claims/permit, Value = true);
'@
Add-ADFSRelyingPartyTrust -Name $name -Identifier $identifier -SamlEndpoint $samlEndpoint -IssuanceTransformRules $issuanceTransformRules -IssuanceAuthorizationRules $issuanceAuthorizationRules
}
# add the 'Identity Provider' claim description if it is missing
[!INCLUDE[cc-pages-ga-banner](../../../includes/cc-pages-ga-banner.md)]
if (-not (Get-ADFSClaimDescription | ? { $_.Name -eq Persistent Identifier })) {
Add-ADFSClaimDescription -name "Persistent Identifier" -ClaimType "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" -IsOffered:$true -IsAccepted:$true
}
# add the website relying party trust
[!INCLUDE[cc-pages-ga-banner](../../../includes/cc-pages-ga-banner.md)]
Add-CrmRelyingPartyTrust $domain
См. также
Настройка поставщика SAML 2.0
Настройка поставщика SAML 2.0 с Microsoft Entra ID
Вопросы и ответы по SAML 2.0