将 OIDC IDP 插入现有 SP SAML 连接
Insert OIDC IDP into existing SP SAML connection
目前我有一个依赖 SAML 身份提供者的 SP。它还支持用户直接登录SP。用户可以直接登录,也可以从 SP 开始,然后重定向到 SAML 身份提供者进行身份验证。
我计划将 SP 转换为使用 OIDC 和 IdSrv4,并且根本没有 SP 管理的凭据。我仍然希望支持 SAML 提供商,但最好通过新的 OIDC IdP。将这个新的 OIDC IdP 添加到 SAML 流中的正确方法是什么?我:
- 让 SP 和 SAML 进行通信,然后将 SAML 响应传递给 IdP 进行翻译(这似乎不正确并且容易被滥用)
- 让 SP 重定向到 OIDC IdP,并了解一些上下文以转到 SAML。然后 OIDC IdP 处理 SAML 响应并通过常规 OIDC 流到达 SP。
- 告诉 IdP 在某些上下文中使用(重定向到)某个 SAML IdP 并在其他上下文中提示 OIDC IdP 凭据的最佳做法是什么?
- 让 SP 使用 SAML IdP,同时让它使用 OIDC IdP?
- 还有别的吗?
问题 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的身份提供者,即零密码认证和授权系统 可以为任何配备 SAML SP、OIDC RP、OAuth RP 或 WS-Fed RP 的 Web 应用程序提供身份 authentication/federation。
(2) 依赖方Web应用可以配备OIDC RP(依赖方)和SAML SP(服务提供者) 同时支持 OIDC 和 SAML 协议。
例如,作为依赖方 Web 应用程序,Openstack 可以配置为 SAML SP 或 OIDC RP,以分别与 SAML IdP 或 OIDC IdP 通信。
官方Openstack link Configuring Keystone for Federation提供了如何将Openstack配置为SAML SP或OIDC RP的说明。
问题 4:
还有别的吗?
分辨率:
您的 Web 应用程序登录页面可以提供两个按钮,分别用于 OIDC 登录 和 SAML 登录。
(1) 单击 OIDC 登录 按钮将用户重定向到您的身份提供商的 OIDC API。
您的身份提供者的 OIDC API 将要求用户提交他们的身份验证凭证,例如 username/password.
一旦用户通过身份验证,用户将被重定向回您的 Web 应用程序的 OIDC API。
最终用户将登录到您的网络应用程序。
(2) 单击 SAML 登录 按钮将用户重定向到您的身份提供商的 SAML API。
您的身份提供者的 SAML API 将要求用户提交他们的身份验证凭据,例如 username/password。
一旦用户通过身份验证,用户将被重定向回您的网络应用程序的 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 Grants and RFC 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)来验证 username/password 凭据。
(II) OIDC RP 与 OIDC IdP 通信,SAML SP 与 SAML IdP 通信。
(3) 问题 4 的决议描述了另一种具有成本效益的解决方案。
您的身份提供商同时实施 OIDC IdP API 和 **SAML IdP API”以分别与 OIDC RP 和 SAML SP 通信。
目前我有一个依赖 SAML 身份提供者的 SP。它还支持用户直接登录SP。用户可以直接登录,也可以从 SP 开始,然后重定向到 SAML 身份提供者进行身份验证。
我计划将 SP 转换为使用 OIDC 和 IdSrv4,并且根本没有 SP 管理的凭据。我仍然希望支持 SAML 提供商,但最好通过新的 OIDC IdP。将这个新的 OIDC IdP 添加到 SAML 流中的正确方法是什么?我:
- 让 SP 和 SAML 进行通信,然后将 SAML 响应传递给 IdP 进行翻译(这似乎不正确并且容易被滥用)
- 让 SP 重定向到 OIDC IdP,并了解一些上下文以转到 SAML。然后 OIDC IdP 处理 SAML 响应并通过常规 OIDC 流到达 SP。
- 告诉 IdP 在某些上下文中使用(重定向到)某个 SAML IdP 并在其他上下文中提示 OIDC IdP 凭据的最佳做法是什么?
- 让 SP 使用 SAML IdP,同时让它使用 OIDC IdP?
- 还有别的吗?
问题 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的身份提供者,即零密码认证和授权系统 可以为任何配备 SAML SP、OIDC RP、OAuth RP 或 WS-Fed RP 的 Web 应用程序提供身份 authentication/federation。
(2) 依赖方Web应用可以配备OIDC RP(依赖方)和SAML SP(服务提供者) 同时支持 OIDC 和 SAML 协议。
例如,作为依赖方 Web 应用程序,Openstack 可以配置为 SAML SP 或 OIDC RP,以分别与 SAML IdP 或 OIDC IdP 通信。
官方Openstack link Configuring Keystone for Federation提供了如何将Openstack配置为SAML SP或OIDC RP的说明。
问题 4:
还有别的吗?
分辨率:
您的 Web 应用程序登录页面可以提供两个按钮,分别用于 OIDC 登录 和 SAML 登录。
(1) 单击 OIDC 登录 按钮将用户重定向到您的身份提供商的 OIDC API。
您的身份提供者的 OIDC API 将要求用户提交他们的身份验证凭证,例如 username/password.
一旦用户通过身份验证,用户将被重定向回您的 Web 应用程序的 OIDC API。
最终用户将登录到您的网络应用程序。
(2) 单击 SAML 登录 按钮将用户重定向到您的身份提供商的 SAML API。
您的身份提供者的 SAML API 将要求用户提交他们的身份验证凭据,例如 username/password。
一旦用户通过身份验证,用户将被重定向回您的网络应用程序的 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 Grants and RFC 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)来验证 username/password 凭据。
(II) OIDC RP 与 OIDC IdP 通信,SAML SP 与 SAML IdP 通信。
(3) 问题 4 的决议描述了另一种具有成本效益的解决方案。
您的身份提供商同时实施 OIDC IdP API 和 **SAML IdP API”以分别与 OIDC RP 和 SAML SP 通信。