Spring Security

Spring Security がクラスパス上にある場合、Web アプリケーションはデフォルトでセキュリティ保護されます。これには、Spring Boot の /error エンドポイントのセキュリティ保護も含まれます。Spring Boot は、Spring Security のコンテンツネゴシエーション戦略に基づいて、httpBasic と formLogin のどちらを使用するかを決定します。Web アプリケーションにメソッドレベルのセキュリティを追加するには、必要な設定で @EnableMethodSecurity (Javadoc) を追加することもできます。詳細については、Spring Security リファレンスガイドを参照してください。

デフォルトの UserDetailsService (Javadoc) には 1 人のユーザーがいます。ユーザー名は user で、パスワードはランダムであり、次の例に示すように、アプリケーションの起動時に WARN レベルで出力されます。

Using generated security password: 78fa095d-3f4c-48b1-ad50-e24c31d5cf35

This generated password is for development use only. Your security configuration must be updated before running your application in production.
ロギング構成を微調整する場合は、org.springframework.boot.security.autoconfigure カテゴリが WARN -level メッセージを記録するように設定されていることを確認してください。それ以外の場合、デフォルトのパスワードは出力されません。

spring.security.user.name および spring.security.user.password を提供することにより、ユーザー名とパスワードを変更できます。

Web アプリケーションでデフォルトで取得する基本機能は次のとおりです。

Bean を追加することで、別の AuthenticationEventPublisher (Javadoc) を提供できます。

MVC セキュリティ

デフォルトのセキュリティ構成は、SecurityAutoConfiguration (Javadoc) および UserDetailsServiceAutoConfiguration (Javadoc) に実装されています。SecurityAutoConfiguration (Javadoc) は、Web セキュリティ用に SpringBootWebSecurityConfiguration をインポートし、認証用に UserDetailsServiceAutoConfiguration (Javadoc) をインポートします。

アクチュエーターセキュリティを含むデフォルトの Web アプリケーションセキュリティ構成を完全にオフにしたり、OAuth2 クライアントやリソースサーバーなどの複数の Spring Security コンポーネントを組み合わせたりするには、型 SecurityFilterChain (Javadoc) の Bean を追加します (これにより、UserDetailsService (Javadoc) 構成が無効になることはありません)。UserDetailsService (Javadoc) 構成もオフにするには、型 UserDetailsService (Javadoc) AuthenticationProvider (Javadoc) 、または AuthenticationManager (Javadoc) の Bean を追加します。

次の Spring Security モジュールのいずれかがクラスパス上にある場合、UserDetailsService (Javadoc) の自動構成もバックオフされます。

  • spring-security-oauth2-client

  • spring-security-oauth2-resource-server

  • spring-security-saml2-service-provider

これらの依存関係の 1 つ以上に加えて UserDetailsService (Javadoc) を使用するには、独自の InMemoryUserDetailsManager (Javadoc) Bean を定義します。

アクセスルールは、カスタム SecurityFilterChain (Javadoc) Bean を追加することでオーバーライドできます。Spring Boot は、アクチュエーターエンドポイントと静的リソースのアクセスルールをオーバーライドするために使用できる便利なメソッドを提供します。EndpointRequest (Javadoc) を使用すると、management.endpoints.web.base-path プロパティに基づく RequestMatcher (Javadoc) を作成できます。PathRequest (Javadoc) を使用すると、よく使用される場所のリソースの RequestMatcher (Javadoc) を作成できます。

WebFlux セキュリティ

Spring MVC アプリケーションと同様に、spring-boot-starter-security 依存関係を追加することで、WebFlux アプリケーションを保護できます。デフォルトのセキュリティ構成は、ReactiveWebSecurityAutoConfiguration (Javadoc) ReactiveUserDetailsServiceAutoConfiguration (Javadoc) に実装されています。リアクティブ Web アプリケーションに加えて、後者は RSocket の使用時に自動構成されます。ReactiveWebSecurityAutoConfiguration (Javadoc) は Web セキュリティのために WebFluxSecurityConfiguration をインポートします。ReactiveUserDetailsServiceAutoConfiguration (Javadoc) は認証を自動構成します。

アクチュエーターセキュリティを含むデフォルトの Web アプリケーションセキュリティ構成を完全にオフにするには、型 WebFilterChainProxy (Javadoc) の Bean を追加します (これにより、ReactiveUserDetailsService (Javadoc) 構成が無効になることはありません)。ReactiveUserDetailsService (Javadoc) 構成もオフにするには、型 ReactiveUserDetailsService (Javadoc) または ReactiveAuthenticationManager (Javadoc) の Bean を追加します。

次の Spring Security モジュールのいずれかがクラスパス上にある場合も、自動構成はバックオフされます。

  • spring-security-oauth2-client

  • spring-security-oauth2-resource-server

これらの依存関係の 1 つ以上に加えて ReactiveUserDetailsService (Javadoc) を使用するには、独自の MapReactiveUserDetailsService (Javadoc) Bean を定義します。

アクセスルールと、OAuth 2 クライアントやリソースサーバーなどの複数の Spring Security コンポーネントの使用は、カスタム SecurityWebFilterChain (Javadoc) Bean を追加することで構成できます。Spring Boot は、アクチュエーターエンドポイントと静的リソースのアクセスルールをオーバーライドするために使用できる便利なメソッドを提供します。EndpointRequest (Javadoc) を使用すると、management.endpoints.web.base-path プロパティに基づく ServerWebExchangeMatcher (Javadoc) を作成できます。

PathRequest (Javadoc) は、よく使用される場所にあるリソースの ServerWebExchangeMatcher (Javadoc) を作成するために使用できます。

例: 次のようなものを追加して、セキュリティ構成をカスタマイズできます。

import org.springframework.boot.security.autoconfigure.web.reactive.PathRequest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;

import static org.springframework.security.config.Customizer.withDefaults;

@Configuration(proxyBeanMethods = false)
public class MyWebFluxSecurityConfiguration {

	@Bean
	public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
		http.authorizeExchange((exchange) -> {
			exchange.matchers(PathRequest.toStaticResources().atCommonLocations()).permitAll();
			exchange.pathMatchers("/foo", "/bar").authenticated();
		});
		http.formLogin(withDefaults());
		return http.build();
	}

}

OAuth2

OAuth2 (英語) は広く利用されている認証フレームワークです。Web アプリケーションで OAuth2 を設定および使用する方法の詳細については、「セキュリティ」セクションの "OAuth2" セクションを参照してください。

SAML 2.0

SAML v2.0 (英語) は、オンラインビジネスパートナー間でセキュリティ情報を交換するための広く採用されているフレームワークです。Web アプリケーションで SAML 2.0 を設定および使用する方法の詳細については、「セキュリティ」セクションの "SAML 2.0" セクションを参照してください。