6

我有这样的应用程序工作流程

(A) 用户代理(浏览器)<-----> (B) 应用服务器 <------> (C) REST 服务

假设应用服务器 (B) 是 SAML 服务提供商,并且 user@domain 使用 Web 浏览器 SSO 配置文件从浏览器 (A) 到应用服务器 (B) 进行身份验证。

在 (B) 上运行的应用程序如何以 user@domain.com身份向 REST 服务 (C) 进行身份验证?(假设 B 和 C 都是同一 IdP 上的 SAML SP。)

如果浏览器只是对 B 和 C 进行 AJAX 调用,那将很简单。但是如果直接从应用程序调用 REST 服务,你会怎么做?

我正在努力解决的问题:如果应用程序本身不是 SAML SP,而是与一个集成(例如,使用 Shibboleth SP 和 REMOTE_USER 标头),您的应用程序可能永远不会看到 SAML 断言。您知道用户已登录并针对 IdP 进行身份验证,但无法获取 SAML 断言以移交给后端服务。

有解决方案还是我不走运?

4

2 回答 2

1

是的,没有什么可以阻止您的应用服务器 (B) 作为服务提供者接受来自 A 的传入断言并充当身份提供者,发出自己的 SAML 票证并将其转发给 C。

如果您无权访问原始断言,则必须在 B 中发出新断言。如果您确实有权访问原始断言,则可以将其转发给 C,如果 C 配置为忽略限制断言的受众限制只对 B 有效。

于 2013-11-09T19:46:02.927 回答
1

由于您说 App Server B和 REST 服务C都是具有相同 SAML IdP 的 SAML SP,因此您必须已经有一种机制允许 Web 客户端通过SAML Web 浏览器直接(独立于B)针对C进行身份验证SSO 配置文件,对吗?当这个“登录工作流程”完成后,API 客户端有一个身份验证令牌,它表示“user@domain.com 已通过 IdP X 身份验证以使用 SP C ”这一事实,并可用于验证对C的调用一段时间(直到授权令牌过期)。

但是BC是独立的服务。并且如果他们在同一个 IdP X 上注册了不同的 SAML 服务提供者 entityID,那么 IdP X 将不会认为这些语句是等效的:

  1. user@domain.com 由 IdP X 认证以使用 SP C
  2. user@domain.com 由 IdP X 验证以使用 SP B

因此,服务B应该无法使用表示上述语句 2 的身份验证令牌(它可能从其自己的 SAML SSO 登录工作流中获得)来获取表示上述语句 1 的身份验证令牌(只能来自 SAML C的 SSO 登录工作流)。服务B也不应该在不失去对工作流的控制的情况下将 API 客户端“传递”到服务C SAML SSO 登录工作流。

另一方面,如果BC具有向 IdP 注册的相同 SAML 服务提供者 entityID,则上面的语句 1 在逻辑和安全方面等同于上面的语句 2。在这种情况下,最直接的解决方案是让服务BC使用相同的身份验证令牌系统。这实际上是唯一可行的方法,因为如果BC具有相同的 SAML SP entityID,那么 IdP 将只为BC配置一个 ACS URL ,这意味着再次就 IdP 而言它们实际上是同一个 SAML SP。

于 2015-07-27T23:10:00.073 回答