Настройка поставщика 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.

  1. С помощью средства управления AD FS перейдите к пункту Служба > Описания требования.

    1. Выберите Добавить описание требования.

    2. Укажите требование:

      • Отображаемое имя: Постоянный идентификатор

      • Идентификатор требования: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

      • Флажок Включить для: Опубликовать это описание требования в метаданных федерации в качестве типа требования, который может принимать эта служба федерации

      • Флажок Включить для: Опубликовать это описание требования в метаданных федерации в качестве типа требования, который может отправлять эта служба федерации

    3. Нажмите ОК.

  2. С помощью средства управления AD FS выберите Отношения доверия >Отношения доверия с проверяющей стороной.

    1. Выберите Добавить отношение доверия с проверяющей стороной.

    2. Добро пожаловать: выберите Начало.

    3. Выберите источник данных: выберите Ввести данные о проверяющей стороне вручную, затем выберите Далее.

    4. Укажите отображаемое имя: введите имя, затем выберите Далее. Пример: https://portal.contoso.com/

    5. Выберите профиль: выберите Профиль AD FS 2.0, затем выберите Далее.

    6. Настройте сертификат: выберите Далее.

    7. Настройте 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
    8. Настройка удостоверений: введите https://portal.contoso.com/, выберите Добавить, затем выберите Далее. Если требуется, можно добавить больше удостоверений для каждого дополнительного портала проверяющей стороны. Пользователи могут пройти аутентификацию через любые или все доступные удостоверения.

    9. Выберите правила авторизации выпуска: выберите Разрешить всем пользователям доступ к этой проверяющей стороне, затем выберите Далее.

    10. Готовность для добавления отношения доверия: выберите Далее.

    11. Выберите Закрыть.

  3. Добавление требования Идентификатор имени в отношение доверия с проверяющей стороной:

    Преобразовать имя учетной записи 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=&lt;URL encoded RPID&gt;&RelayState=&lt;URL encoded RelayState&gt;. Вся эта строка еще раз кодируется и добавляется в другой контейнер в формате <https://adfs.contoso.com/adfs/ls/idpinitiatedsignon.aspx?RelayState=&lt;URL> encoded RPID/RelayState&gt;.

Например, если имеется путь поставщика услуг /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 для порталов

Примечание

Каковы ваши предпочтения в отношении языка документации? Пройдите краткий опрос (обратите внимание, что этот опрос представлен на английском языке).

Опрос займет около семи минут. Личные данные не собираются (заявление о конфиденциальности).