[英]External SSO with spring security
我正在開發一個需要集成專有SSO和彈簧安全性的應用程序。 該應用程序使用spring boot,要求是我們使用內部專有SSO模塊的身份驗證和現有應用程序的授權。 現有應用程序的身份驗證系統必須替換為內部專有SSO的身份驗證模塊。 我瀏覽了一些文檔,並了解彈簧是基於模塊的。
在處理應用程序時,我注意到我們正在使用FilterRegistrationBean來初始化一個過濾器,並通過WebSecurityConfigurerAdapter的configure(HttpSecurity http)方法將另一個過濾器添加到鏈中。
有人可以告訴我這是否會被視為兩個不同的鏈條? 如果是這樣,檢查鏈是如何篩選出細節的?
我可以通過WebSecurityConfigurerAdapter的configure(HttpSecurity http)方法刪除我們添加的過濾器,並將通過FilterRegistrationBean注冊的現有過濾器替換為內部專有SSO的過濾器(具有最高優先級)嗎?
好的,所以我們在我們的一個系統中完全按照您的要求行事。 我們在Spring boot 1和2中使用它。這些是要采取的步驟。
創建一個擴展AbstractPreAuthenticatedProcessingFilter
的bean。 實施getPreAuthenticatedPrincipal
和getPreAuthenticatedCredentials
以從SSO系統中提取經過身份驗證的用戶和可選憑據(例如證書)。 為此過濾器bean創建一個FilterRegistrationBean
,否則,由於spring boot的組件掃描,它將最終進入主過濾器鏈以及安全過濾器鏈。
創建實現AuthenticationUserDetailsService<PreAuthenticatedAuthenticationToken>
的用戶詳細信息(授權)服務bean。 覆蓋loadUserDetails
以獲取經過身份驗證的令牌,並使用它以GrantedAuthority
列表的形式添加權限。
在WebSecurityConfigurerAdapter
bean子類中,執行以下操作:
注入AbstractPreAuthenticatedProcessingFilter
的子類以及AuthenticationUserDetailsService
的子類。
添加類型為PreAuthenticatedAuthenticationProvider
的類成員,並使用new
(它不是bean)初始化它。
在configure(HttpSecurity)
使用身份驗證管理器初始化過濾器bean: yourBean.setAuthenticationManager(authenticationManager())
然后確保包含過濾器:
http.addFilter(yourBean)
.authorizeRequests()
.requestMatchers(...)
configure(AuthenticationManagerBuilder)
並使用您的身份驗證和授權bean的實現初始化您在步驟(2)中創建的PreAuthenticatedAuthenticationProvider
。 this.preAuthProvider.setPreAuthenticatedUserDetailsService(this.userDetailsService);
this.preAuthProvider.setThrowExceptionWhenTokenRejected(true);
authBuilder.authenticationProvider(this.preAuthProvider);
這應該是全部。 希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.