トップ OSS紹介 Spring Security

Spring Security

サポート対象

NRIのOpenStandiaが提供するSpring Security最新情報

Spring Security情報

Spring Securityとは

Spring Security(スプリングセキュリティ)は、Springベースのアプリケーションに対してセキュリティ強化を実現するためのフレームワークです。

以下を実現することが主な目的です。
・ 認証 (BASIC認証、X.509クライアント認証、LDAP認証、OpenID Connect 1.0など)
・ 認可 (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は広範囲な認証モデルを提供しています。認証モデルの多くは、サードパーティが独自に開発・提供しているか、IETF(Internet Engineering Task Force)などの標準化団体により仕様が策定されています。Spring Securityはこれらを実装しているほか、独自の認証機能も提供しています。またSpring Security 5.0 からは Spring Framework 5.0 で導入された WebFlux にも対応しています。

具体的には、Spring Security 6.2では以下のような認証テクノロジーとの統合機能を提供しています。

  • HTTP BASIC認証
  • HTTP Digest認証
  • HTTP X.509クライアント証明書認証
  • LDAP認証
  • Formベース認証
  • OpenID Connect
  • SAML
  • リクエストヘッダーを利用した認証
  • CAS
  • remember-me認証
  • 匿名認証
  • Java Authentication and Authorization Service (JAAS)
  • Java EEコンテナ認証
  • 独自に開発した認証システム など

また、Spring Security 5.7以降では、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)フレームワークを使用するためのモジュールです。

OAuth 2.0 Resource Server

spring-security-oauth2-resource-server.jar

OAuth 2.0リソースサーバーに対するSpring Securityのサポートが含まれています。OAuth 2.0のベアラートークンを使ってAPIを保護するために使われます。

Taglibs

spring-security-taglibs.jar

Spring SecurityのJSPタグの実装を提供します。

ACL

spring-security-acl.jar

ACLを使用してアプリケーションのドメインオブジェクトの認可を行うためのモジュールです。

CAS

spring-security-cas.jar

CAS シングルサインオンを行うためのモジュールです。

Test

spring-security-test.jar

テスト用のクラスが含まれています。

Spring Security 5.x に含まれるサンプルアプリケーション

Spring Security 5.x には、以下のサンプルアプリケーションが用意されています。

  • Tutorial Sample
  • Contacts
  • LDAP Sample
  • OpenID Connect Sample
  • CAS Sample
  • JAAS Sample
  • Pre-Authentication Sample

類似プロダクト

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 version 2)というライセンスに基づいて公開され、営利、非営利を問わず、誰でも自由かつ無償で利用・改変・再配布できるようになっています。

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • Apache Struts
    サポート対象

    Apache Struts

    アパッチストラッツ。Java言語を用いてWebアプリケーションを開発するためのフレームワークです。

  • Apache Wicket

    Apache Wicket

    アパッチウィケット。Javaで実装されたコンポーネントベースのWebアプリケーションフレームワークです。

  • MyBatis
    サポート対象

    MyBatis

    マイバティス。iBATISの後継プロジェクトとして開発され、Javaならびに.NET Frameworkプラットフォームが対象のデータマッパーフレームワークです。

オープンソースに関するさまざまな課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。