Spring Securityの概要
Spring Security(スプリングセキュリティ)は、Springベースのアプリケーションに対してセキュリティ強化を実現するためのフレームワークです。
以下を実現することが主な目的です。
・ 認証 (BASIC認証、X.509クライアント認証、LDAP認証、OpenID認証など)
・ 認可 (URLパスとロールによるアクセス許可/拒否、OAuth 2.0など)
・ セッション固定攻撃、クリックジャッキング、CSRFなどの攻撃に対するセキュリティ保護
上記以外にも多数の認証、認可、セキュリティ対策が可能で、それでも対応できない場合は用件に応じてカスタマイズすることもできます。Spring Securityは、サーブレットフィルタの仕組みを利用して、こうした機能を実現しています。
Spring Securityは、Springベースのアプリケーションのセキュリティ機能を実現するため、2003年にベンアレックス氏らにより「Acegi Security」として開発され、Spring Frameworkの開発者らに渡す時に「Spring Security」という名前にすることを提案しましたが、レビューの時間がなかったため、しばらくは「The Acegi Security System for Spring」と呼ばれていました。(「Acegi」という名前は開発者であるベンアレックス氏が1990年代に作ったBBS(電子掲示板)の名前で、特に意味があるわけでなかったようです。)
当初の構成では、Acegi Securityが認可を実現し、認証はTomcatなどのサーブレットコンテナが行うように設計、開発されていましたが、サーブレットコンテナの機能的な制限や設定上の問題により、誤った設定やユーザーの混乱の要因となったため、Acegi Securityに独自の認証機能が実装されるようになっていきました。
その後、プロジェクトは開発の規模を大きくしながら、2005年には公式のSpring Frameworkサブプロジェクトになり、2007年にAcegi Securityは「Spring Security」へと改名されました。
Spring Securityの主な特徴
Spring Securityは広範囲な認証モデルを提供しています。認証モデルの多くは、サードパーティが独自に開発・提供しているか、IETF(Internet Engineering Task Force)などの標準化団体により仕様が策定されています。Spring Securityはこれらを実装しているほか、独自の認証機能も提供しています。またSpring Security 5.0 からは Spring Framework 5.0 で導入された WebFlux にも対応しています。
具体的には、現在Spring Securityは以下のような認証テクノロジーとの統合機能を提供しています。
• HTTP BASIC認証
• HTTP Digest認証
• HTTP X.509クライアント証明書認証
• LDAP認証
• Formベース認証
• OpenID
• SAML
• リクエストヘッダーを利用した認証
• CAS
• remember-me認証
• 匿名認証
• Java Authentication and Authorization Service (JAAS)
• Java EEコンテナ認証
• Kerberos
• Java Open Source Single Sign-On (JOSSO) *
• OpenNMS Network Management Platform *
• Mule ESB *
• Grails *
• Tapestry *
• Elastic Path *
• Atlassian Crowd *
• 独自に開発した認証システム など
(*はサードパーティにより提供されているものを示しています)
また、Spring Security 5.7以降では、WebSecurityConfigurerAdapterが非推奨となり、コンポーネントベースのセキュリティ設定に移行することが推奨されるため、それ以前のバージョンとのセキュリティ設定の書き方に大幅な変更がありました。
具体的な記載については、以下の公式ブログを参考にしてください。
https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
Spring Securityを構成するモジュール
Spring Security には、以下のプロジェクトモジュールが含まれています。
Core
spring-security-core.jar
認証、認可のためのコアとなるインタフェースやクラスを含む必須モジュールです。
Remoting
spring-security-remoting.jar
Spring Remotingと連携するためのモジュールです。
Web
spring-security-web.jar
サーブレットやフィルタなどの、Webセキュリティのためのモジュールです。
Config
spring-security-config.jar
セキュリティネームスペース解析やJavaコンフィグレーションなどを使用して各種設定を行うためのモジュールです。
LDAP
spring-security-ldap
LDAPによる認証やユーザ管理を行うためのモジュールです。
OAuth 2.0 Core
spring-security-oauth2-core.jar
OAuth 2.0認証フレームワークとOpenID Connect Core 1.0を使用するためのコアモジュールです。
OAuth 2.0 Client
spring-security-oauth2-client.jar
OAuth 2.0 認証フレームワークとOpenID Connect Core 1.0のクライアントアプリケーション向けモジュールです。
OAuth 2.0 JOSE
spring-security-oauth2-jose.jar
JOSE(Javascript Object Signing and Encryption)フレームワークを使用するためのモジュールです。
ACL
spring-security-acl.jar
ACLを使用してアプリケーションのドメインオブジェクトの認可を行うためのモジュールです。
CAS
spring-security-cas.jar
CAS シングルサインオンを行うためのモジュールです。
OpenID
spring-security-openid.jar
OpenID認証を行うためのモジュールです。
Test
spring-security-test.jar
テスト用のクラスが含まれています。
Spring Security 5.x に含まれるサンプルアプリケーション
Spring Security 5.x には、以下のサンプルアプリケーションが用意されています。
- Tutorial Sample
- Contacts
- LDAP Sample
- OpenID Sample
- CAS Sample
- JAAS Sample
- Pre-Authentication Sample
Spring Securityと同類のソフトウェア
Spring Securityは、Springベースのアプリケーションのセキュリティを強化することに特化したフレームワークであり、これと同類のソフトウェアはありません。ただし、Springベースのアプリケーションの認証や認可を実現するために、別のソフトウェアを使用することはできます。例えば、Spring Securityを使わずに、KeycloakやOpenAMなどとSpringベースのアプリケーションを連携することもできます。Spring FrameworkにはKeycloakと簡単に連携するためのモジュールが提供されており、Spring Securityを使った上でKeycloakと連携することも、Spring Securityを使わずに連携することも可能です。
Spring Securityのライセンス
Spring Securityのライセンスは、「Apacheライセンスバージョン2」(Apache License version2)というライセンスに基づいて公開され、営利、非営利を問わず、誰でも自由かつ無償で利用・改変・再配布できるようになっています。
Spring Securityのライセンスについてご不明な点がありましたら、お気軽にお問い合わせください。
関連OSS
• Spring Framework
• Spring Boot
• Keycloak
Spring Securityのダウンロード
Spring Securityのサポート
NRIではお客様のご要望に応じて様々な支援ができるサービスをご用意しました。
詳細は下記ページをご確認ください。
・オープンソース年間サポートサービス