簡體   English   中英

具有彈簧安全性的外部SSO

[英]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。 實施getPreAuthenticatedPrincipalgetPreAuthenticatedCredentials以從SSO系統中提取經過身份驗證的用戶和可選憑據(例如證書)。 為此過濾器bean創建一個FilterRegistrationBean ,否則,由於spring boot的組件掃描,它將最終進入主過濾器鏈以及安全過濾器鏈。

創建實現AuthenticationUserDetailsService<PreAuthenticatedAuthenticationToken>的用戶詳細信息(授權)服務bean。 覆蓋loadUserDetails以獲取經過身份驗證的令牌,並使用它以GrantedAuthority列表的形式添加權限。

WebSecurityConfigurerAdapter bean子類中,執行以下操作:

  1. 注入AbstractPreAuthenticatedProcessingFilter的子類以及AuthenticationUserDetailsService的子類。

  2. 添加類型為PreAuthenticatedAuthenticationProvider的類成員,並使用new (它不是bean)初始化它。

  3. configure(HttpSecurity)使用身份驗證管理器初始化過濾器bean: yourBean.setAuthenticationManager(authenticationManager())然后確保包含過濾器:

http.addFilter(yourBean)
  .authorizeRequests()
    .requestMatchers(...)
  1. 覆蓋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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM