首页 > 解决方案 > 将 OIDC IDP 插入现有的 SP SAML 连接

问题描述

目前我有一个依赖于 SAML 身份提供者的 SP。它还支持用户直接登录到 SP。用户可以直接登录,也可以从 SP 开始并重定向到 SAML 身份提供者进行身份验证。

我计划将 SP 转换为使用 OIDC 和 IdSrv4,并且根本没有 SP 托管凭据。我仍然希望支持 SAML 提供程序,但最好通过新的 OIDC IdP。将这个新的 OIDC IdP 添加到 SAML 流中的正确方法是什么?我是否:

  1. 让 SP 和 SAML 进行通信,然后将 SAML 响应传递给 IdP 进行翻译(这似乎不正确并且容易被滥用)
  2. 让 SP 重定向到具有某些上下文的 OIDC IdP,以了解转到 SAML。然后 OIDC IdP 处理 SAML 响应并通过常规 OIDC 流到 SP。
    1. 告诉 IdP 在某些情况下使用(重定向到)某个 SAML IdP 并在其他情况下提示输入 OIDC IdP 凭据的最佳做法是什么?
  3. 让 SP 使用 SAML IdP 并让它使用 OIDC IdP?
  4. 还有什么?

标签: oauthidentityserver4samlopenid-connect

解决方案


问题一

让 SP 和 SAML 进行通信,然后将 SAML 响应传递给 IdP 进行翻译(这似乎不正确并且容易被滥用)

答案

OIDC 和 SAML 是两种不同的身份联合协议,允许第三方身份提供者为依赖方 Web 应用程序提供身份验证服务。

SAML SP 只能向 SAML IdP(身份提供者)发送 SAML 身份验证请求,因为 OIDC IdP 无法解码 SAML 身份验证请求。

问题 2:让 SP 重定向到 OIDC IdP,并知道要转到 SAML 的一些上下文。然后 OIDC IdP 处理 SAML 响应并通过常规 OIDC 流到 SP。

What is best practice to tell IdP to use (redirect to) a certain SAML IdP in certain contexts and prompting for OIDC IdP creds in other contexts?

答案

OIDC IdP 无法解码 SAML 身份验证请求,因为 OIDC 和 SAML 是两种不同的协议。

问题 3:让 SP 使用 SAML IdP 并让它使用 OIDC IdP?

答案

是的。您可以使用 SAML IdP 保留 SP,也可以部署 OIDC RP(依赖方)以使用 OIDC IdP。

(1) 身份提供者可以配备OIDC IdP(身份提供者)SAML IdP,以同时支持OIDC和SAML协议。

例如,我们开发了零密码认证和授权系统作为身份提供者,以支持 SAML、OIDC、OAuth 和 WS-Fed,即零密码认证和授权系统可以为任何 Web 应用程序提供身份认证/联合配备 SAML SP、OIDC RP、OAuth RP 或 WS-Fed RP。

(2) 依赖方 Web 应用程序可以配备OIDC RP(依赖方)SAML SP(服务提供者),以同时支持 OIDC 和 SAML 协议。

例如,作为一个依赖方 Web 应用程序,Openstack 可以配置为 SAML SP 或 OIDC RP 以分别与 SAML IdP 或 OIDC IdP 通信。

官方 Openstack 链接为联合配置 Keystone提供了有关如何将 Openstack 配置为 SAML SP 或 OIDC RP 的说明。

问题 4

还有什么?

分辨率

您的 Web 应用程序登录页面可以分别提供OIDC 登录SAML 登录两个按钮。

(1) 单击OIDC 登录按钮将用户重定向到您的身份提供者的OIDC API

您的身份提供者的 OIDC API 将要求用户提交他们的身份验证凭证,例如用户名/密码。

用户通过身份验证后,用户将被重定向回Web 应用程序的OIDC API 。

最后,用户将登录到您的 Web 应用程序。

(2) 单击SAML 登录按钮将用户重定向到您的身份提供者的SAML API

您的身份提供者的 SAML API 将要求用户提交他们的身份验证凭证,例如用户名/密码。

用户通过身份验证后,用户将被重定向回您的 Web 应用程序的SAML API

最后,用户将登录到您的 Web 应用程序。

后续问题

我想要做的是让 OIDC IdP 成为 SAML 提供商的 SP,这样我的所有 OIDC RP 都不必是 SAML SP。有没有通用的处理方法?

我试图不让我的客户端应用程序 (RP) 依赖 SAML。但是,如果 IdP 可以根据该身份验证响应发出 SAML 请求,那么 OIDC 似乎可以提供 OIDC 身份验证响应。

答案

(1)实现OIDC IdP的SAML SP特性(即,使OIDC IdP作为SAML IdP的SAML SP)是一种成本昂贵的解决方案。

(I) OIDC IdP 向 SAML IdP 发送 SAML auth 请求

(II) OIDC IdP 解码来自 SAML IdP 的 SAML 响应

(III) OIDC IdP 将 SAML 断言转换为 OIDC 令牌(即将 SAML 响应转换为 OIDC 响应可以被 OIDC RP 解码)

用于 OAuth 2.0 客户端身份验证和授权授权的 RFC 7521 断言框架和用于 OAuth 2.0 客户端身份验证和授权授权RFC 7522 安全断言标记语言 (SAML) 2.0 配置文件支持具有授权授权流程的 SAML 2 承载配置文件。

Microfocus 提供了关于Exchange SAML 2 Assertion with OAuth Access Token的说明。

WSO2 还提供了使用 OAuth2-SAML Extension Grant Type 交换 SAML2 Bearer Tokens的说明。

(2) 具有成本效益的解决方案是

(I) Web 服务器同时托管 OIDC IdP 和 SAML IdP,然后利用 HAProxy 配置 OIDC IdP 和 SAML IdP 以使用子域,例如 oidcidp.your-domain.com 和 samlidp.yourdomain.com

OIDC IdP 和 SAML IdP 可以使用相同的数据存储或数据存储库(例如 OpenLDAP)来验证用户名/密码凭证。

(II) OIDC RP与OIDC IdP通信,SAML SP与SAML IdP通信。

(3) 问题 4 的决议描述了另一种具有成本效益的解决方案。

您的身份提供者实现了OIDC IdP API和 **SAML IdP API" 以分别与 OIDC RP 和 SAML SP 通信。


推荐阅读