使用 AD FS 为门户配置 SAML 2.0 提供者

备注

从 2022 年 10 月 12 日起,Power Apps 门户更名为 Power Pages。 详细信息请参阅:Microsoft Power Pages 现已正式发布(博客)
不久后我们将迁移 Power Apps 门户文档并将其与 Power Pages 文档合并在一起。

重要

Active Directory 联合身份验证服务 (AD FS) 的配置步骤可能会有所不同,具体取决于您的 AD FS 服务器的版本。

创建 AD FS 信赖方信任

备注

有关如何通过 PowerShell 脚本执行这些步骤的信息,请参阅下面的使用 PowerShell 配置 AD FS

  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 协议的支持复选框。 信赖方 SAML 2.0 SSO 服务 URL:输入 https://portal.contoso.com/signin-saml2
      请注意,AD FS 要求门户在 HTTPS 上运行。

      备注

      出现的终结点具有以下设置:

    8. 配置标识:输入 https://portal.contoso.com/,选择添加,然后选择下一步。 如果适用,可以为每个其他信赖方门户添加更多身份。 用户可以跨任何或所有可用身份进行身份验证。

    9. 选择颁发授权规则:选择允许所有用户访问此信赖方,然后选择下一步

    10. 准备添加信任:选择下一步

    11. 选择关闭

  3. 添加名称 ID 声明到信赖方信任:

    将 Windows 帐户名转换为名称 ID 声明(转换传入声明):

    • 传入声明类型:Windows 帐户名

    • 传出声明类型:名称 ID

    • 传出名称 ID 格式:持久标识符

    • 传递所有声明值

配置 SAML 2.0 提供者

设置 AD FS 信赖方信任后,您可以按照为门户配置 SAML 2.0 提供程序中的步骤操作。

标识提供者发起的登录

AD FS 支持 SAML 2.0 规范标识提供者启动的单一登录 (SSO) 配置文件。 为使门户(服务提供程序)正确响应标识提供者启动的 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/ 和信赖方 ID 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 标识提供者发起的 SSO 路径以获取最终 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

您可以使用以下 PowerShell 脚本来构建 URL。 将脚本保存到一个名为 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

使用 PowerShell 配置 AD FS

还可以通过在 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 提供者中的步骤操作。

另请参见

使用 Azure AD 为门户配置 SAML 2.0 提供程序
在门户中使用 SAML 2.0 的常见问题
为门户配置 SAML 2.0 提供程序

备注

您能告诉我们您的文档语言首选项吗? 进行简短调查。(请注意,此调查是英文版调查)

此调查大约需要七分钟。 不会收集个人数据(隐私声明)。