Active Directory 联合身份验证服务 (AD FS) 是一个 SAML 2.0 标识提供者,您可以使用它来对 Power Pages 站点的
访问者进行身份验证
。 您可以使用符合
SAML 2.0 规范
的任何提供者。
本文介绍以下步骤:
在 Power Pages 中设置 AD FS
创建 AD FS 信赖方信任
完成提供者设置
设置 AD FS 的步骤可能会有所不同,具体取决于您的 AD FS 服务器的版本。
在 Power Pages 中设置 AD FS
将 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
选择均
在联合元数据中发布此声明说明
… 选项。
选择
确定
。
选择
信任关系
>
信赖方信任
。
选择
添加信赖方信任
。
选择
开始
。
选择
手动输入有关信赖方的数据
,然后选择
下一步
。
输入名称;例如,
https://portal.contoso.com/
。
选择
下一步
。
选择
AD FS 2.0 配置文件
,然后选择
下一步
。
在
配置证书
页面上,选择
下一步
。
选择
启用 SAML 2.0 WebSSO 协议的支持
。
在
信赖方 SAML 2.0 SSO 服务 URL
下,输入
您复制
的回复 URL。 AD FS 要求网站运行 HTTPS,而不是 HTTP。
选择
下一步
。
在
配置标识符
页面上,输入您的站点的 URL,然后选择
添加
。
如果需要,您可以为每个其他信赖方网站添加更多身份。 用户可以使用任何可用的身份进行身份验证。
选择
下一步
。
在
立即配置多重身份验证?
页面上,选择
我不想现在为此信赖方信任配置多重身份验证设置
。
在
选择颁发授权规则
页上,选择
允许所有用户访问此信赖方
,然后选择
下一步
。
查看信任设置,然后选择
下一步
。
选择
关闭
。
在
编辑声明规则
中,根据您正在编辑的信任以及要在哪个规则集中创建规则,选择以下选项卡之一:
接受转换规则
颁发转换规则
颁发授权规则
委派授权规则
选择
添加规则
。
在
声明规则模板
列表中,选择
转换传入声明
,然后选择
下一步
。
输入或选择以下值:
声明规则名称
:
将 Windows 帐户名称转换为名称 ID
传入声明类型
:
Windows 帐户名称
传出声明类型
:
名称 ID
传出名称 ID 格式
:
永久标识符
选择
传递所有声明值
。
选择
完成
,然后选择
确定
。
完成提供者设置
设置 AD FS 信赖方信任后:
在 Azure 中创建应用注册
。
在 Power Pages 中输入站点设置
。
标识提供者发起的登录
AD FS 支持
SAML 2.0 规范
的
标识提供者启动的单一登录 (SSO)
配置文件。 要使服务提供商网站正确响应标识提供者的 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/
和信赖方 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 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 中手动添加信赖方信任。 将脚本保存到一个名为
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 提供程序
使用 Microsoft Entra ID 设置 SAML 2.0 提供者
SAML 2.0 常见问题