简体中文
  • SAML
  • SSO
  • Identity Provider

简化开发人员的 SAML 应用集成

了解什么是 SAML,如何实现 SSO,以及作为身份提供者(IdP)或服务提供者(SP)集成 SAML 应用的快速步骤。

Ran
Ran
Product & Design

不要在用户认证上浪费数周时间
使用 Logto 更快地发布安全应用。几分钟内集成用户认证,专注于您的核心产品。
立即开始
Product screenshot

单点登录 (SSO) 是现代应用的关键,SAML 提供了跨业务身份系统的安全、友好的认证。本指南通过清晰的步骤和实用的示例为开发人员和设计师简化了 SAML,帮助你有效地实施它。

什么是 SAML SSO 和 SAML 应用?

安全断言标记语言 (SAML) 是一种基于 XML 的标准,用于在两个关键角色之间交换身份验证和授权数据:身份提供者(IdP)服务提供者(SP)。它是组织中单点登录 (SSO) 的常见解决方案,通过允许企业用户一次登录来访问多个应用,使生活更加轻松。

身份提供者 (IdP) 负责管理和验证用户凭据,例如用户名和密码。当用户尝试访问受保护的服务时,IdP 确认他们的身份并将此确认发送给服务。

  • **示例:**假设你在一家使用 Microsoft Azure AD 管理员工帐户的大公司工作。当你想登录 Salesforce 时,Azure AD 充当 IdP。它检查你的凭据,并通知 Salesforce 你被授权使用它。

服务提供者 (SP) 是用户实际尝试访问的应用或服务。它依赖于 IdP 处理身份验证的繁重工作。

  • **示例:**继续上面的场景,Salesforce 是 SP。它依赖 Microsoft Azure AD(IdP)来确认你的身份。一旦 Azure AD 为你担保,Salesforce 就会允许你进入。

谈论“SAML 应用”时,人们通常指的是 SP。

使用 SAML 协议,你可以将服务设置为 IdP 以支持应用集成(如 Azure Ad / Google Workspace);或作为 SP(如 Salesforce / Slack)支持用户的 SSO。

SAML 断言 是 SAML 协议的核心。它是由 IdP 创建并发送给 SP 的一个数字“便条”,表明“我已经确认了此用户的身份”。接下来我们将介绍 IdP 和 SP 的工作流程。

作为 SAML 身份提供者时

当你的服务作为 IdP 功能时,你可以启用对多个应用的 SAML 认证。这允许用户通过单一企业身份访问各种服务。

as_saml_identity_provider_idp.png

以下是 IdP 典型的 SAML SSO 工作流程:

  1. 用户尝试访问一个应用(SP),如 Salesforce。
  2. 应用将用户重定向到你的 IdP 进行身份验证。
  3. 用户在你的 IdP 登录页面输入他们的凭据。
  4. IdP 检查凭据。
  5. 如果凭据被验证,IdP 将 SAML 断言发送回 SP。
  6. SP 处理断言,确认其有效性,并授予用户访问权限。

作为 SAML 服务提供者时

如果你的服务是 SP,你将与各种身份提供者集成,为你的用户提供 SSO 功能。这允许来自不同组织或租户的企业用户安全高效地访问你的应用。

as_saml_service_provider_sp.png

以下是 SP 发起的 SSO 工作流程:

  1. 用户尝试登录你的应用。
  2. 你的应用生成一个 SAML 请求,并将用户重定向到 IdP 的登录页面。
  3. 用户在 IdP 上登录(如果他们已经登录,则跳过此步骤)。
  4. IdP 验证用户的身份,一旦确认,将用户的详细信息打包成 SAML 断言。
  5. IdP 将断言发送回你的应用。
  6. 你的服务验证断言。如果有效,用户将获得对你的应用的访问权限。

SAML SSO 的关键参数

为了成功集成 SAML SSO,IdP 和 SP 必须共享特定参数。以下是要点:

来自 IdP 的参数

  1. IdP 实体 ID: SAML 通信中 IdP 的唯一标识符,类似于数字名牌。
  2. SSO URL: 登录端点(URL),SP 将用户重定向进行身份验证的地方。
  3. X.509 证书: 用于签署 SAML 断言的公钥,确保其安全。这是保证真实性的“印章”。

提示:如果你的 IdP 提供SAML 元数据 URL,事情会更简单。此 URL 包含所有必要信息(如证书、SSO URL 和 IdP 实体 ID),最小化了手动复制粘贴产生错误的风险,并消除了手动更新证书文件的麻烦。

来自 SP 的参数

  1. SP 实体 ID: SP 的唯一标识符,与 IdP 实体 ID 类似。
  2. 断言消费者服务 (ACS) URL: 这是 SP 期待从 IdP 接收 SAML 断言的 SP 端点。
  3. RelayState(可选): 用于在 SAML 过程中传递数据,如用户最初尝试访问的 URL。

SAML 属性映射和加密

  1. NameID 格式: 定义用户标识符的格式(例如,电子邮件地址或用户名)。
  2. SAML 属性: 这些是附加的用户详细信息,如角色、电子邮件或部门,IdP 发送给 SP。
    • 示例:如果由 IdP 签署的 SAML 断言包含 email ([email protected])、role (admin) 和 department (engineering)。SP 可以使用 role 分配管理员权限或 department 将用户分组到正确的团队中。因此,要获取这些重要的用户数据,IdP 和 SP 都需要决定如何映射属性。比如,IdP 可能将“department”定义为团队,而 SP 期望它为组。正确的映射确保顺畅的通信。
  3. 加密断言(可选): 为了保护敏感的身份验证数据,SAML 断言可以加密。
    • IdP 的角色: 使用 SP 的公钥加密断言。
    • SP 的角色: 使用私钥解密断言以读取用户详细信息。

到现在为止,你应该有必要的信息来设置 SAML 连接。要将 Salesforce(服务提供者)与 Azure AD(身份提供者)集成,请按以下步骤操作:

  • 从 Azure AD 获取 IdP 实体 ID、SSO URL 和证书,并在 Salesforce 中配置它们。
  • 向 Azure AD 提供 Salesforce 的 SP 实体 ID 和 ACS URL。

Logto 让 SAML 集成变得简单

Logto 可以充当 IdP 或 SP,以支持你的应用的 SAML SSO。

将 Logto 用作 SAML IdP

Logto 允许其他应用依赖其进行联合身份认证,并支持多因素认证 (MFA)以增强安全性。

  1. 创建 Logto 应用 前往 Logto 控制台 > 应用 并创建一个新的 SAML 应用。
  2. 配置 SAML 参数 使用服务提供者 (SP) 的 断言消费者服务 URLSP 实体 ID 设置应用。
  3. 提供元数据 URL Logto 提供了一个 IdP 元数据 URL,SP 可以使用它自动检索重要详细信息,如 SSO URL 和证书。
  4. 高级配置(可选)
    • 你可以创建多个带有指纹的新证书并设置到期日期,但一次只能有一个证书处于活动状态。
    • 修改 Name ID 格式 以符合你的业务需求。
    • 通过从服务提供商复制并粘贴 x509 证书来启用 SAML 断言加密,以加密断言。
  5. 映射属性 (可选) 轻松自定义用户属性与服务提供者 (SP) 的共享方式。

logto_saml_apps_saml_providers.png

详细指南请访问官方文档:SAML 应用

将 Logto 用作 SAML SP

Logto 还通过 SAML 或 OIDC 协议与任何企业 IdP 集成。无论你是为统一登录页面启用 SP 发起的 SSO,还是配置 IdP 发起的 SSO,过程都很简单。

  1. 创建企业连接器 前往 Logto 控制台 > 企业 SSO 并创建一个新的企业连接器。选择 SAML 作为协议标准。
  2. 配置 SAML 参数 提供来自你的 IdP 的 元数据 URL元数据 XML 文件。如果元数据不可用,切换到手动配置,输入 IdP 实体 ID,SSO URL,并上传签名证书。
  3. 共享 ACS URL 和 SP 实体 ID 向你的 IdP 提供 Logto 的 ACS URLSP 实体 ID 以完成集成设置。
  4. 映射属性(可选) 配置用户数据映射,如电子邮件或姓名,以确保信息在 IdP 和 Logto 之间正确传递。
  5. 添加企业电子邮件域 在企业连接器的“SSO 体验”选项卡中,添加一个或多个电子邮件域。这确保只有使用指定域的用户可以通过 SSO 进行身份验证。
  6. 启用 IdP 发起的 SSO(可选) 仅当企业客户需要时,启用 IdP 发起的 SSO。此功能允许用户直接从 IdP 仪表板登录你的应用。

logto-enterprise-saml-sso.png

详细指南请访问官方文档:企业 SSO 文档

结束语

SAML 提供了一个标准化、安全的 SSO 方法,使身份验证更加顺畅。Logto 简化了设置 IdP 或 SP 的流程。凭借其用户友好的界面和对 开源版本的支持,Logto 消除了 SAML 集成的复杂性。只需配置一些参数,你就可以将服务连接到任何 SAML IdP 或 SP,专注于为用户构建出色的体验。