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 name | Description | Data input |
---|---|---|
登录回调 URL | Login Callback URL 是在用户成功登录后用于处理身份验证服务器响应的 URL。系统会将他们重定向回此 URL 以继续该过程。 | 用户定义 |
登出 URL | 当用户发出登出请求时,系统将重定向到此 URL 以: - 结束用户会话。 - 删除身份验证会话令牌或相关会话数据。 - 确保用户已从他们登录的所有服务中登出。 | 用户定义 |
IDP URL | IDP 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 的“位置”值。 (请参见此表下方的注释。) |
Issuer | Isser 是: - 身份提供者的唯一标识符。 - 包含在身份验证令牌或声明中,以指定验证用户身份的权限。 | 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 证书字段中。 |
加密证书 ID | IdP 使用加密证书 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 文本框才是必需的。