我创建了几个使用SAML2身份验证的应用程序。这些应用程序(包括SalesForce)通常共享同一个域(即:reports.application.com,portal.application.com等),但它们不属于单个应用程序,甚至不属于同一堆栈。一些子域导致SalesForce,一些子域导向其他应用程序。
问题是ADFS报告“证书不是唯一的”并且拒绝允许在ADFS数据库中注册应用程序,因为证书是相同的。这对SalesForce来说尤其麻烦。
我不知道如何解决这个问题。
编辑:重要的是要注意几乎所有这些应用程序都是SAML2而不是ADFS。
答案 0 :(得分:0)
我对这句话感到有些困惑“重要的是要注意几乎所有这些应用程序都是SAML2而不是ADFS。”您的意思是“重要的是要注意几乎所有这些应用程序都是SAML2而不是WS-Fed”吗?
这些应用程序如何通过ADFS进行身份验证?你有某种第三方堆栈吗?
为什么这些应用程序有证书?是因为请求已签名或SLO已签署或是什么?
如果某些应用程序实际上不需要证书,您可以将其从元数据中删除。
答案 1 :(得分:0)
通过应用ADFS 2.0的汇总3(http://support.microsoft.com/kb/2790338)
可以解决此问题列出了已知问题和Hot Fix。特定于Salesforce,我们得到以下问题(在汇总3中描述);
某些依赖方要求应用签名证书 向SAML请求的依赖方作为签名证书 提供关键的安全验证功能,并在中定义 SAML 2.0规范。 AD FS 2.0能够实现独特性 签名证书应用于依赖方信任,但它 只允许将同一证书应用于一个依赖方 每个AD FS 2.0服务器场的信任。此限制可防止多次依赖 各方使用相同的签名证书进行SAML请求。广告 FS 2.0更新汇总3删除此限制并允许多个 依赖方为SAML请求使用相同的签名证书。
注意:应用更新汇总3后,您需要手动运行脚本(如下所述),以便解决此问题。
窗口内部数据库:
对于问题3,此修补程序将名为“PostReleaseSchemaChanges.ps1
”的PowerShell脚本安装到“%program files%\active directory federation services\sql
”文件夹中。
如果您使用Windows内部数据库(WID)作为AD FS 2.0配置数据库,则在应用此修补程序后,必须首先在服务器场中的辅助联合服务器上手动执行PostReleaseSchemaChanges.ps1 PowerShell脚本,然后在主联合服务器上。
注意:您可能会遇到错误“在此系统上禁用了脚本的执行”。要解决此问题,您可以尝试在powershell中运行以下命令(对于Windows Server 2008 R2):
Set-ExecutionPolicy RemoteSigned
如果您仍然遇到此问题,请参阅下面的StackOverflow帖子: PowerShell says "execution of scripts is disabled on this system."
SQL Server:
如果您使用SQL Server数据库作为AD FS 2.0配置数据库,则必须下载并执行针对SQL Server数据库的RelaxedRequestSigningCertsv2.sql
脚本。
要执行此脚本,请使用Sqlcmd实用程序运行以下cmdlet: Sqlcmd -S -i RelaxedRequestSigningCertsv2.sql 或者,按照以下步骤使用SQL Server Management Studio运行cmdlet:
Connect to the SQL Server database that has the AD FS 2.0 configuration database.
Create a new SQL query.
Paste the contents of the RelaxedRequestSigningCertsv2.sql file into the query, and then execute the query.