如何在多租户环境中自动选择已配置的SAML身份提供程序以使用Spring SAML执行SSO

Mar*_*sel 6 spring-security spring-saml

我在多租户应用程序中使用Spring SAML来提供SSO.不同的租户使用不同的URL来访问应用程序,并且每个租户都配置了单独的身份提供程序.在给定用于访问应用程序的URL的情况下,如何自动分配正确的身份提供者?

例:

租户1:http://tenant1.myapp.com

租户2:http://tenant2.myapp.com

我看到我可以在url(http://tenant1.myapp.com?idp=my.idp.entityid.com)中添加参数idp,SAMLContextProvider将选择具有该实体ID的身份提供者.我开发了一个数据库支持的MetadataProvider,它将租户主机名作为初始化参数,从该主机中获取链接到该主机名的数据库的元数据.现在我想我需要一些方法来迭代元数据提供程序,以将元数据的entityId链接到主机名.但是,我不知道如何获取元数据的entityId.这将解决我的问题.

Vla*_*fer 7

您可以看到如何从MetadataProviderin方法中解析可用的entityID MetadataManager#parseProvider.请注意,通常每个提供商都可以提供多个IDP和SP定义,而不仅仅是一个.

或者,您可以ExtendedMetadataDelegate使用您自己的类进一步扩展,包括您希望的任何其他元数据(如entityId),然后只需重新键入MetadataProvider您的自定义类,并通过迭代数据从那里获取信息MetadataManager.

如果我是你,我会采取一些不同的方法.我会扩展SAMLContextProviderImpl,覆盖方法populatePeerEntityId并执行主机名/ IDP的所有匹配.有关详细信息,请参阅原始方法

  • 我创建了自己的SAMLContextProvider并覆盖了populatePeerIdentityId.这很有效.完成后,我意识到SAMLContextProvider仅在SP发起的SSO期间使用.我们大多使用IDP发起的SSO,所以我也需要覆盖它.我最终检查传入消息的peerEntityID与我在自定义SAMLAuthenticationProvider中为该租户配置的IDP entityID. (3认同)