如何为多租户Web应用程序应用Spring安全性? 我的Web应用程序必须支持多租户,即http://:/ springapp / appollo ---使用ldap进行身份验证 http://:/ springapp / fortis ----使用本地数据库进行身份验证 http://:/ springapp / manipal ---使用誓言进行身份验证
我如何应用Spring安全性以便支持所有租户
答案 0 :(得分:0)
虽然这不是一个简单的案例,但看起来可能微不足道......
基本上,您需要做的就是在您的webapp中创建一个(Spring)Filter
,它将捕获所有请求,并且通过引用者的子域,它将决定使用哪种身份验证方法(它可以通过DB中的一个简单表来实现,它将子域映射到枚举,例如'oAuth','SAML','local'等。此过滤器应放在之前任何其他身份验证过滤器,正如我所说,它将在技术上决定使用哪种auth方法。
我不得不解决这种情况,而且据我所知,最好的解决方案是支持一种身份验证方法,然后根据需要创建与其他身份验证方法的“桥梁”。例如,主要的身份验证方法是oAuth2.0。然后,在需要其他类型的身份验证的情况下,您可以为其他机制创建“适配器”或“网桥”。因此,如果您需要支持用于cusomerB的LocalDB和用于customerC的AD,那么您可以从oAuth调整到localDB或AD。在我的情况下,我必须支持SAML,所以I've created a bridge from oAuth to SAML,因为同一个Spring-app支持oAuth和SAML并非易事。 (我认为,支持来自oAuth的AD和LocalDB要容易得多。)
怎么回事?您将本地数据库包装为oAuth提供程序,因此您的应用程序将连接到它。和你的AD连接器相同。您必须解析用户输入的URL,然后获得“租户”。然后转到您的数据库,从租户映射到所需的身份验证机制,您知道要使用什么“桥梁”。
HTH。