Настройка поставщика SAML 2.0 для порталов с AD FS
Примечание
Действует с 12 октября 2022 г, в качестве порталов для Power Apps используется Power Pages. Дополнительная информация: Microsoft Power Pages теперь доступен для всех (блог)
Скоро мы мигрируем и объединим документацию порталов Power Apps с документацией Power Pages.
Важно!
Шаги по настройке службы федерации Active Directory (AD FS) могут различаться в зависимости от версии вашего сервера AD FS.
Создание отношения доверия с проверяющей стороной AD FS
Примечание
См. раздел Настройка AD FS с помощью PowerShell, в котором приведены сведения о том, как выполнять эти шаги в сценарии PowerShell.
С помощью средства управления AD FS перейдите к пункту Служба > Описания требования.
Выберите Добавить описание требования.
Укажите требование:
Отображаемое имя: Постоянный идентификатор
Идентификатор требования: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
Флажок Включить для: Опубликовать это описание требования в метаданных федерации в качестве типа требования, который может принимать эта служба федерации
Флажок Включить для: Опубликовать это описание требования в метаданных федерации в качестве типа требования, который может отправлять эта служба федерации
Нажмите ОК.
С помощью средства управления AD FS выберите Отношения доверия >Отношения доверия с проверяющей стороной.
Выберите Добавить отношение доверия с проверяющей стороной.
Добро пожаловать: выберите Начало.
Выберите источник данных: выберите Ввести данные о проверяющей стороне вручную, затем выберите Далее.
Укажите отображаемое имя: введите имя, затем выберите Далее. Пример: https://portal.contoso.com/
Выберите профиль: выберите Профиль AD FS 2.0, затем выберите Далее.
Настройте сертификат: выберите Далее.
Настройте URL-адрес: установите флажок Включить поддержку протокола SAML 2.0 WebSSO. URL-адрес службы SAML 2.0 SSO проверяющей стороны: введите https://portal.contoso.com/signin-saml2
Обратите внимание, что для AD FS требуется, чтобы портал использовал протокол HTTPS.Примечание
Полученная конечная точка имеет следующие параметры:
- Тип конечной точки: Конечные точки потребления утверждения SAML
- Привязка: POST
- Указатель: н/д (0)
- URL-адрес: https://portal.contoso.com/signin-saml2
Настройка удостоверений: введите
https://portal.contoso.com/
, выберите Добавить, затем выберите Далее. Если требуется, можно добавить больше удостоверений для каждого дополнительного портала проверяющей стороны. Пользователи могут пройти аутентификацию через любые или все доступные удостоверения.Выберите правила авторизации выпуска: выберите Разрешить всем пользователям доступ к этой проверяющей стороне, затем выберите Далее.
Готовность для добавления отношения доверия: выберите Далее.
Выберите Закрыть.
Добавление требования Идентификатор имени в отношение доверия с проверяющей стороной:
Преобразовать имя учетной записи Windows в Идентификатор имени (Преобразовать входящее требование):
Тип входящего требования: Имя учетной записи Windows
Тип исходящего требования: Идентификатор имени
Исходящий формат идентификатора имени: Постоянный идентификатор
Передавать все значения требования
Настройка поставщика SAML 2.0
После настройки отношения доверия с проверяющей стороной AD FS вы можете выполнить следующие действия в разделе Настройка поставщика SAML 2.0 для порталов.
Вход, инициированный поставщиком удостоверений
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 portal page on the service provider.
.PARAMETER path
The path to the portal 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. После запуска сценария переходите к настройке параметров сайта портала.
<#
.SYNOPSIS
Adds a SAML 2.0 relying party trust entry for a website.
.PARAMETER domain
The domain name of the portal.
.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 portal relying party trust
[!INCLUDE[cc-pages-ga-banner](../../../includes/cc-pages-ga-banner.md)]
Add-CrmRelyingPartyTrust $domain
Настройка поставщика SAML 2.0
После настройки отношения доверия с проверяющей стороной AD FS вы можете выполнить следующие действия в разделе Настройка поставщика SAML 2.0 для порталов.
См. также
Настройка поставщика SAML 2.0 для порталов с Azure AD
Вопросы и ответы по использованию SAML 2.0 на порталах
Настройка поставщика SAML 2.0 для порталов
Примечание
Каковы ваши предпочтения в отношении языка документации? Пройдите краткий опрос (обратите внимание, что этот опрос представлен на английском языке).
Опрос займет около семи минут. Личные данные не собираются (заявление о конфиденциальности).