はじめに
第3回は、OpenAMを使用してLAN内にあるWebアプリケーションへSSOする手順と、それを実現する仕組みについて解説します。SSO対象のWebアプリケーションには、セットアップが簡単で、かつOpenAMとの連携機能が提供されている「Liferay」を使用します。Liferayには無償で利用できる「Community Edition」があります。
LiferayがどのようにOpenAMと連携してSSOを実現するかを理解することで、Liferay以外のWebアプリケーションをSSO対応するためにどのような改造をすればいいかも理解できるかと思います。
対象読者
- SSOとOpenAMについてより理解したい方
- OpenAMの導入を検討している方
- LiferayへのSSOを検討している方
- WebアプリケーションのSSO対応を検討している方
Liferayとは
Liferayは企業ポータルを実現するオープンソースのWebアプリケーションです。ポートレットと呼ばれる機能単位の部品で構成されており、それらを組み合わせて企業のニーズに合ったポータルを構築することができます。ポートレットには、Wiki、カレンダー、ブログ、アンケートなど非常に多くの種類があります。画面から分かるようにポートレットの追加は簡単にできます。
Liferayは、日本語はもちろんさまざまな言語に対応しています。Javaで実装されているため、主要なOSの主要なアプリケーションサーバ上で動作します。
機能 | コミュニティ、コンテンツ管理、ニュース、ソーシャルなど |
サポートするOS | マルチプラットフォーム |
対応言語 | マルチランゲージ(日本語にも対応) |
実装言語 | Java |
ライセンス | LGPL |
Webサイト | http://www.liferay.com |
LiferayがSSOを実現する仕組み
Liferayのセットアップに入る前に、LiferayがどのようにSSOを実現するかについて説明します。
LiferayはOpenAM(OpenSSO)連携用のサーブレットフィルタを提供しています。Liferayの管理画面でOpenAMによる認証を有効にすると、このフィルタが機能するようになります。フィルタはLiferayに対するすべてのリクエストを監視し、認証済みであるかどうかをOpenAMに問い合わせます。その際に使用されるのが、OpenAMのREST APIです。
未認証のユーザがLiferayにアクセスした際のシーケンスを以下に示します。
未認証やセッションタイムアウトである場合、LiferayはユーザをOpenAMのログイン画面にリダイレクトさせます。この際にクエリストリングにgoto=[LiferayのURL]を設定しておくことで、OpenAMがログイン成功後にLiferayへとユーザをリダイレクトさせます。
その後、LiferayはREST APIでOpenAMからこのユーザの情報(ID、メール、姓、名)を取得してログイン処理を実行します。ユーザがLiferayのDBに存在しなければ、その情報をDBに登録することもできます(デフォルト設定では登録します)。
実装の詳細に関して知りたい方は、Liferayのソースをダウンロードして、パッケージcom.liferay.portal.servlet.filters.sso.openssoにあるOpenSSOFilter.javaを確認してみてください。
設定の概要
設定のおおまかな流れは以下のようになります。
- Liferayのセットアップ(Liferayがセットアップされていない場合)
- 連携用のOpenAMユーザ作成
- LiferayのSSO設定
OpenAMのインストールが完了していない方は、「OpenAMのインストール - OpenAMで始めるシングルサインオン(2)」を参照してインストールを行っておいてください。