SAML和后端REST服务身份验证

时间:2013-11-09 19:36:00

标签: rest saml

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

(A)用户代理(浏览器)< -----> (B)App Server< ------> (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断言以切换到后端服务。

有解决方案还是我运气不好?

2 个答案:

答案 0 :(得分:1)

是的,没有什么能阻止您的App Server(B)充当服务提供商,接受来自A的传入断言并充当身份提供者,发出自己的SAML票证,然后转发给C。

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

答案 1 :(得分:0)

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

B C 是单独的服务。 如果他们有相同的IdP X注册的不同SAML服务提供商实体ID,那么IdP X将认为这些陈述是等效的:

  1. user@domain.com由IdP X进行身份验证,以使用SP C
  2. user@domain.com由IdP X进行身份验证,以使用SP B
  3. 因此服务 B 应该无法使用代表上述语句2的身份验证令牌(可以从其自己的SAML SSO登录工作流程中获取)获取保持代表上述语句1的身份验证令牌(只能来自 C 的SAML SSO登录工作流程)。服务 B 也不可能将API客户端“传递”到服务 C SAML SSO登录工作流程,而不会失去对工作流程的控制权。

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