跳到主要内容

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 的登录(SP 发起的登录)。

SAML 插件的关键特性

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

配置详情

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 的“Location”值。
(请参见此表下方的注释。)
发行者Isser 是:
- 身份提供者的唯一标识符。
- 包含在身份验证令牌或声明中,以指定验证用户身份的权威。
Realm 的客户端 ID。
客户端签名Client Signature 是由客户端(客户或应用程序)创建的数字签名。客户端签名通常用于:

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

此签名通常使用客户端的私钥创建,然后由服务器使用相应的公钥进行验证以确保有效性。
步骤 1:从此链接获取客户端签名:https://www.notion.so/Certificates-f0e62572160243ce800473766d1e7a08?pvs=4
步骤 2:从控制台导出证书
步骤 3:打开 keycloak 并选择 Realm。
步骤 4:在左侧菜单中单击“客户端”。
步骤 5:选择“密钥”选项卡。
步骤 6:切换“客户端签名必需”= 开启以打开“启用客户端签名必需?”弹出窗口。
步骤 7:导入步骤 2 中导出的文件。
IDP 证书IDP Certificate (身份提供者证书)是由身份提供者(IdP)签发的数字证书,用于在 IdP 与应用程序或服务之间的身份验证过程中进行安全和身份验证。
The IDP Certificate 包含一个公钥,允许接收方验证来自 IdP 的消息的真实性。
步骤 1:打开 keycloak。
步骤 2:选择 Realm。
步骤 3:在左侧菜单中单击“Realm 设置”。
步骤 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 并选择 Realm。
步骤 4:在左侧菜单中单击“客户端”。
步骤 5:选择“密钥”选项卡。
步骤 6:切换“加密声明”= 开启以打开“启用客户端签名必需?”弹出窗口。
步骤 7:导入步骤 2 中导出的文件。
Redis 主机Redis Host 是应用程序需要连接的 Redis 服务器的地址,以便从缓存中存储和检索数据。用户定义
Redis 端口Redis 端口是 Redis 服务器用于监听和接收来自客户端的连接的网络端口。用户定义
前端 URL这是用户在浏览器中打开应用程序时使用的地址。用户定义
允许的头Allow Headers 是服务器允许浏览器在向该服务器发送请求时使用的 HTTP 头。用户定义
执行路径URL 必须包含此路径以应用身份验证。用户定义

注意:

  • 仅在 Client Signature 设置为开启时,文本框是必需的。
  • 仅在 Encryption cert id 文本框设置为开启时,Encrypt assertions 文本框是必需的。