首頁  >  文章  >  Java  >  Spring Security 的身份驗證和授權流程是如何運作的?

Spring Security 的身份驗證和授權流程是如何運作的?

WBOY
WBOY原創
2024-04-17 16:33:01591瀏覽

Spring Security 提供身份驗證和授權機制,包括:身份驗證:使用身份驗證提供者檢查使用者憑證的有效性,例如使用使用者名稱和密碼或 LDAP 認證。授權:使用存取決策管理器比較使用者權限和請求的 URL,基於存取決策確定是否授予存取權限,例如 AffirmativeBased(任何匹配的角色即可允許存取)或 ConsensusBased(所有匹配的角色才能允許存取)。實戰案例:RBAC(基於角色的存取控制):使用 UserDetailsS​​ervice 定義角色,使用 RoleHierarchyVoter 建立角色層次結構,並使用 AffirmativeBased 存取決策管理員進行授權。

Spring Security 的身份验证和授权流程是如何工作的?

Spring Security 的身份驗證和授權流程

#Spring Security 透過驗證提供者進行驗證,如:

  • UsernamePasswordAuthenticationProvider(使用使用者名稱和密碼驗證)
  • UserDetailsS​​ervice(使用自訂邏輯驗證使用者)
  • LDAPAuthenticationProvider(透過LDAP 驗證)
  1. 用戶端向認證伺服器發送認證請求,其中包含使用者名稱和密碼。
  2. 認證伺服器將憑證交給相關的驗證提供者。
  3. 驗證提供者檢查憑證的有效性並傳回一個經過驗證的 UserDetails 物件。

授權

在成功身份驗證後,Spring Security 透過存取決策管理員進行授權,它包括:

  • AccessDecisionManager(確定是否授予存取權限)
  • AffirmativeBased(任何一個Role 匹配即可允許存取)
  • ConsensusBased(所有Role 匹配才能允許存取)

#授權流程:

  1. 認證伺服器擷取UserDetails 物件中的權限。
  2. 存取決策管理員比較使用者權限和請求的 URL。
  3. 基於存取決策,決定是否授予存取權限。

實戰案例:基於角色的存取控制

在角色為基礎的存取控制(RBAC) 場景中,可以執行下列步驟來使用Spring Security 進行授權:

  • 定義一個UserDetailsS​​ervice,該服務在給定使用者名稱後傳回具有適當角色的UserDetails。
  • 配置 RoleHierarchyVoter 以建立角色層次結構。
  • 設定 AffirmativeBased 存取決策管理員。

配置

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) {
        auth.userDetailsService(userDetailsService());
    }

    @Override
    protected void configure(HttpSecurity http) {
        http.authorizeRequests()
                .antMatchers("/admin/**").hasRole("ROLE_ADMIN")
                .antMatchers("/user/**").hasRole("ROLE_USER")
                .anyRequest().permitAll();
    }

}

UserDetailsS​​ervice

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) {
        User user = userRepository.findByUsername(username);
        return new UserDetailsAdapter(user);
    }

}

UserDetailsAdapter

#
public class UserDetailsAdapter implements UserDetails {

    private final User user;

    public UserDetailsAdapter(User user) {
        this.user = user;
    }

    // ... UserDetails implementation methods ...

}

以上是Spring Security 的身份驗證和授權流程是如何運作的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn