症状
请考虑以下情况:
-
在 Microsoft SharePoint Server 2013 web 应用程序中使用 Windows 声明身份验证(通过 Windows 质询/响应 [NTLM] 或 Kerberos)。
-
你决定通过使用基于安全的应用程序标记语言(SAML)的提供程序(如 Active Directory 联合身份验证服务(AD FS))来切换到受信任的提供程序声明。
-
在 Microsoft 开发人员网络(MSDN)网站上的 SharePoint Server 2013 主题中查看 Windows 声明身份验证迁移到 Windows 声明身份验证 的步骤。
-
运行以下命令:
SPWebApplication-id-id $wa-可信任-默认-From 声明-WINDOWS-TrustedProvider $tp-SourceSkipList $csv-RetainPermissions
在这种情况下,您会收到以下错误消息:
基于 SAML 的声明身份验证不兼容。
原因
出现此问题的原因是未使用默认配置创建受信任身份令牌颁发者。 必须使用默认配置才能使 Convert-SPWebApplication 命令正常工作。 SPWebApplication 命令需要受信任的提供程序的特定配置,才能使其与从 Windows 声明转换为 SAML 兼容,反之亦然。具体说来,必须使用 UseDefaultConfiguration 和 IdentifierClaimIs 参数创建受信任身份令牌颁发者。你可以通过运行以下 Windows PowerShell 脚本检查你的受信任身份令牌颁发者是否已通过使用 UseDefaultConfiguration 参数创建。注意: 这些脚本假设你仅在当前服务器场中创建了一个受信任的标识提供程序。
$tp = Get-SPTrustedIdentityTokenIssuer$tp.claimtypes
此脚本应输出的声明类型如下所示:
-
http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname
-
http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid
-
http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid
-
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
-
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn
#Get the Identity claim:$tp = Get-SPTrustedIdentityTokenIssuer$tp.IdentityClaimTypeInformation
标识声明必须是以下各项之一:
-
WindowAccountName
-
EmailAddress
-
UPN
$Tp 的输出示例。IdentityClaimTypeInformation: DisplayName: Email InputClaimType: Http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddressMappedClaimType: http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress#IsIdentityClaim : True 应有一个与令牌颁发者同名的自定义声明提供程序,并且其类型应为 SPTrustedBackedByActiveDirectoryClaimProvider。运行此操作以查看声明提供程序是否存在以及是否兼容:
$tp = Get-SPTrustedIdentityTokenIssuer$name = $tp.name$cp = Get-SPClaimProvider $nameif($cp.typename -match "SPTrustedBackedByActiveDirectoryClaimProvider"){write-host "Claim provider is present and has TypeName of " $cp.typename " it should be valid"}else{write-host "Claim provider is not present. Trusted Identity Token Issuer" $tp.name " is not compatible with convert-spwebapplication"}
解决方案
若要解决此问题,请删除并重新创建受信任身份令牌颁发者。 为此,请按照下列步骤操作:
-
运行以下脚本:
$tp = Get-SPTrustedIdentityTokenIssuer$tp | fl$tp.name$tp.IdentityClaimTypeInformation
制作此脚本的输出副本,以供将来参考。 尤其是,我们需要 Name 属性的值,以便可以使用相同的名称创建新的令牌颁发者,并且我们需要标识声明,以便可以使用相同的标识声明创建新的声明提供程序。 只要同一名称用于令牌颁发者,并且同一声明用作标识声明,在重新创建令牌颁发者后,所有用户都将在 web 应用程序内维护其权限。
-
从身份验证提供程序中删除当前正在使用它的任何 web 应用程序的当前受信任标识提供程序。
-
通过运行以下命令删除令牌颁发者:
Remove-SPTrustedIdentityTokenIssuer -Identity "TheNameOfYourTokenIssuer"
-
重新创建令牌颁发者。 若要执行此操作,请按照 Microsoft TechNet 网站上的 SharePoint Server 2013 中的 "实施基于 SAML 的身份验证 " 主题中的步骤获取详细信息。重要说明 运行 SPTrustedIdentityTokenIssuer 命令时,必须使用 UseDefaultConfiguration 和 IdentifierClaimIs 参数。 UseDefaultConfiguration参数只是一个开关。 IdentifierClaimIs参数的可能值如下所示:
-
帐户名称
-
电子邮件
-
用户-主体-名称
示例脚本:
$ap = New-SPTrustedIdentityTokenIssuer -Name $tokenIdentityProviderName -Description $TrustedIdentityTokenIssuerDescription -realm $siteRealm -ImportTrustCertificate $adfsCert-SignInUrl $signInUrl -UseDefaultConfiguration -IdentifierClaimIs EMAIL -RegisteredIssuerName $siteRealm
-
-
在管理中心中,将新的受信任标识令牌颁发者添加回你尝试转换的 web 应用程序的身份验证提供程序。 Web 应用程序必须 同时 具有 Windows 身份验证和目标受信任标识提供程序的选择。
更多信息
成功转换的其他提示:如果将电子邮件值用于标识符声明(即针对IdentifierClaimIs参数),则只会转换其电子邮件地址已填充到 Active Directory 中的那些用户。在 SourceSkipList 参数中定义的 .csv 文件中列出的任何用户帐户都不会转换为 SAML。 若要从 Windows 声明转换到 SAML,用户帐户名称可以带有或不带声明符号列出。 例如,"contoso\user1" 或 "i:0 #. w | contoso\user1" 是可以接受的。 你应该将任何不希望转换的用户帐户添加到该 .csv 文件。 这些服务应包括服务帐户和管理员帐户。