2017-08-09 52 views
0

我們維持從安全角度來看多WebSeciurityConfig

1. SAML based spring security 
2. Spring and JDBC based application security. 

我們的應用程序的兩個版本作爲我們的一些客戶已經有SAML IDP(如ADFS和GLUU),他們希望我們能夠爲SSO整合有些客戶沒有SAML IDP。

有兩種配置可以共存的方式,並且基於使用應用程序的客戶,安全性強加給用戶。

對於前:如果請求來爲客戶a.myserverhost.com基於SAML的安全配置被罰款。如果請求是形式b.myserverhost.com其他webSeciurityConfig強加

回答

2

,這一切都是可能的。我建議實施你自己的AuthenticationManager,它管理多個AuthenticationProvider(如SAML,JDBC)。

這就是您可以根據特定條件插入您的條件邏輯以選擇正確的提供者的地方。

有關靈感,請參閱默認實現ProviderManager

開箱即用的ProviderManager將遍歷所有AuthenticationProviders並嘗試驗證用戶。如果它沒有找到用戶,它會轉到下一個。如果這就是你需要的一切,那麼你不需要任何自定義實現。

+0

感謝您的回答,它幫助我找到靈感,會盡力實施。 我相信在檢查URL後,我會使用「auth.authenticationProvider(samlAuthenticationProvider())」調用正確的身份驗證提供程序;「在websecurityconfig的配置方法中 – Count

+0

該方法是AuthenticationManagerBuilder的一部分,您可以在其中註冊AuthenticationProviders。這不是你定義條件邏輯的地方。您需要通過調用相同的方法兩次註冊兩個提供者,authenticationProvider(saml())和authenticationProvider(jdbc())。然後在你的CustomAuthenticationManager中實現authenticate()方法,這就是你定義你的條件邏輯的地方。就像我之前提到的那樣,默認實現ProviderManager將迭代每個AuthenticationProvider,直到返回成功的身份驗證 –

+0

^如果這足以滿足您的用例,那麼您根本不需要打擾自定義實現。 –