HOME情報セキュリティ資料・報告書・出版物調査・研究報告書情報セキュリティ技術動向調査(2010 年下期)

本文を印刷する

情報セキュリティ

情報セキュリティ技術動向調査(2010 年下期)

2 Apache Shiroアプリケーションフレームワーク

宮川 寧夫

1. 今日のWebアプリケーションフレームワーク

  Webアプリケーションフレームワークは、文字通り、Webアプリケーション開発の枠組みを与えるものであり、そのまま動作環境となる。その備える機能の程度には差がある。CMS(Contents Management System)として機能するものもある。また、最近のフレームワークとしての特徴として、REST(Representational State Transfer )[1]と呼ばれる設計方針や、MVCモデルをサポートしようとしているものがある。MVCモデルとは、コンポーネントの役割を「Model」、「View」および「Controller」の3つに分けてアプリケーションを設計手法である。
  数あるWebアプリケーションフレームワークの中から、今回、Apache Shiro [2](以下、Shiro)というオープンソースWeb アプリケーションフレームワークを今期の話題として採りあげる。その理由は、Shiroが今期、2010年9月にASF(Apache Software Foundation)におけるトップレベルプロジェクトに昇格したことにある。その後、11 月3 日にはバージョン1.1.0リリースされた。このShiroは、本人認証、リソースへのアクセス認可、暗号技術的処理等のセキュリティ機能を請け負うことに特化しており、RESTの設計方針も採用しているが、MVCモデルは採用していない。

2. Shiroに至る系譜

  Shiroプロジェクトの発足当時の名前は、今日とは違い、2004年時点ではJSecurityというプロジェクトであった。これは、Sun (現Oracle)純正のJAAS (Java Authentication and Authorization Service )というライブラリの難点であった使い難さを解消するために、使い易いインタフェイスとなるように薄皮を被せたAPI ライブラリのようなものであった。JSecurity プロジェクトは、その後、ASF(Apache Software Foundation)に加わった。ASFにおいては、トップレベルプロジェクトに育成されるインキュベータープログラム(Incubator Program)に応募して採択された。JSecurityは、その後、いったんKiと改名されたが、すぐに再度、Shiroと改名された。
  そして、上述のようにShiro のバージョン1.0 が2010年7月にリリースされ、同年9月にはASFにおけるトップレベルプロジェクトに昇格した。

3. Shiroのセキュリティ機能

  Shiro内のセキュリティマネージャが管理する機能には、次の4つがある。

  • 本人認証
  • リソースアクセス認可
  • セッション管理
  • キャッシュ管理
  また、暗号技術的処理の機能は、APIライブラリとして独立している。

 

図:Shiroのセキュリティ機能
(出典:http://shiro.apache.org/architecture.html

4. Shiroの特徴

  Shiroは、今日的なRESTの設計方針に対応していると共に、下記の特徴をもつと主張されている[3]。これらの中からも読み取ることができるように、Webアプリケーションの形態とならないスタンドアロンのシステムの開発も行うことができるフレームワークとなっている。

  (1) 理解し易いJava Security API
      クラス名やインタフェイス名は、直感的であるとともに合理的である。併せて、デフォルト設定も良く整えられている。
  (2) シンプルな本人認証(authentication)
      LDAP、JDBC、Kerberos、Active Directory等のユーザデータの源泉と簡単につなぐことができる。
  (3) シンプルなアクセス認可(authorization)
      役割(role)と、詳細なパーミッション(permission)の設定をもつ。また、上記のように、容易につなぐことができるユーザデータの源泉を使うことができる。
  (4) 高度なキャッシュ機能
      アプリケーション性能を高めるために、最高水準のキャッシュ機能を備えている。
  (5) 組み込まれたPlain Old Java Objectに基づくセッション管理
      Webと非Web環境の両方においてPOJO(Plain Old Java Object)使う。セッション管理は、SSO(Single Sign On)や、クラスタ構成の複数サーバにまたがるセッションや、分散された複数のサーバ群にまたがるセッションを必要とするような、あらゆる環境において使えるものとなっている。
  (6) 多様なクライアントとのセッション
      従来のHttpSessionやStateful Session Beansは、しばしば不必要にアプリケーションを特定の環境に拘束してきたが、これらのみを使う必要は無くなっている。Flashアプレット、C#アプリケーション、Java Web Start等、多様な(Heterogeneous)クライアントが、開発環境に依存せずにセッション状態を共有できるようになっている。
  (7) シンプルなSingle Sign On
      上記のセッション管理を利活用して、セッションが複数のアプリケーションに跨って実装されている場合、ユーザ認証(authentication)の状態も共有できる。あるアプリケーションへのログインが、別のアプリケーションにも認識できるようになっている。
  (8) 可能な限りシンプルな暗号技術API
      暗号とハッシュ機能について、JCE(Java Cryptography Extensions)の複雑さを隠喩して容易に使えるようになっている。
  (9) 堅牢でありながら設定が容易なWebフレームワーク
      あらゆるURLもしくはリソースをセキュアにすることができ、loginとlogoutを自動的に扱えて、Remember Meサービスも行う。
  (10) 極めて少ない依存関係
      スタンドアロン設定の場合、slf4j-api.jar とslf4jのbinding .jarの中のひとつしか要求しない。Web設定の場合も、commons-beanutils-core.jarを追加的に要求するのみである。また、機能追加(例:Ehcache [4]によるキャッシュ機能、Quartz [5]に基づくセッション検証機能、Springフレームワークとの統合(後述)等)に応じて少数の依存関係を考慮することになる。

5. 開発環境の構成方法

  卑近なJava開発環境にShiro以外にはDependency MangerとしてMavenもしくはIvyを追加的にインストールする必要がある。
  従来のAPIライブラリを呼び出すようにShiroを使って開発することができるが、今日では、親和性のある他のアプリケーションフレームワークで開発されたアプリケーションをShiroに対応させるような使い方もできるようである。本稿では、後者の用法に着目する。具体的には、「Spring Application Framework(以下、Spring)」[6]で開発されたアプリケーションや、Grails [7]で開発されたWebアプリケーションがShiroに統合できるようになっている。Shiro には「HTTP フィルタ」と呼ばれる機能が用意されており、これを利用すると、Shiroに含まれているアプリケーションのセキュリティ機能を利用できるようになる。

6. 「HTTP フィルタ」を介する統合

   統合における連携は、javaサーブレットが利用するweb.xmlファイルを介して行われる。web.xmlファイルは、「サーブレットデプロイメントデスクリプター(Servlet deployment descriptor:配備記述子)と呼ばれ、JavaのWebアプリケーションの設定を書くファイルである。Shiroが他のフレームワークと統合できる条件は、Shiroとのインタフェイスがこのファイルに集約されていることであり、依存関係を極めて少なくすることができている要因でもある。SpringやGrailsにはweb.xmlを適宜、編集・更新する機能があり、Shiroに制御を移す部分が記述される。
  web.xmlファイルにフィルタが追記された設定のサンプルを掲げる。


<!-- The filter-name matches name of a 'shiroFilter' bean inside 
applicationContext.xml -->
<filter>
    <filter-name>shiroFilter</filter-name>

    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-cla
ss>
    <init-param>
        <param-name>targetFilterLifecycle</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
...

<!-- Make sure any request you want accessible to Shiro is filtered. /* catches 
all -->
<!-- requests.  Usually this filter mapping is defined first (before all others) 
to -->
<!-- ensure that Shiro works in subsequent filters in the filter chain:             
-->
<filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

(出典:http://shiro.apache.org/spring.html

7. まとめ

  Shiroは、本人認証機能やリソースへのアクセス認可等のセキュリティ機能に特化したフレームワークであり、Webアプリケーションのみならず、スタンドアロンシステムも開発できる。Shiroについて注目されるのは、従来のAPIライブラリを呼び出すような開発にも利用できると共に、依存関係が少ない利点を活かして他のアプリケーションフレームワークで開発されたアプリケーションに「HTTPフィルタ」を介してセキュリティ機能を統合するような開発にも活用することができるようになったことにある。

以上

参考文献・参照プロジェクト

[1] Roy Thomas Fielding, `CHAPTER 5 Representational State Transfer (REST)’
“Architectural Styles and the Design of Network-based Software Architectures” (2000)
  http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
[2] APACHE SHIRO
  http://shiro.apache.org/
[3] `Apache Shiro Features Overview’
  http://shiro.apache.org/features.html
[4] Ehcache - The Most Widely Used Java Cache
  http://ehcache.org/
[5] Quartz - Enterprise Job Scheduler
  http://www.quartz-scheduler.org/
[6] sprigngsource community
  http://www.springsource.org/
[7] GRAILS
  http://grails.org/

参考資料

 

目次へ 次へ