【问题标题】:Insert OIDC IDP into existing SP SAML connection将 OIDC IDP 插入现有的 SP SAML 连接
【发布时间】:2020-02-21 04:09:48
【问题描述】:

目前我有一个依赖于 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. 还有别的吗?

【问题讨论】:

  • 我已更新我的答案以解决您的所有四 (4) 个问题。

标签: oauth identityserver4 saml openid-connect


【解决方案1】:

问题 1

让 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协议。

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

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

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

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

问题 4

还有什么?

分辨率

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

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

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

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

最终用户将登录到您的网络应用程序。

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

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

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

最终用户将登录到您的网络应用程序。

后续问题

我想要做的是让 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 身份验证请求

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

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

RFC 7521 Assertion Framework for OAuth 2.0 Client Authentication and Authorization GrantsRFC 7522 Security Assertion Markup Language (SAML) 2.0 Profile for OAuth 2.0 Client Authentication and Authorization Grants 支持带有授权授予流程的 SAML 2 承载配置文件。

Microfocus 在Exchange SAML 2 Assertion with OAuth Access Token 上提供说明。

WSO2 还提供了关于Exchanging SAML2 Bearer Tokens with OAuth2 - SAML Extension Grant Type 的指令。

(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 进行通信。

【讨论】:

  • 谢谢。我想要做的是让 OIDC IdP 成为 SAML 提供商的 SP,这样我的所有 OIDC RP 都不必是 SAML SP。有没有常见的处理方法?
  • 我知道 OIDC 和 SAML 是不同的协议,最后我尽量不让我的客户端应用程序 (RP) 依赖 SAML。但是,如果 IdP 可以根据该身份验证响应发出 SAML 请求,那么 OIDC 似乎可以提供 OIDC 身份验证响应。感谢您的精彩解释。
  • 我已更新我的答案以解决您的两 (2) 个后续问题/cmets。
猜你喜欢
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多