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 アプリケーションでデフォルトで取得する基本機能は次のとおりです。
メモリ内ストアと生成されたパスワードを持つ単一のユーザーを持つ
UserDetailsService(Javadoc) (WebFlux アプリケーションの場合はReactiveUserDetailsService(Javadoc) ) Bean (ユーザーのプロパティについてはSecurityProperties.User(Javadoc) を参照)。アプリケーション全体(アクチュエーターがクラスパス上にある場合はアクチュエーターエンドポイントを含む)に対するフォームベースのログインまたは HTTP Basic セキュリティ(リクエストの
Acceptヘッダーに依存)。認証イベントを公開するための
DefaultAuthenticationEventPublisher(Javadoc) 。
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-clientspring-security-oauth2-resource-serverspring-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-clientspring-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" セクションを参照してください。