OpenSSOをいじる
2008/11/21:この記事にあるOpenSSOはかなり古いものです。最近のものを使う際の参考にはならないかもしれませんのでご注意ください。
SSO(シングルサインオン)を調査するためにOpenSSOをいじってみた。
OpenSSOは「Sun Java System Access Manager」をオープンソース化したもの。
名前は変わっても、実装はほぼそのままのようで、管理画面などもばっちり「Sun Java System Access Manager」と表示されている。
SSOのプロダクトをほとんど知らなかったので他にもjossoとかOpenSAMLなんかをちらっと見てみたのだが、jossoは同一APサーバー上の異なるWebアプリケーション間でSSOを実現するもの、OpenSAMLは認証自体はやらないもの、という風に見えたので検討から外した。
ただし、ちゃんと調べてないので違うかも。
Sunの「Sun Java System Access Manager」のページを見ると仲間に「Sun Java System Federation Manager」や「Sun Java System Identity Manager」がいるらしいが、使い分けはイマイチ不明。
同ページの導入実績を見るとそれぞれ組み合わせたり単体で使ったりしているようなので、用が無ければ個別でもいけるっぽい。
OpenSSOプロジェクトを見ると「Open Access」「Open Federation」とあるので、「Sun Java System Federation Manager」もOpenSSOに含まれるのかもしれない。
ただ、「Sun Java System Access Manager」の情報がそのまま利用できるが、それでも日本語の情報が少ない。ぱっと見た感じでは以下の2つが参考になりそう。
OpenSSOを導入する
2008/11/21:この記事にあるOpenSSOはかなり古いものです。最近のものを使う際の参考にはならないかもしれませんのでご注意ください。
ひとまずOpenSSOを導入してみた。
OSは「Windows XP Professional SP2」の「VMWare Player 1.0.3」上に入れた「CentOS 4.4」。
その他のミドルウェアとして「Apache Tomcat 5.5.23」と「JDK 1.5.0_11」を事前に導入。また、Tomcat用ユーザとして「tomcat5」を作成。
ここでは都合上CentOSに導入しているが、サーバー自体はJ2EEアプリケーションだし、スタンドアロンで動作するサンプルアプリもbat形式の起動ファイルがあるので、Windowsに入れても動作する。
- まずは以下のページの「latest」(今回は20070406)から「opensso.war」を取得。拡張子が「zip」だったりするので落とした後に拡張子を「war」に変更。
- http://download.java.net/general/opensso/nightly/amserver/
- ※追記:ぱっと見たところOpen FederationはOpen Accessを内包してそうな感じなので、「opensso.war」を取得せずに上記URLの「amserver」のところを「openfm」にして「openfm.war」を取得した方が良いかも。
- 「opensso.war」をTomcatのwebappsに放り込んでTomcatを起動するとWARが展開される。
- 「http://localhost:8080/opensso/」にアクセスすると設定用ページにリダイレクトされる。ひとまず今回は以下の部分だけ変更して「Configure」ボタンを押した。
- Access Manager Settings
- Administrator
- Password:「password」
- Retype Password:「password」
- General Settings
- Configuration Directory:「/home/tomcat5」
- Administrator
- Configuration Store Settings
- Directory Server Administrator
- Password:「password」
- Retype Password:「password」
- Directory Server Administrator
- Access Manager Settings
- 設定後、ログイン画面(http://localhost:8080/opensso/UI/Login)が表示される。
- 設定どおり「amAdmin」「password」でログイン。
- 「Access Control」タブに「opensso」というRealmが存在することを確認。
サーバー側はひとまずこれでOK。
基本的には「Access Control」タブの「opensso」Realmに対して設定していくことになる。
全体の設定をいじる場合は「Configuration」タブでいじる。
「Sessions」タブは現在有効なSSOセッションを表示する。
「Sessions」にはSSOクライアントからのアクセス以外に管理コンソールのセッションも表示されるため、インストール後の管理画面で見る「amAdmin」のみが表示されているはず。今後SSOクライアントを作成するときにちゃんとSSOセッションが生成されているか、あるいはSSOセッションが無効になっているかを確認するときに使える。
なお、「Configuration Directory」として設定した「/home/tomcat5」にはサーバーの設定やログが格納される。
現時点ではおそらく以下のものがあるはず。
- AMConfig.properties:設定ファイル
- AccessManager(ディレクトリ):不明
- am_sm_ad_schema.ldif:不明
- opensso(ディレクトリ):ログやら設定やら状態やらが入っている
- serverconfig.xml:設定ファイル(Datastore用か?初期状態ではUser1とUser2の設定が入ってる)
openssoディレクトリ内のdebugやlogにログが出力されるが、AMConfig.properties内の「com.iplanet.services.debug.level」の値を「error」から「message」にするとdebug内に詳細なログが出力されるようになる。
※注意:正しい用語を知らないので上記の「SSOセッション」「SSOクライアント」は不適切かもしれない。ニュアンスで解釈してもらえるとありがたい。
SSOクライアント用の準備
2008/11/21:この記事にあるOpenSSOはかなり古いものです。最近のものを使う際の参考にはならないかもしれませんのでご注意ください。
次に、先に設定したSSOサーバー(Access Manager)に対するクライアントの準備をしてみた。
SSOクライアントには幾つか設定ファイルが必要だが、OpenSSOのサンプルを使って生成できるため、まずはサンプルを生成する。
- 以下のページの「latest」(今回は20070406)から「openssosamples.zip」を取得。
- 「openssosamples.zip」を適当なフォルダに展開する。
- 展開した中にscriptsというフォルダがあり、その中にsetup.shやらLogin.shやらが入っている。
- scriptsの親フォルダ(注:scriptsの中に入では駄目)をカレントフォルダにし、「scripts/setup.sh」を実行(実行権限がないときは付与)。これはクライアントで読み込むための設定。まずはサーバーに関する設定なので以下のように答えていく。
- Debug directory (make sure this directory exists):「debug」
- Password of the server application:「password」
- Protocol of the server:「http」
- Host name of the server:(サーバのホスト名。これはクライアントが見るためのものなので、他のサーバからアクセスするならlocalhostと書いてはいけない)
- Port of the server:「8080」
- Server's deployment URI:「opensso」(opensso.warにアクセスするときのコンテキストルート)
- Naming URL:(通常デフォルトでよいので入力せずにEnter)
- 次にクライアント側の設定を聞かれるので以下のように答えていく。
- Protocol of the client:「http」
- Host name of the client:(クライアントのホスト名)
- Port of the client:「8080」
- Client's deployment URI:(クライアントアプリケーション(今回はサンプルなので「ssosamples」がよい)のコンテキストルート)
- ここまで入力すると、ssosamples.warが生成される。このWARをクライアントに配備するとサンプルを動かすことができる。また、classesの直下にこれまでの設定を反映したファイル群が生成される。
ただ、実際にはssosamples.warよりも設定ファイルが欲しかっただけだったりする。
時間が無くなったので続きは明日。