跳到主要内容

SAML

概述

SAML (Security Assertion Markup Language) 是一种开放标准,促进不同方之间的身份验证和授权。它通常用于 Single Sign-On (SSO) 系统,允许用户一次登录并访问多个服务,而无需重新输入凭据。

Kong API 网关中的 SAML 插件

SAML 规范定义了三个关键角色:

  • Principal – 登录的用户。
  • Identity Provider (IdP) – 进行用户身份验证并发出身份声明的实体。
  • Service Provider (SP) – 接收身份验证声明的应用程序或系统。

Kong API Gateway 中,SAML plugin 充当 Service Provider (SP),负责启动对 IdP 的登录(服务提供者发起的登录)。

SAML 插件的关键特性

  • SSO Implementation:将未认证的用户重定向到 IdP 的登录页面,并在身份验证后授予对受保护服务的访问权限。
  • Session Management:使用 cookies 维护用户会话以跟踪会话状态。
  • Form Handling:通过 POST requests 支持 IdP authentication flow,确保身份验证参数的安全性。

配置详情

Field nameDescriptionData input
登录回调 URLLogin Callback URL 是在用户成功登录后用于处理身份验证服务器响应的 URL。系统会将他们重定向回此 URL 以继续该过程。用户定义
登出 URL当用户发出登出请求时,系统将重定向到此 URL 以:
- 结束用户会话。
- 删除身份验证会话令牌或相关会话数据。
- 确保用户已从他们登录的所有服务中登出。
用户定义
IDP URLIDP URL(身份提供者 URL)是身份验证系统中身份提供者的 URL。IDP URL 通常配置为:
- 确定用户将用于登录的身份验证服务器的地址。
- 处理身份验证请求并将用户重定向到正确的登录页面。
第 1 步:打开 keycloak。
第 2 步:选择 Realm。
第 3 步:在左侧菜单中单击“Realm 设置”。
第 4 步:在“端点”字段中,单击链接 https://keycloak-saml.apimags.skcloud.io/realms/saml-test/protocol/saml/descriptor 以重定向到文档树。
第 5 步:获取 md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect 的“位置”值。
(请参见此表下方的注释。)
IssuerIsser 是:
- 身份提供者的唯一标识符。
- 包含在身份验证令牌或声明中,以指定验证用户身份的权限。
Realm 的客户端 ID。
客户签名Client Signature 是由客户(客户或应用程序)创建的数字签名。客户签名通常用于:

- 验证请求来自有效和可信的来源。
- 保护数据在传输过程中不被更改或篡改。
- 确保客户在与身份提供者(IdP)或其他服务器交互时的真实性。

此签名通常使用客户的私钥创建,然后由服务器使用相应的公钥进行验证以确保有效性。
第一步:从此链接获取客户签名:https://www.notion.so/Certificates-f0e62572160243ce800473766d1e7a08?pvs=4
第二步:从控制台导出证书
第三步:打开 Keycloak 并选择领域。
第四步:在左侧菜单中点击“客户端”。
第五步:选择“密钥”选项卡。
第六步:切换“客户端签名必需” = 开启,以打开“启用客户端签名必需?”弹出窗口。
第七步:导入在第二步中导出的文件。
IDP 证书IDP Certificate (身份提供者证书) 是由身份提供者 (IdP) 签发的数字证书,用于在 IdP 与应用程序或服务之间的身份验证过程中进行安全和身份验证。
The IDP Certificate 包含一个公钥,允许接收方验证来自 IdP 的消息的真实性
第 1 步:打开 keycloak。
第 2 步:选择领域。
第 3 步:点击左侧菜单中的“领域设置”。
第 4 步:在“端点”字段中,点击链接 https://keycloak-saml.apimags.skcloud.io/realms/saml-test/protocol/saml/descriptor 以重定向到文档树。
第 5 步:复制 ds:X509Certificate 标签中的数据。
第 6 步:将第 5 步中获得的数据粘贴到 IDP 证书字段中。
加密证书 IDIdP 使用加密证书 ID 来识别在向 SP 发送消息时正确的加密证书,从而确保在传输过程中敏感信息的安全。第 1 步:从链接获取客户端签名:https://www.notion.so/Certificates-f0e62572160243ce800473766d1e7a08?pvs=4
第 2 步:从控制台导出证书
第 3 步:打开 keycloak 并选择领域。
第 4 步:在左侧菜单中点击“客户端”。
第 5 步:选择“密钥”选项卡。
第 6 步:切换“加密声明” = 开启,以打开“是否需要客户端签名?”弹出窗口。
第 7 步:导入第 2 步中导出的文件。
Redis 主机Redis Host 是应用程序需要连接的 Redis 服务器的地址,以便从缓存中存储和检索数据。用户定义
Redis 端口Redis 端口是 Redis 服务器用于监听和接收来自客户端的连接的网络端口。用户定义
前端 URL这是用户在浏览器中打开应用程序时使用的地址。用户定义
允许的头部Allow Headers 是服务器允许浏览器在向该服务器发送请求时使用的 HTTP 头部。用户定义
执行路径URL 必须包含此路径以应用身份验证。用户定义

注意:

  • 仅当 Client Signature 设置为 ON 时,文本框才是必需的。
  • 仅当 Encrypt assertions 设置为 ON 时,Encryption cert id 文本框才是必需的。