Spring security 在SAML中,服务提供者和实际应用程序之间如何进行通信?

Spring security 在SAML中,服务提供者和实际应用程序之间如何进行通信?,spring-security,single-sign-on,saml,spring-saml,shibboleth,Spring Security,Single Sign On,Saml,Spring Saml,Shibboleth,我知道IDP和SP之间的通信在标准中有很好的定义。我想知道在独立SP和实际应用程序之间进行自定义通信的方法是什么 我认为标准的方法是存在的,而不是重塑我自己。但即使是SpringSAML安全性也只讨论自定义机制,并没有说明它是什么 有人能给我指一下正确的方向吗?我已经搜索过了,但我感到惊讶的是,它没有写在博客、教程等任何地方。甚至在Shibboleth/Gluu文档中也没有,不知何故,这一部分被忽略了 任何帮助都将不胜感激。问题本质上归结为部署在受信任网络中的两个应用程序如何安全地相互通信,以便

我知道IDP和SP之间的通信在标准中有很好的定义。我想知道在独立SP和实际应用程序之间进行自定义通信的方法是什么

我认为标准的方法是存在的,而不是重塑我自己。但即使是SpringSAML安全性也只讨论自定义机制,并没有说明它是什么

有人能给我指一下正确的方向吗?我已经搜索过了,但我感到惊讶的是,它没有写在博客、教程等任何地方。甚至在Shibboleth/Gluu文档中也没有,不知何故,这一部分被忽略了


任何帮助都将不胜感激。

问题本质上归结为部署在受信任网络中的两个应用程序如何安全地相互通信,以便交换有关用户的安全信息。SAML为通过不受信任的网络进行通信的应用程序解决了同样的问题,而且由于身份验证点SP和应用程序都在同一实体的控制下,因此更容易使用符号加密技术。原则上,SP可以使用前端通道=通过web浏览器,或后端通道=通过网络彼此直接进行通信

使用一个、另一个或两个通道执行通信有不同的方法,大多数可以使用一些可用的安全产品来实现。以下是一些想法:

SP和应用程序都共享同一个域=用户的web浏览器通过共享cookie的URL访问它们

您可以将SP配置为存储cookie—一段信息,包括身份验证用户的UID和过期时间。可以使用SP和应用程序都知道的共享机密对cookie进行加密。这是OpenAM或Wildfly使用共享域加密cookie的方法。 这种方法的另一种选择是将经过身份验证的用户的信息从SP发送到应用程序,例如作为加密的HTTP POST参数-与SAML的方法类似,只是更基本。 同样的方法可以通过使用另一个安全共享存储(例如数据库)和只发送对记录的引用(例如唯一的秘密会话ID)来增强 SP可用作应用程序的HTTP代理

在这种情况下,您可以将身份验证信息作为HTTP头传递给应用程序,您必须确保通过SP是访问应用程序的唯一方式。这仅在SP是负载平衡器(如Apache/Nginx插件)的一部分时才可行。 SP和应用程序可以使用标准身份验证机制来传递身份验证数据

您可以使用Kerberos,它无论如何都是基于共享秘密加密或OAuth的 每个选项可能具有不同的攻击向量和可能的漏洞


我的观点是,使用支持SAML的HTTP代理或处理SP和应用程序之间最后一英里身份验证的标准产品(如OpenAM),直接将SAML功能添加到应用程序中是最好的方法。实现自定义安全机制似乎很容易,但犯错误的空间很大,这使得整个解决方案很容易受到攻击。

从纯SAML的角度来看,“实际应用程序”必须实现SAML服务提供商,例如,与Spring SAML示例应用程序一样。如果“实际应用程序”无法做到这一点,例如,因为它是一个没有扩展点的产品,您需要检查应用程序在SSO方面的功能。例如,某些应用程序允许使用自定义HTTP请求头来提供SSO。然后,您可以使用一个HTTP反向代理,该代理基于SAML断言注入该头,例如带有mod_auth_mellon的Apache HTTP服务器。@BernhardThalmayr如果我找到了IdpProxy场景的解决方案,我就不必担心这个问题了。即使是希伯利斯也没有办法做到这一点。你知道IdpProxy吗?@BernhardThalmayr是openam免费的吗?如果你从源代码构建它,它是免费的。谢谢你的回答。我的想法和前频道的想法一样,但正如你所说,这就像SAML解决的问题一样。您知道OpenAM是否支持复杂的IDP代理用例吗?像基于用户/电子邮件后缀的IDP选择?实际上,我想要实现SAML v2 IDP代理,因为没有开源解决方案,我想让SP在提供SSO的同时与多个IDP通信,如果每个应用程序都有SP,那么单点登录就不会发生,因为他们可能已经使用不同的IDP进行了身份验证,所以我需要一些中间的代理IDP。让我解释一下用例:多个用户属于外部组织,多个IDP。但是SP是一种SaaS组织的一部分,每当一个SP联系IDP时,它应该能够验证用户浏览器是否正确
ady通过中间IDP进行身份验证。我认为这个链接将更清楚地描述:OpenAM可以充当IDP代理,是的,它有可能根据一系列标准定义要连接到哪个IDP,但是使用OpenAM产品启用这些用例是很困难的。这是一个非常复杂的老产品,你可能需要专门的咨询。您的需求更接近于企业单点登录—来自开源Gluu的可能能够满足这一需求,而CAS可能会更好。即使Gluu也只有基于SP的IDP选择,因为我需要基于用户的选择。格鲁建议反对CAS。谢谢你的帮助。从商业上看,我知道www.efecte.com上的IDM可以很好地做到这一点——好吧,我实现了它:但最简单的方法是——如果没有一款产品完全满足您的需要,或者没有预算——最有可能定制Spring SAML。