ホームページ  >  記事  >  Java  >  Spring Security の認証および認可プロセスはどのように機能しますか?

Spring Security の認証および認可プロセスはどのように機能しますか?

WBOY
WBOYオリジナル
2024-04-17 16:33:01632ブラウズ

Spring Security は、次のような認証および認可メカニズムを提供します。 認証: ユーザー名とパスワード、または LDAP 認証の使用など、認証プロバイダーを使用してユーザー資格情報の有効性を確認します。認可: アクセス決定マネージャーを使用してユーザー権限と要求された URL を比較し、AffirmativeBased (一致するロールがアクセスを許可する) または ConsensusBased (一致するロールがすべてアクセスを許可する) などのアクセス決定に基づいてアクセスを許可するかどうかを決定します。実際のケース: RBAC (ロールベースのアクセス制御): UserDetailsS​​ervice を使用してロールを定義し、RoleHierarchyVoter を使用してロール階層を確立し、AffirmativeBased を使用して承認のために意思決定マネージャーにアクセスします。

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

#Spring Security の認証と認可のプロセス

認証

Spring Security は次の方法で認証します。認証プロバイダー (例:

    UsernamePasswordAuthenticationProvider (ユーザー名とパスワードを使用して認証)
  • UserDetailsS​​ervice (カスタム ロジックを使用してユーザーを認証)
  • LDAPAuthenticationProvider (LDAP 認証経由)
    クライアントは、ユーザー名とパスワードを含む認証リクエストを認証サーバーに送信します。
  1. 認証サーバーは、資格情報を関連する認証プロバイダーに渡します。
  2. 認証プロバイダーは資格情報の有効性を確認し、認証された UserDetails オブジェクトを返します。

認可

認証が成功した後、Spring Security はアクセス決定マネージャーを介して認可します。これには次のものが含まれます。

    AccessDecisionManager (決定アクセス許可が付与されているかどうか)
  • AffirmativeBased (アクセスを許可するために一致するロール)
  • ConsensusBased (アクセスを許可するためにすべてのロールが一致)
承認プロセス:

    認証サーバーは、UserDetails オブジェクト内の権限を取得します。
  1. Access Decision Manager は、ユーザー権限と要求された URL を比較します。
  2. アクセス決定に基づいて、アクセス許可を与えるかどうかを決定します。

実践的なケース: ロールベースのアクセス制御

ロールベースのアクセス制御 (RBAC) シナリオでは、次の手順を実行して Spring を使用できます。セキュリティ認証:

    ユーザー名が指定された適切なロールを持つ UserDetails を返す UserDetailsS​​ervice を定義します。
  • RoleHierarchyVoter を構成してロール階層を確立します。
  • AffirmativeBased Access Decision Manager を構成します。

構成

@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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。