使用 AD FS 作为身份提供商将 SSO 配置为 Salesforce
让您的用户使用 Microsoft Active Directory 联合身份验证服务(AD FS)2.0 从 Microsoft 环境登录到 Salesforce 组织。Microsoft AD FS 充当单点登录身份验证的身份提供商。
所需的 Edition
| 适用于:Lightning Experience 和 Salesforce Classic |
| 适用于:Enterprise、Performance、Unlimited 和 Developer Editions |
Microsoft AD FS 2.0 支持 SAML 2.0 协议。当 AD FS 2.0 设置为 Salesforce 身份提供商时,用户可以使用单点登录 (SSO) 登录到 Salesforce。
AD FS UserInfo 端点仅返回主题声明,如 OpenID 标准指定。未提供通过 UserInfo 端点请求的其他声明。如果您需要 ID 令牌中的其他声明,使用自定义 ID 令牌。
将 AD FS 2.0 配置为与 Salesforce 配合使用时,建议您在服务提供商启动的请求绑定下的 Salesforce 单一登录设置中选择 HTTP 重定向 。此设置可提高与基于 iOS 的设备的互操作性。前提条件
要将 AD FS 2.0 配置为 Salesforce 身份提供商,您需要:
- Microsoft Windows Server 2008 R2 Enterprise 或 Datacenter 版本。如果为评估配置环境,则可以从 Microsoft 下载中心下载试用版。
- Microsoft Active Directory Federation Services 2.0.
备注 Windows Server 2008 R2 包括 AD FS 1.0,它不支持 SAML 2.0。为此,请下载 AD FS 2.0“发布到网络”(RTW) 软件包。 - Salesforce 组织您可以通过 Developer Edition 环境进行试用。
概览
SAML 2.0 定义了参与 SSO 的各方的角色。用户身份验证提供商 (IdP),在这种情况下是 AD FS 2.0。然后,用户可以访问一个或多个服务提供商 (SP) 的资源,无需登录每个服务提供商。SP(也称为“依赖方”)在这种情况下是 Salesforce 组织。
此图显示了 IdP 启动的登录到 Salesforce 的过程。
- 用户使用集成 Windows 身份验证(通过 HTTP 的 Kerberos 令牌)向 AD FS 服务器进行身份验证,并请求登录到 Salesforce。(1)
- AD FS 将 SAML 断言返回给用户的浏览器。(2)
- 浏览器向 Salesforce 提交断言,Salesforce 将用户登录。(3)
以下是创建测试部署的高级步骤。
- 安装 Microsoft AD FS 2.0。
- 配置 AD FS 和 Salesforce 环境。
- 测试配置。
- 根据需要解决实施问题。
安装软件
- 从安装 Windows Server 2008 R2 开始。
备注 AD FS 服务器必须是 Active Directory 域的成员。如果您正在构建用于评估的实验室设置,则 AD FS 服务器可以是域控制器。但是,此配置不是推荐的生产配置。 - 为 AD FS 创建一个友好的 DNS 名称,例如 adfs.testzone.local,并将其指向您的 AD FS 2.0 服务器。
- 下载和安装 AD FS 2.0。此步骤安装其他必备 Windows 组件,如 IIS。
- 在 IIS 管理器中,为您友好的 DNS 名称创建 SSL 证书。如果您有 IIS 6.0 资源工具包,则可以使用 SelfSSL 创建自签名证书。
- 运行 AD FS 服务器配置向导。
- 创建联合服务。
- 选择独立服务器。
- 选择您为友好的 DNS 名称创建的证书。
- 如果安装程序注册服务主体名称 (SPN) 时出现错误,请手动为 DNS 名称创建 Kerberos SPN。SPN 允许浏览器和 AD FS IIS 实例之间的集成 Windows 身份验证正常工作:
1 setspn -a HOST/adfs.testzone.local testzone\ADFSSVR012 setspn -a HOST/adfs testzone\ADFSSVR01有关 Kerberos SPN 的更多信息,请参阅 Active Directory 和 Kerberos SPN Made Easy。
配置 Salesforce
要建立双方之间的联盟,您必须通过交换元数据来建立信任关系。将 AD FS 2.0 实例的元数据输入到 Salesforce 配置中。Salesforce 元数据作为 AD FS 2.0 可以使用的 XML 文件下载。
配置 SAML 2.0
在 AD FS 2.0 MMC 管理单元中,选择证书节点,然后双击令牌签名证书以查看它。单击详细信息选项卡,然后选择复制到文件。以 DER 格式保存证书。
在 AD FS 服务器上,浏览位于 AD FS MMC 中的联盟元数据 URL(位于 服务 | 端点 | 元数据 | 类型:聚合元数据 )。在该示例中,URL 是 https://adfs.testzone.local/FederationMetadata/2007-06/FederationMetadata.xml。
复制 entityID 属性的值。在该示例中,它是 http://adfs.testzone.local。
在 Salesforce 中,从“设置”中,在快速查找方框中输入单点登录,然后选择单点登录设置。选择启用 SAML,并单击该选项,以创建 SAML SSO 配置。
配置设置。
- 名称 — 为 SAML SSO 设置输入名称。
- SAML 版本—将该设置设置为 2.0。
- 发行人—在这里粘贴您的 entityID。
- 身份提供者证书—浏览并选择您之前导出的令牌签名证书。
- 请求签名证书—选择您之前创建的自签名证书。(请参阅生成自签名证书的过程。)
- 请求签名方法—将此设置设置为 RSA-SHA-1。
- SAML 身份类型—要登录用户,可以使用 Salesforce 用户名或联合 ID 进行匹配。如果匹配联合 ID,则必须将其填充到每个用户的配置文件中。要进行测试,请选择联合 ID。如果用户将其电子邮件地址用作其 Salesforce 用户名,则生产部署可以切换到与用户名匹配。
- SAML 身份位置—要登录用户,可以使用 SAML 断言中的 NameID 或其他属性。您可以使用 NameID,因为 AD FS 填充 SAML 断言中的 NameID。
- 服务提供者启动的请求绑定—建议您选择 HTTP 重定向。
- 身份提供者登录 URL—输入 AD FS SAML 端点的 URL,Salesforce 将 SP 发起的登录发送给 SAML 请求。
备注 在 URL 的末尾加上斜杠。您可以在 AD FS MMC 中找到 URL,网址为 端点 | 令牌发行 | 类型:SAML 2.0/WS-Federation 。在该示例中,URL 是 https://adfs.testzone.local/adfs/ls/。
- 自定义注销 URL — 您可以配置用户在注销后发送的 URL,例如 http://intranet.mycompany.com/。
- 实体 ID—此设置指定 AD FS IdP 如何识别 Salesforce SP。要启用 SP 启动的 SSO,请从您已配置的 My Domain 中输入实体 ID。
保存设置,然后下载元数据 XML 文件。
AD FS 2.0 配置
现在您已拥有 Salesforce 元数据,请创建信任关系的 AD FS 侧。打开 AD FS 2.0 MMC 管理单元,并添加新的“依赖方信任”。
- 选择数据源—从文件导入关于依赖方的数据。浏览到您从 Salesforce 下载的 XML 文件。
- 指定显示名称—赋予信任显示名称,例如 Salesforce Test。
- 选择颁发授权规则—允许所有用户访问这个依赖方。
- 打开编辑声明规则对话框—选择。
在声明规则编辑器中,单击颁发转换规则选项卡。使用声明规则模板设置为发送 LDAP 属性作为声明添加规则。
- 声明规则名称—对于测试,将属性 User-Principal-Name 设置为 NameID,并调用规则 作为 NameID 发送 UPN。在生产中,发送用户的电子邮件地址或员工 ID 是很常见的。使用一个值不可能随时间变化的属性非常重要,因为任何更改都会使该用户的 SSO 失效。
- LDAP 属性—选择用户主要名称。
- 传出声明类型—选择名称 ID。
SP 发起的登录
通过 IdP 发起的登录过程,您通常在公司内部网上设置一个链接,用户单击该链接即可访问 Salesforce。当用户点击到 Salesforce 的直接链接时,SP 发起的登录会发生。
如果您在 Salesforce SAML 设置(例如,https://testinfo-developer-edition.my.salesforce.com)中配置了 My Domain 实体 ID,则用户可以转到该域中的 URL。然后将它们重定向到 AD FS 以进行身份验证。
如果您在 Salesforce SAML 设置(例如,https://testinfo-developer-edition.my.salesforce.com)中配置了 My Domain 实体 ID,则用户可以转到该域中的 URL。然后将它们重定向到 AD FS 以进行身份验证。
要启动 SP 发起的登录,请将 AD FS 安全哈希算法参数设置为 SHA-1。Salesforce 在签署 SAML 请求时使用 SHA-1,而 AD FS 默认为 SHA-256。
SHA 参数在“高级”选项卡上的 Salesforce 依赖方的 AD FS 信任属性中设置。
如果您未设置此参数,则会在 AD FS 事件日志中收到一条消息。
Event ID: 378SAML request is not signed with expected signature algorithm. SAML request is signed with signature algorithm http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 . Expected signature algorithm is http://www.w3.org/2000/09/xmldsig#rsa-sha1测试
您现在可以将 Salesforce 用户的联合 ID 设置为 AD 用户帐户的 UPN 并测试登录过程。

对于 SP 发起的登录,假设您配置了 My Domain 实体 ID,请直接浏览该 URL,例如 https://testinfo-developer-edition.my.salesforce.com。
对于 IdP 发起的登录,请使用 AD FS 登录 URL,并将 loginToRp 参数指定为 Salesforce SAML 实体 ID,例如,https://adfs.testzone.local/adfs/ls/idpinitiatedsignon.aspx?loginToRp=https://saml.salesforce.com。
无论哪种情况,浏览器都会遵循一系列重定向,最终将登录到 您 Salesforce 上的应用程序。如果您遇到 Salesforce 登录错误,请在 Salesforce SSO 配置页面上使用 SAML 断言验证程序工具。它显示上次失败的 SAML 登录的结果。

Ï
如果 AD FS 出现错误,请检查 Server Manager\Diagnostics\Applications and Services Logs\AD FS 2.0\Admin 中的 AD FS 日志。这里还有一篇很好的与 AD FS 2.0 诊断有关的 MSDN 博客文章。
如果您配置了 My Domain 实体 ID,则 SP 发起的登录适用于深层链接。将 Salesforce 深处的链接添加到书签,然后注销。重新加载浏览器,并选择该书签。您被重定向到您的 IdP,进行身份验证,然后重定向到书签链接。
常见问题和故障排除
- 联合 ID 区分大小写。
如果联合身份是贵组织的电子邮件地址,请按照 AD FS 发送标准进行输入。否则,Salesforce 无法找到匹配用户。
由于声明语言仅有一个基本正则表达式替换,因此您无法在发送前编写自定义声明规则,以将 LDAP 属性的大小写规范化。
- 断言已经过期。
时间戳超过 5 分钟的断言被拒绝。
备注 Salesforce 允许 3 分钟的时钟偏差。因此,断言最多可以超过时间戳时间 8 分钟或者提前 3 分钟。同样,声明将如有效期指定过期;有效期不足 5 分钟。确保使用网络时间协议 (NTP)将 ADFS 服务器系统时钟同步到良好的 Internet 时间源。
- 无法登录 Salesforce。
如果错误阻止您通过 SSO 登录 Salesforce,您仍可以使用用户名和密码登录。将 ?login 附加到登录 URL,例如 https://login.salesforce.com/?login。登录后,您可以在解决问题时根据需要禁用 SSO。

