Spring Security リファレンス

作者

Ben Alex , Luke Taylor , Rob Winch , Gunnar Hillert , Joe Grandja , Jay Bryant

5.1.13.RELEASE

このドキュメントのコピーは、あなた自身の使用および他者への配布のために作成することができますが、そのようなコピーに料金を請求しないこと、さらに、印刷物または電子的に配布されるかどうかにかかわらず、各コピーにこの著作権表示が含まれていることを条件とします。


目次

I. 序文
1. Spring Security コミュニティ
1.1. ヘルプの利用
1.2. 参加する
1.3. ソースコード
1.4. Apache 2 ライセンス
1.5. ソーシャルメディア
2. Spring Security 5.1 の新機能
2.1. サーブレット
2.2. WebFlux
2.3. 統合
3. Spring Security の入手
3.1. リリース番号
3.2. Maven での使用
3.2.1. Spring Boot と Maven
3.2.2. Spring Boot なしの Maven
3.2.3. Maven リポジトリ
3.3. Gradle
3.3.1. Spring Boot と Gradle
3.3.2. Spring Boot なしの Gradle
3.3.3. Gradle リポジトリ
4. プロジェクトモジュール
4.1. コア - spring-security-core.jar
4.2. リモーティング - spring-security-remoting.jar
4.3. Web - spring-security-web.jar
4.4. 構成 - spring-security-config.jar
4.5. LDAP - spring-security-ldap.jar
4.6. OAuth 2.0 コア -spring-security-oauth2-core.jar
4.7. OAuth 2.0 クライアント -spring-security-oauth2-client.jar
4.8. OAuth 2.0 JOSE-spring-security-oauth2-jose.jar
4.9. ACL - spring-security-acl.jar
4.10. CAS - spring-security-cas.jar
4.11. OpenID - spring-security-openid.jar
4.12. テスト - spring-security-test.jar
5. サンプルアプリケーション
5.1. チュートリアルサンプル
5.2. 連絡先
5.3. LDAP サンプル
5.4. OpenID サンプル
5.5. CAS サンプル
5.6. JAAS サンプル
5.7. 事前認証サンプル
II. サーブレットアプリケーション
6. Java 構成
6.1. Hello Web セキュリティ Java 構成
6.1.1. AbstractSecurityWebApplicationInitializer
6.1.2. Spring が存在しない AbstractSecurityWebApplicationInitializer
6.1.3. AbstractSecurityWebApplicationInitializer と Spring MVC
6.2. HttpSecurity
6.3. Java 構成とフォームログイン
6.4. リクエストを承認する
6.5. ログアウトの処理
6.5.1. LogoutHandler
6.5.2. LogoutSuccessHandler
6.5.3. その他のログアウト関連の参照
6.6. OAuth 2.0 クライアント
6.6.1. ClientRegistration
6.6.2. ClientRegistrationRepository
6.6.3. OAuth2AuthorizedClient
6.6.4. OAuth2AuthorizedClientRepository/OAuth2AuthorizedClientService
6.6.5. RegisteredOAuth2AuthorizedClient
6.6.6. AuthorizationRequestRepository
6.6.7. OAuth2AuthorizationRequestResolver
6.6.8. OAuth2AccessTokenResponseClient
6.7. OAuth 2.0 ログイン
6.7.1. Spring Boot 2.x サンプル
初期設定
リダイレクト URI の設定
application.yml を設定する
アプリケーションを起動する
6.7.2. Spring Boot 2.x プロパティマッピング
6.7.3. CommonOAuth2Provider
6.7.4. カスタムプロバイダープロパティの構成
6.7.5. Spring Boot 2.x 自動構成のオーバーライド
ClientRegistrationRepository @Bean を登録する
WebSecurityConfigurerAdapter を提供する
自動構成を完全にオーバーライドする
6.7.6. Spring Boot 2.x を使用しない Java 構成
6.7.7. 追加リソース
6.8. OAuth 2.0 リソースサーバー
6.8.1. 依存関係
6.8.2. 最小構成
認可サーバーの指定
スタートアップの期待
ランタイムの期待
6.8.3. 認可サーバー JWK セット Uri を直接指定する
6.8.4. ブート自動構成のオーバーライドまたは置換
jwkSetUri() を使用する
decoder() を使用する
JwtDecoder@Bean を公開する
6.8.5. 認可の構成
権限の手動抽出
6.8.6. 検証の構成
タイムスタンプ検証のカスタマイズ
カスタム検証ツールの構成
6.8.7. クレームセットマッピングの構成
単一クレームの変換のカスタマイズ
クレームを追加する
申し立ての削除
クレームの名前を変更する
6.8.8. タイムアウトの構成
6.9. 認証
6.9.1. インメモリ認証
6.9.2. JDBC 認証
6.9.3. LDAP 認証
6.9.4. AuthenticationProvider
6.9.5. UserDetailsService
6.10. 複数の HttpSecurity
6.11. メソッドのセキュリティ
6.11.1. EnableGlobalMethodSecurity
6.11.2. GlobalMethodSecurityConfiguration
6.12. 構成済みオブジェクトの後処理
6.13. カスタム DSL
7. セキュリティ名前空間の構成
7.1. 導入
7.1.1. 名前空間の設計
7.2. セキュリティ名前空間の構成の開始
7.2.1. web.xml の構成
7.2.2. 最小限の <http> 構成
7.2.3. フォームおよび基本ログインオプション
デフォルトのログイン後の宛先の設定
7.2.4. ログアウト処理
7.2.5. 他の認証プロバイダーの使用
パスワードエンコーダーの追加
7.3. 高度な Web 機能
7.3.1. Remember-Me 認証
7.3.2. HTTP/HTTPS チャネルセキュリティの追加
7.3.3. セッション管理
タイムアウトの検出
同時セッション制御
セッション固定攻撃保護
7.3.4. OpenID サポート
属性交換
7.3.5. レスポンスヘッダー
7.3.6. 独自のフィルターを追加する
カスタム AuthenticationEntryPoint の設定
7.4. メソッドのセキュリティ
7.4.1. <global-method-security> 要素
protect-pointcut を使用したセキュリティポイントカットの追加
7.5. デフォルトの AccessDecisionManager
7.5.1. AccessDecisionManager のカスタマイズ
7.6. 認証マネージャーと名前空間
8. アーキテクチャと実装
8.1. 技術概要
8.1.1. ランタイム環境
8.1.2. コアコンポーネント
SecurityContextHolder、SecurityContext、および認証オブジェクト
UserDetailsService
GrantedAuthority
要約
8.1.3. 認証
Spring Security の認証とは何ですか?
SecurityContextHolder のコンテンツを直接設定する
8.1.4. Web アプリケーションでの認証
ExceptionTranslationFilter
AuthenticationEntryPoint
認証メカニズム
リクエスト間の SecurityContext の保存
8.1.5. Spring Security のアクセス制御(認可)
セキュリティと AOP のアドバイス
セキュアオブジェクトと AbstractSecurityInterceptor
8.1.6. ローカライゼーション
8.2. コアサービス
8.2.1. AuthenticationManager、ProviderManager、および AuthenticationProvider
認証成功時の資格情報の消去
DaoAuthenticationProvider
8.2.2. UserDetailsService の実装
インメモリ認証
JdbcDaoImpl
8.2.3. パスワードエンコーディング
パスワード履歴
DelegatingPasswordEncoder
BCryptPasswordEncoder
Pbkdf2PasswordEncoder
SCryptPasswordEncoder
その他 PasswordEncoders
8.2.4. Jackson サポート
9. テスト
9.1. テスト方法のセキュリティ
9.1.1. セキュリティテストのセットアップ
9.1.2. @WithMockUser
9.1.3. @WithAnonymousUser
9.1.4. @WithUserDetails
9.1.5. @WithSecurityContext
9.1.6. メタアノテーションのテスト
9.2. Spring MVC テスト統合
9.2.1. MockMvc および Spring Security のセットアップ
9.2.2. SecurityMockMvcRequestPostProcessors
CSRF 保護を使用したテスト
Spring MVC テストでユーザーとしてテストを実行する
Spring MVC テストで RequestPostProcessor を使用してユーザーとして実行する
HTTP 基本認証のテスト
9.2.3. SecurityMockMvcRequestBuilders
フォームベース認証のテスト
ログアウトのテスト
9.2.4. SecurityMockMvcResultMatchers
認証されていないアサーション
認証されたアサーション
10. Web アプリケーションセキュリティ
10.1. セキュリティフィルターチェーン
10.1.1. DelegatingFilterProxy
10.1.2. FilterChainProxy
フィルターチェーンのバイパス
10.1.3. フィルターの順序
10.1.4. リクエストのマッチングと HttpFirewall
10.1.5. 他のフィルターベースフレームワークで使用
10.1.6. 高度なネームスペース設定
10.2. コアセキュリティフィルター
10.2.1. FilterSecurityInterceptor
10.2.2. ExceptionTranslationFilter
AuthenticationEntryPoint
AccessDeniedHandler
SavedRequest および RequestCache インターフェース
10.2.3. SecurityContextPersistenceFilter
SecurityContextRepository
10.2.4. UsernamePasswordAuthenticationFilter
認証の成功と失敗に関するアプリケーション Flow
10.3. サーブレット API の統合
10.3.1. Servlet 2.5+ 統合
HttpServletRequest.getRemoteUser()
HttpServletRequest.getUserPrincipal()
HttpServletRequest.isUserInRole(String)
10.3.2. Servlet 3+ 統合
HttpServletRequest.authenticate(HttpServletRequest,HttpServletResponse)
HttpServletRequest.login(String,String)
HttpServletRequest.logout()
AsyncContext.start(Runnable)
非同期サーブレットのサポート
10.3.3. Servlet 3.1+ 統合
HttpServletRequest#changeSessionId()
10.4. 基本認証およびダイジェスト認証
10.4.1. BasicAuthenticationFilter
構成
10.4.2. DigestAuthenticationFilter
構成
10.5. Remember-Me 認証
10.5.1. 概要
10.5.2. 単純なハッシュベースのトークンアプローチ
10.5.3. 永久トークンアプローチ
10.5.4. Remember-Me インターフェースと実装
TokenBasedRememberMeServices
PersistentTokenBasedRememberMeServices
10.6. クロスサイトリクエストフォージェリ (CSRF)
10.6.1. CSRF 攻撃
10.6.2. シンクロナイザートークンパターン
10.6.3. CSRF 保護を使用する場合
CSRF 保護と JSON
CSRF およびステートレスブラウザーアプリケーション
10.6.4. Spring Security CSRF 保護の使用
適切な HTTP 動詞を使用する
CSRF 保護を構成する
CSRF トークンを含める
10.6.5. CSRF に関する警告
タイムアウト
ログイン
ログアウト
マルチパート (ファイルアップロード)
HiddenHttpMethodFilter
10.6.6. デフォルトのオーバーライド
10.7. CORS
10.8. セキュリティ HTTP レスポンスヘッダー
10.8.1. デフォルトのセキュリティヘッダー
キャッシュ制御
コンテンツタイプオプション
HTTP 厳格なトランスポートセキュリティ (HSTS)
HTTP 公開キーの固定 (HPKP)
X-Frame-Options
X-XSS-Protection
コンテンツセキュリティポリシー (CSP)
リファラーポリシー
機能ポリシー
10.8.2. カスタムヘッダー
静的ヘッダー
ヘッダーライター
DelegatingRequestMatcherHeaderWriter
10.9. セッション管理
10.9.1. SessionManagementFilter
10.9.2. SessionAuthenticationStrategy
10.9.3. 並行性制御
現在認証されているユーザーとそのセッションについて SessionRegistry を照会する
10.10. 匿名認証
10.10.1. 概要
10.10.2. 構成
10.10.3. AuthenticationTrustResolver
10.11. WebSocket セキュリティ
10.11.1. WebSocket の設定
10.11.2. WebSocket 認証
10.11.3. WebSocket 認証
WebSocket 認可に関する注意
送信メッセージ
10.11.4. 同一生成元ポリシーの強制
なぜ同じ起源なのでしょうか?
Spring WebSocket 許可されたオリジン
CSRF を Stomp ヘッダーに追加する
WebSockets 内で CSRF を無効にする
10.11.5. SockJS での作業
SockJS とフレームオプション
SockJS とリラックスした CSRF
11. 認可
11.1. 認可アーキテクチャ
11.1.1. 権限
11.1.2. 呼び出し前の処理
AccessDecisionManager
投票ベースの AccessDecisionManager 実装
11.1.3. 呼び出し処理後
11.1.4. 階層的なロール
11.2. セキュアなオブジェクトの実装
11.2.1. AOP Alliance(MethodInvocation)セキュリティインターセプター
明示的な MethodSecurityInterceptor 設定
11.2.2. AspectJ(JoinPoint)セキュリティインターセプター
11.3. 式ベースのアクセス制御
11.3.1. 概要
一般的な組み込み式
11.3.2. Web セキュリティ式
Web セキュリティ式で Bean を参照する
Web セキュリティ式のパス変数
11.3.3. メソッドセキュリティ式
@Pre および @Post アノテーション
組み込み式
12. 追加のトピック
12.1. ドメインオブジェクトセキュリティ (ACL)
12.1.1. 概要
12.1.2. 主なコンセプト
12.1.3. 入門
12.2. 事前認証シナリオ
12.2.1. 事前認証フレームワーククラス
AbstractPreAuthenticatedProcessingFilter
PreAuthenticatedAuthenticationProvider
Http403ForbiddenEntryPoint
12.2.2. 具体的な実装
リクエストヘッダー認証 (Siteminder)
Java EE コンテナー認証
12.3. LDAP 認証
12.3.1. 概要
12.3.2. Spring Security での LDAP の使用
12.3.3. LDAP サーバーの構成
組み込みテストサーバーの使用
バインド認証の使用
権限の読み込み
12.3.4. 実装クラス
LdapAuthenticator の実装
LDAP サーバーへの接続
LDAP 検索オブジェクト
LdapAuthoritiesPopulator
Spring Bean の構成
LDAP 属性とカスタマイズされた UserDetails
12.3.5. Active Directory 認証
ActiveDirectoryLdapAuthenticationProvider
12.4. OAuth 2.0 ログイン  —  高度な構成
12.4.1. OAuth 2.0 ログインページ
12.4.2. リダイレクトエンドポイント
12.4.3. UserInfo エンドポイント
ユーザー権限のマッピング
カスタム OAuth2User の構成
OAuth 2.0 UserService
OpenID Connect 1.0 UserService
13. サーブレット環境用の WebClient
13.1. WebClient OAuth2 のセットアップ
13.2. 暗黙的な OAuth2AuthorizedClient
13.3. 明示的な OAuth2AuthorizedClient
13.4. clientRegistrationId
13.5. JSP タグライブラリ
13.5.1. Taglib の宣言
13.5.2. 承認タグ
テストのためのタグ認証の無効化
13.5.3. 認証タグ
13.5.4. accesscontrollist タグ
13.5.5. csrfInput タグ
13.5.6. csrfMetaTags タグ
13.6. Java 認証および認可サービス(JAAS)プロバイダー
13.6.1. 概要
13.6.2. AbstractJaasAuthenticationProvider
JAAS CallbackHandler
JAAS AuthorityGranter
13.6.3. DefaultJaasAuthenticationProvider
InMemoryConfiguration
DefaultJaasAuthenticationProvider の構成例
13.6.4. JaasAuthenticationProvider
13.6.5. サブジェクトとして実行
13.7. CAS 認証
13.7.1. 概要
13.7.2. CAS の仕組み
Spring Security と CAS 相互作用シーケンス
13.7.3. CAS クライアントの構成
サービスチケット認証
シングルログアウト
CAS を使用したステートレスサービスへの認証
代理チケット認証
13.8. X.509 認証
13.8.1. 概要
13.8.2. Web アプリケーションへの X.509 認証の追加
13.8.3. Tomcat で SSL をセットアップする
13.9. Run-As 認証の置き換え
13.9.1. 概要
13.9.2. 構成
13.10. Spring Security 暗号モジュール
13.10.1. 導入
13.10.2. 暗号化
BytesEncryptor
TextEncryptor
13.10.3. キージェネレーター
BytesKeyGenerator
StringKeyGenerator
13.10.4. パスワードエンコーディング
13.11. 並行性サポート
13.11.1. DelegatingSecurityContextRunnable
13.11.2. DelegatingSecurityContextExecutor
13.11.3. Spring Security 並行性クラス
13.12. Spring MVC 統合
13.12.1. @EnableWebMvcSecurity
13.12.2. MvcRequestMatcher
13.12.3. @AuthenticationPrincipal
13.12.4. Spring MVC 非同期統合
13.12.5. Spring MVC と CSRF の統合
自動トークンインクルージョン
CsrfToken の解決
14. Spring Data 統合
14.1. Spring Data および Spring Security の構成
14.2. @Query 内のセキュリティ表現
15. 付録
15.1. セキュリティデータベーススキーマ
15.1.1. ユーザースキーマ
Oracle データベースの場合
グループ権限
15.1.2. 永続的ログイン(Remember-Me)スキーマ
15.1.3. ACL スキーマ
HyperSQL
PostgreSQL
MySQL および MariaDB
Microsoft SQL Server
Oracle データベース
15.2. セキュリティ名前空間
15.2.1. Web アプリケーションセキュリティ
<debug>
<http>
<access-denied-handler>
<cors>
<headers>
<cache-control>
<hsts>
<hpkp>
<pins>
<pin>
<content-security-policy>
<referrer-policy>
<feature-policy>
<frame-options>
<xss-protection>
<content-type-options>
<header>
<anonymous>
<csrf>
<custom-filter>
<expression-handler>
<form-login>
<http-basic>
<http-firewall> 要素
<intercept-url>
<jee>
<logout>
<openid-login>
<attribute-exchange>
<openid-attribute>
<port-mappings>
<port-mapping>
<remember-me>
<request-cache> 要素
<session-management>
<concurrency-control>
<x509>
<filter-chain-map>
<filter-chain>
<filter-security-metadata-source>
15.2.2. WebSocket セキュリティ
<websocket-message-broker>
<intercept-message>
15.2.3. 認証サービス
<authentication-manager>
<authentication-provider>
<jdbc-user-service>
<password-encoder>
<user-service>
<user>
15.2.4. メソッドのセキュリティ
<global-method-security>
<after-invocation-provider>
<pre-post-annotation-handling>
<invocation-attribute-factory>
<post-invocation-advice>
<pre-invocation-advice>
メソッドの保護
<intercept-methods>
<method-security-metadata-source>
<protect>
15.2.5. LDAP 名前空間オプション
LDAP サーバーの定義
<ldap-authentication-provider>
<password-compare>
<ldap-user-service>
15.3. Spring Security の依存関係
15.3.1. spring-security-core
15.3.2. spring-security-remoting
15.3.3. spring-security-web
15.3.4. spring-security-ldap
15.3.5. spring-security-config
15.3.6. spring-security-acl
15.3.7. spring-security-cas
15.3.8. spring-security-openid
15.3.9. spring-security-taglibs
15.4. プロキシサーバー構成
15.5. Spring Security FAQ
15.5.1. 一般的な質問
Spring Security はすべてのアプリケーションセキュリティ要件を処理しますか?
web.xml セキュリティを使用しないのはなぜですか?
どの Java および Spring Framework バージョンが必要ですか?
Spring Security を初めて使用します。HTTPS を介した CAS シングルサインオンをサポートし、特定の URL に対して基本認証をローカルで許可し、複数のバックエンドユーザー情報ソース(LDAP および JDBC)に対して認証するアプリケーションを構築する必要があります。見つけたいくつかの構成ファイルをコピーしましたが、機能しません。
15.5.2. よくある問題
ログインしようとすると、「不正な資格情報」というエラーメッセージが表示されます。どうしてでしょうか?
ログインしようとすると、アプリケーションが「無限ループ」に入ります。
「アクセスが拒否されます(ユーザーは匿名です);」というメッセージで例外が発生します。どうしてでしょうか?
アプリケーションからログアウトした後でも、保護されたページが表示されるのはなぜですか?
「SecurityContext で認証オブジェクトが見つかりませんでした」というメッセージで例外が発生します。どうしてでしょうか?
LDAP 認証が機能しません。
セッション管理
Spring Security の同時セッション制御を使用して、ユーザーが一度に複数回ログインするのを防ぎます。
Spring Security で認証すると、セッション ID が変わるのはなぜですか?
Tomcat(または他のサーブレットコンテナー)を使用しており、ログインページで HTTPS を有効にし、その後 HTTP に戻りました。
HTTP と HTTPS を切り替えていませんが、セッションがまだ失われています
同時セッション制御サポートを使用しようとしていますが、ログアウトしていて許可されたセッションを超えていないと確信しても、再度ログインすることはできません。
Spring Security は、create-session 属性を never に設定することにより、設定していないにもかかわらず、どこかにセッションを作成しています。
POST を実行すると 403 Forbidden が発生する
RequestDispatcher を使用してリクエストを別の URL に転送していますが、セキュリティ上の制約は適用されていません。
Spring Security の <global-method-security> 要素をアプリケーションコンテキストに追加しましたが、Spring MVC コントローラー Bean(Struts アクションなど)にセキュリティアノテーションを追加しても効果はないようです。
確実に認証されたユーザーがいますが、リクエスト中に SecurityContextHolder にアクセスしようとすると、認証が null になります。
認可 JSP タグは、URL 属性を使用するときにメソッドセキュリティアノテーションを考慮しません。
15.5.3. Spring Security アーキテクチャに関する質問
どのパッケージクラス X が含まれているかを知るにはどうすればよいですか
名前空間要素は、従来の Bean 構成にどのようにマッピングされますか?
「ROLE_」とは何を意味し、なぜロール名にそれが必要なのですか?
Spring Security で動作するためにアプリケーションに追加する依存関係を知るにはどうすればよいですか?
組み込み ApacheDS LDAP サーバーを実行するには、どのような依存関係が必要ですか?
UserDetailsService とは何ですか?
15.5.4. 一般的な「Howto」リクエスト
ユーザー名以外の情報でログインする必要があります。
リクエストされた URL のフラグメント値のみが異なる(たとえば、/ foo#bar と /foo#blah? の)異なる intercept-url 制約を適用する方法
UserDetailsService でユーザーの IP アドレス(または他の Web リクエストデータ)にアクセスするにはどうすればよいですか?
UserDetailsService から HttpSession にアクセスするにはどうすればよいですか?
UserDetailsService でユーザーのパスワードにアクセスするにはどうすればよいですか?
アプリケーション内でセキュアな URL を動的に定義するにはどうすればよいですか
LDAP に対して認証するが、データベースからユーザーロールをロードするにはどうすればよいですか?
名前空間によって作成された Bean のプロパティを変更したいのですが、スキーマにはそれをサポートするものが何もありません。
III. リアクティブアプリケーション
16. WebFlux セキュリティ
16.1. 最小限の WebFlux セキュリティ構成
16.2. 明示的な WebFlux セキュリティ構成
17. デフォルトのセキュリティヘッダー
17.1. キャッシュ制御
17.2. コンテンツタイプオプション
17.3. HTTP 厳格なトランスポートセキュリティ (HSTS)
17.4. X-Frame-Options
17.5. X-XSS-Protection
17.6. コンテンツセキュリティポリシー (CSP)
17.6.1. コンテンツセキュリティポリシーの構成
17.6.2. 追加リソース
17.7. リファラーポリシー
17.7.1. リファラーポリシーの構成
17.8. 機能ポリシー
17.8.1. 機能ポリシーの構成
18. HTTPS にリダイレクト
19. OAuth2 WebFlux
19.1. OAuth 2.0 ログイン
19.1.1. Spring Boot 2.0 サンプル
初期設定
リダイレクト URI の設定
application.yml を構成する
アプリケーションを起動する
19.1.2. OpenID プロバイダー構成の使用
19.1.3. 明示的な OAuth2 ログイン構成
19.2. OAuth2 クライアント
19.3. OAuth2 リソースサーバー
19.3.1. 依存関係
19.3.2. 最小構成
認証サーバーを指定する
スタートアップの期待
ランタイムの期待
認可サーバー JWK セット Uri を直接指定する
ブート自動構成のオーバーライドまたは置換
認可の構成
検証の構成
20. @RegisteredOAuth2AuthorizedClient
21. WebClient
21.1. WebClient OAuth2 のセットアップ
21.2. 暗黙的な OAuth2AuthorizedClient
21.3. 明示的な OAuth2AuthorizedClient
21.4. clientRegistrationId
22. EnableReactiveMethodSecurity
23. リアクティブテストのサポート
23.1. リアクティブメソッドセキュリティのテスト
23.2. WebTestClientSupport
23.2.1. 認証
23.2.2. CSRF サポート