スプリングセキュリティアーキテクチャの基礎
6630 ワード
認証と認証は、Webアプリケーションのセキュリティの基本です.認証がシステムによって識別されることができるかどうか、認証が決定する間、認可はユーザーが特定のリソースへのアクセスを有するかどうか決定する.
認証と同様に認証設計パラダイムは継続的に発展している.その背後にある主な理由は、アプリケーションに対して使用される悪用の異なる方法での連続進化です.
春のセキュリティは、すべての可能な解決策をまとめることによってこの問題を解決しようとします.
WebアプリケーションのSpringセキュリティでは、異なる種類のセキュリティソリューションを実装するフィルターパターンを使用します.中身はサーブレットですfilters . Spring Framework
Springセキュリティフィルタアーキテクチャ
サーブレットフィルタと同様に、スプリングセキュリティフィルタが実装されています
これらのフィルタはServletコンテナの標準(Web . xmlで構成されている)を介して登録されていないため、サーブレットコンテナはそれらを認識しません.
春
要求が委任されるとき
Spring Securityは次のような特殊なbeanフィルタを提供します
これは、フィルタリングのセットを介して要求を委任することができます束
これは、スプリング管理された豆であるセキュリティフィルタのリストです.これらはfilterchainproxyで登録されています.登録される利点
Springセキュリティのインスタンス
我々は、カスタマイズ機能を作成することができます- どちらか拡大 または実装 この設定は
クライアントが認証資格証明なしでリクエストを送ると、 The
これはリクエストを認証するためのベースフィルタです.ユーザリクエストが 事前に資格情報がある場合は、 資格情報が設定されていない場合、 その後
これは、認証を実行するAPIを提供する戦略インターフェイスです.これは、春のセキュリティフィルタによって呼び出されます.The
基本的に認証をチェックし 原則が有効ならば 原理が無効なら 認証がNULLなら Incase、セキュリティフィルタは、ユーザー定義のフィルタを使用するときなど、使用されません.
それは一般的な実装です
また、オプションの親
もし
その実装は特定のタイプの認証を実行します.例えば、
このオブジェクトはリクエストに関する認証情報を含んでいます.
含む
セキュリティAPI
The
それは入力として機能する
あなたがこれまでに達して、春の保安に関してより探検したいならば.ここではいくつかの記事をあなたが行くを取得します. username and password authentication using form-based login In-Memory Authentication using DaoAuthenticationProvider JPA implemenation of UserDetailsService For DaoAuthenticationProvider
認証と同様に認証設計パラダイムは継続的に発展している.その背後にある主な理由は、アプリケーションに対して使用される悪用の異なる方法での連続進化です.
春のセキュリティは、すべての可能な解決策をまとめることによってこの問題を解決しようとします.
The purpose of this article is to provide a high level understanding of spring security architecture for Servlet applications. It may not help you to immediately implement spring security in your application but it would definitely help you in the subsequent steps when you dive deeper.
春の保安におけるフィルタパターン
WebアプリケーションのSpringセキュリティでは、異なる種類のセキュリティソリューションを実装するフィルターパターンを使用します.中身はサーブレットですfilters . Spring Framework
DelegatingFilterProxy
フィルタとスプリングのセキュリティを追加FilterChainProxy
その上にフィルターをかける.両方のこれらのフィルタは、春のセキュリティで重要です.Springセキュリティフィルタアーキテクチャ
デリゲートフィルタ
サーブレットフィルタと同様に、スプリングセキュリティフィルタが実装されています
Filter
インターフェースですが、春の豆でもありますApplicationContext
.これらのフィルタはServletコンテナの標準(Web . xmlで構成されている)を介して登録されていないため、サーブレットコンテナはそれらを認識しません.
春
DelegatingFilterProxy
フィルタチェーンにあるフィルタ.それは、サーブレットコンテナライフサイクルと春を架橋しますApplicationContext
.要求が委任されるとき
DelegatingFilterProxy
. アプリケーションコンテキストからBeanフィルタを検索し、関連するBeanフィルタを呼び出します.DelegatingFilterProxy
フィルタも遅延ビーンフィルタのルックアップを可能にします.フィルタリングフィルタ
Spring Securityは次のような特殊なbeanフィルタを提供します
FilterChainProxy
. このフィルタは、WebアプリケーションのSpringセキュリティを有効にする単一のエントリポイントです.これは、フィルタリングのセットを介して要求を委任することができます束
SecurityFilterChain
. どのスプリングセキュリティフィルタを起動するかを決定するにはFilterChainProxy
用途SecurityFilterChain
. そこに複数のSecurityFilterChains
現在FilterChainProxy
また、クリアリングなどのセキュリティ固有のタスクを実行するためにも使用されますSecurityContext
. FilterChainProxy
従来のサーブレットフィルタより柔軟です.これはsecurityFilterchain
を活用して呼び出すRequestMatcher
インターフェイス.セキュリティ
これは、スプリング管理された豆であるセキュリティフィルタのリストです.これらはfilterchainproxyで登録されています.登録される利点
SecurityFilterChain
次のようになります.FilterChainProxy
活用するRequestMatcher
何かに基づいて呼び出しを決定するインターフェースServletRequest
URLを含む.複数のSecurityFilterChains
, FilterChainProxy
はSecurityFilterChain
使用する必要があります.また、クリアSecurityContext
任意のメモリリークを避けるために.デフォルトのセキュリティをカスタマイズする
Springセキュリティのインスタンス
WebSecurity
経由WebSecurityConfiguration
. WebSecurity
のインスタンスを作成するFilterChainProxy
フィルタ.我々は、カスタマイズ機能を作成することができます-
WebSecurityConfigurerAdapter
そして、それを構成として公開することWebSecurityConfigurer
そして、それを設定として公開します.@EnableWebSecurity
注釈.認証エントリ
AuthenticationEntryPoint
クライアントのレスポンスを送信し、資格情報を要求します.AuthenticationEntryPoint
実装は、ログインページへのリダイレクトを実行し、WWW認証Eヘッダーなどで応答することがあります.フィルタリング
これはリクエストを認証するためのベースフィルタです.ユーザリクエストが
AbstractAuthenticationProcessingFilter
が直接呼び出されます.AuthenticationEntryPoint
クライアントから資格情報を要求する最初に呼び出されますAbstractAuthenticationProcessingFilter
が直接呼び出されます.認証アーキテクチャ
認証マネージャー
これは、認証を実行するAPIを提供する戦略インターフェイスです.これは、春のセキュリティフィルタによって呼び出されます.The
authentication
返されるオブジェクトはSecurityContextHolder
.基本的に認証をチェックし
Authentication
設定できますSecurityContextHolder
手動で.providermanager
それは一般的な実装です
AuthenticationManager
. のリストに委任AuthenticationProvider
S .各AuthenticationProvider
それはできないことを示すためにだけでなく、認証する機会があります.また、オプションの親
AuthenticationManager
. もしAuthenticationProvider
が与えられた場合、親AuthenticationManager
認証のために相談されます.もし
authenticationProviders
認証が失敗すると認証が失敗します.認証プロバイダー
その実装は特定のタイプの認証を実行します.例えば、
DaoAuthenticationProvider
サポートユーザ名/パスワードベースの認証中JwtAuthenticationProvider
JWTトークンの認証をサポートします.セキュリティ
このオブジェクトはリクエストに関する認証情報を含んでいます.
含む
SecurityContext
デフォルトではthreadLocal
オブジェクト.このようにすべてのリクエストスレッドは独自のSecurityContext
オブジェクト.セキュリティAPI
セキュリティコンテキスト
The
securityContext
オブジェクトAuthentication
オブジェクト.The Authentication
オブジェクトは、Spring Securityの中で2つの主要な目的に役立ちますそれは入力として機能する
AuthenticationManager
認証を提供するには、ユーザーが認証を行う必要があります. AuthenticationManager.authenticate(Authentication authentication)
また、現在認証されたユーザを表します.現在Authentication
から得ることができますSecurityContext.
SecurityContextHolder.getContext().getAuthentication()
認証は認証済みユーザについて以下の詳細を提供します.Principal
— はユーザを識別する.ユーザ名/パスワードで認証するとき、これはしばしばUserDetails
インターフェイス.Credentials
— 基本的にパスワードGrandtedAuthorities
— プリンシパルの承認スコープを提供します.それは認可のための細粒度スコープです.GrantedAuthorities
から得ることができますAuthentication.getAuthorities()
メソッド.Reference
この問題について(スプリングセキュリティアーキテクチャの基礎), 我々は、より多くの情報をここで見つけました https://dev.to/irshsheik/spring-security-architecture-fundamentals-19ggテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol