Home > その他
その他 Archive
OpenAM(旧OpenSSO)でシングルサインオンをしてみる
- 2012年3月14日 1:20 PM
- その他
やりたいことは、クロスドメイン(CDSSO)でシングルサインオンを実現し、ユーザーを識別(認可)して、アクセスできるURLを制限したい、というもの。
SSO製品は色々あるようですが、一番とっつきやすそうなOpenAMで試す。
SSOエージェントなど、独特のSSO用語は以下のページがとてもわかり易いです。
http://dev.ariel-networks.com/column/tech/opensso/
前提
SSOサーバーとSSOエージェントは別マシン(同じマシンで実行した(もちろんポートを変えて)が上手くいかなかった為)
- SSOサーバーのホスト(10.29.56.64) : sso.server.com
- SSOエージェントのホスト(10.29.55.56) : sso.agent.com
SSOはCookieを用いて、SSO Tokenをやり取りするので、localhostなどでアクセスして設定を行なってしまうと、Cookieのドメイン属性がうまく設定できず、動かない可能性がある。
そのため、設定を行う場合は必ずFQDNでアクセスする。
試しにやる場合は、hostsファイルを編集するのが一番楽かと思います。
hosts
10.29.56.64 sso.server.com 10.29.55.56 sso.agent.com
なお、このhosts設定はSSOサーバーのマシン、SSOエージェントのマシン両方に設定しておく必要がある(どちらもそれぞれのホストを見に行く必要があるため)
環境
- Tomcat 6.0.35(SSOサーバーマシン用)
TOMCAT_HOME=C:\Program Files\apache-tomcat-6.0.35-server - Tomcat 6.0.35(SSOエージェントマシン用)
TOMCAT_HOME=C:\Program Files\apache-tomcat-6.0.35-agent - Windows XP SP3
- OpenAM(openam_954.war)
- J2EE Policy Agent(tomcat_v6_agent_3.zip)
今回は、JavaEEサーバーにエージェントを組み込む、「エージェント型」で動かしてみる。
また、OpenSSOを組み込むTomcat(SSOサーバー用)とSSOエージェントを組み込むTomcat(SSOエージェント用)は、必ず別にする必要がある(SSOエージェントをインストールする際に、SSOサーバー用Tomcatは起動していて、SSOエージェント用Tomcatは停止している必要があるため)
手順
- OpenAMをインストール
- OpenAMにプロファイルを作成
- SSOエージェントをインストール
- SSO対象のWebアプリにフィルタを設定
- OpenAMにポリシーを作成
- 確認
1. OpenAMをインストール
SSOサーバーとして機能するOpenAMは、JavaのWebアプリとして配布されているので、配備はWARをデプロイするだけです。
以下から、WAR(openam_954.war)をダウンロードする。
http://www.forgerock.org/openam.html
WARを以下のように配置する(openam_954.war を openam.war にリネームした)
C:\Program Files\apache-tomcat-6.0.35_server\webapps\openam.war
Tomcatを起動したら、以下にアクセスする。
http://sso.server.com:8080/openam
以下の画面が出れば正常にデプロイされている。
「デフォルト設定の作成」を選択する。
パスワードは、以下。
- amAdmin : password1
- UrlAccessAgent : password2
インストールが始まる。
正常に完了したら、「ログインに進む」をクリックする。
「amAdmin」ユーザのID、パスワードを入力すればログインできる(IDは大文字・小文字を区別しないようだ)
ログイン成功!
2. OpenAMにプロファイルを作成
引き続きそのままプロファイルを作成する。
プロファイルは~~みたいなものだと思います。
[アクセス制御]タブ → [/ (最上位のレルム)] → [エージェント]タブ → [J2EE]タブ に移動する。
「エージェント」の「新規…」ボタンをクリックして、プロファイルを作成する。
- 名前 : tomcatagent
- パスワード : password3
- 設定 : 集中
- サーバーURL : http://sso.server.com:8080/openam
- エージェントURL : http://sso.agent.com:8080/agentapp
名前、パスワード、サーバーURL、エージェントURLは以降でも使うので、覚えておく。
ついでに、クロスドメインの設定もしておく
先ほど作成した、[tomcatagent] → [SSO]タブ → [クロスドメインSSO] に移動し、「有効」のチェックを付け、ページ上部の「保存」ボタンを押下する。
3. SSOエージェントをインストール
(SSOエージェント用マシンで実施)
まず以下から、ZIPをダウンロードし、解凍する。
http://www.forgerock.org/openam.html
場所は以下にした(この場所をエージェントが参照しているようなので、日本語パス等は避けたほうがいいかも)
C:\work\SSO\j2ee_agents
次に、プロファイルで設定したパスワードをパスワードファイルとして保存しておく必要がある。
以下に、「pass」というファイル名でパスワードファイルを作成した(場所はどこでもいいと思う)
C:\Program Files\apache-tomcat-6.0.35-agent\agentpass\pass
そして、このファイルにパスワードを平文で記述する(ここでは「password3」)
これで、準備が整ったので以下を実行する(SSOサーバー用のTomcatを起動しておくこと)
C:\work\SSO\j2ee_agents\tomcat_v6_agent\bin\agentadmin.bat --install
- Enter the Tomcat Server Config Directory Path→ C:\Program Files\apache-tomcat-6.0.35-agent\conf
- OpenSSO server URL→ http://sso.server.com:8080/openam
- Enter the $CATALINA_HOME environment variable→ C:\Program Files\apache-tomcat-6.0.35-agent
- Install agent filter in global web.xml ?→ false
- Agent URL→ http://sso.agent.com:8080/agentapp
- Enter the Agent Profile name→ tomcatagent
- Enter the path to the password file→ C:\Program Files\apache-tomcat-6.0.35-agent\agentpass\pass
あと、忘れずに、以下のフォルダにある「agentapp.war」をエージェント用のTomcatに配備(C:\Program Files\apache-tomcat-6.0.35-agent\webapps)しておく。
C:\work\SSO\j2ee_agents\tomcat_v6_agent\etc
4. SSO対象のWebアプリにフィルタを設定
これで、SSOを行う準備が整ったので、SSO対象のWEBアプリへのリクエストがエージェントを経由するように、WEBアプリのweb.xmlにフィルタを作成する。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>SampleWeb2</display-name>
<filter>
<filter-name>Agent</filter-name>
<filter-class>com.sun.identity.agents.filter.AmAgentFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Agent</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<servlet>
<servlet-name>Sample1</servlet-name>
<servlet-class>org.sample.Sample1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Sample1</servlet-name>
<url-pattern>/Sample1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Sample2</servlet-name>
<servlet-class>org.sample.Sample2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Sample2</servlet-name>
<url-pattern>/Sample2</url-pattern>
</servlet-mapping>
</web-app>
大事なところはフィルタ「Agent」です。これでこのアプリへの全てのリクエストがエージェントを経由することになる。
ちなみにサンプル用のWEBアプリは以下のような構成。
| アプリケーション | アクセスパス | アクセスできるユーザー |
|---|---|---|
| SampleWeb1 | /SampleWeb1/Sample1 | sample0, sample1 |
| /SampleWeb1/Sample2 | sample0, sample1 | |
| SampleWeb2 | /SampleWeb2/Sample1 | sample0, sample2 |
| /SampleWeb2/Sample2 | sample0, sample2 |
5. OpenAMにポリシーを作成
最後に、OpenAMにどのURLをどのユーザに許可するなどのポリシーを作成する。
まずユーザーを作成しておく。
[アクセス制御]タブ → [/ (最上位のレルム)] → [対象]タブ で「新規…」ボタンを押下し、ユーザーを作成する。
今回は先ほど書いてるように「sample0, sample1, sample2」を作成した。
次にポリシーを作成する。
[アクセス制御]タブ → [/ (最上位のレルム)] → [ポリシー]タブ で「新規ポリシー…」ボタンを押下する。
一般
名前 : SampleWeb1
ルール
サービスタイプ : URL ポリシーエージェント (リソース名あり)
名前 : Sample1
リソース名 : http://sso.agent.com:8080/SampleWeb1/Sample1
アクション : GET,POST(共に許可)
同様にして「/SampleWeb1/Sample2」を許可するルールも追加しておく。
対象
タイプ : OpenAM アイデンティティー対象
名前 : identity1
sample0, sample1 を選択
SampleWeb2用の新規ポリシーも上記と同様にして作成する。
6. 確認
最後に正しく、SSOとアクセス制御が出来ているか確認する。
エージェントが組み込まれたTomcatが起動していない場合は起動する。
http://sso.agent.com:8080/SampleWeb1/Sample1 にアクセス。未ログインなので、ログイン画面が表示される。
「sample1」でログインすると、正常にアプリにアクセスできる。
http://sso.agent.com:8080/SampleWeb2/Sample1 にアクセス。権限が無いので、403エラーになる。

一旦、ログアウト(http://sso.server.com:8080/openam/UI/Logout にアクセス)して、
再度、http://sso.agent.com:8080/SampleWeb1/Sample1 にアクセス。今度は「sample0」でログインする。
「sample0」は別アプリの /SampleWeb1 と /SampleWeb2 にそれぞれアクセスできる。
- Comments: 0
- Trackbacks: 0
フレームワークを調査するときにやること
- 2011年1月17日 10:43 PM
- その他
仕事でSeasarプロジェクトのTeedaというフレームワークでWebアプリケーションを作ることになったので、その調査ということで、色々やったので、そのメモです。
とりあえず以下の事をやれば、一製造メンバーとしては役に立てるかな。
以下の事をやりました。
- チュートリアルを動かしてみる
- マニュアルを読む
- MLを眺める
- 課題管理(バグレポート)を眺める
- ブログを読む
- ソースを読む
以下、詳細。
1. チュートリアルを動かしてみる
大体のフレームワークには、チュートリアルがサイトに載っていたり、サンプルコードをダウンロードできたりするので、それをとりあえず動かしてみる。
Teedaの場合、html-tutorialという素晴らしいサンプルコード群が配布されているので、それをひと通り眺めると、出来ることのイメージが掴めました。
2. マニュアルを読む
もちろん、必須です。
Teedaの場合、S2やS2Daoなんかも絡んでくるので、そこらへんのマニュアルもひと通り目を通す。
分からないところがあってもとりあえず目を通す。そうすると、後で分からないことがあったときに「あそこに書いてあったような・・・」みたいな当たりが付けられるので。
あと、先にチュートリアルやっておくと実際の動きのイメージをつけながらマニュアルを読めるので、先にチュートリアルやったほうがいい。
3. MLを眺める
MLを眺める&登録しておく。
だいたい行き詰まるところは同じなので、求める答えはMLにあったりするのがほとんどだったりする。
隅から隅まで読むのは無理なので、気になるタイトルのやつだけ読んでました。
あとML登録しておくと、コミュニティの活発具合とか雰囲気がわかる気がして楽しい。
4. 課題管理(バグレポート)を眺める
フレームワークの歴史が垣間見れて面白い。
どのバージョンでこういう機能が追加されたんだ、とか分かる。
最新バージョンを使えるようなら問題ないけど、理由あって古いバージョンを使わなくちゃいけないとか言う場合に、この機能は使えないとかを調査したりする。
5. ブログを読む
これは実装してたらだいたいすると思うけど、Teedaだったら検索に引っかかったブログのTeedaカテゴリーは全部読むとか。
6. ソースを読む
これができたら最高なんだけど、、、、まだ技術力不足で無理です。。。
- Comments: 0
- Trackbacks: 0
Windowsでどのポートが何のアプリケーションで使用されているか確認する
- 2011年1月15日 2:01 PM
- その他
Eclipse内のWTPでTomcatを起動したら、以下のようなエラーメッセージが出て、起動できませんでした。
ローカル・ホスト の Tomcat v6.0 サーバー で必要なポート 8009 はすでに使用中です。サーバーはすでに別のプロセスで稼働中であるか、システム・プロセスがそのポートを使用中である可能性があります。このサーバーを始動するには、他のプロセスを停止するか、ポート番号を変更する必要があります。
どうもポートがかぶっていそうな感じだったので、ポートが何のアプリケーションで使用されているかを調べてみました。
方法は以下。
ポートのPIDを確認する
以下のコマンドで、ポートのPIDを確認する。
C:\>netstat -nao アクティブな接続 プロトコル ローカル アドレス 外部アドレス 状態 PID TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 996 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:902 0.0.0.0:0 LISTENING 3632 TCP 0.0.0.0:912 0.0.0.0:0 LISTENING 3632 TCP 0.0.0.0:990 0.0.0.0:0 LISTENING 760 TCP 0.0.0.0:1521 0.0.0.0:0 LISTENING 2976 TCP 0.0.0.0:1862 0.0.0.0:0 LISTENING 2176 TCP 0.0.0.0:2869 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:5357 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING 3400 TCP 0.0.0.0:8009 0.0.0.0:0 LISTENING 3476 TCP 0.0.0.0:8308 0.0.0.0:0 LISTENING 3476 TCP 0.0.0.0:17500 0.0.0.0:0 LISTENING 4068 TCP 0.0.0.0:49152 0.0.0.0:0 LISTENING 684
これでポート「8009」がPID「3476」で使用されていることがわかる。
PIDから使用されているアプリケーションを特定する
タスクマネージャを開いて、使用アプリケーションを特定する。
- 「Ctrl + Alt Delete」でタスクマネージャを開く。
- 「プロセス」タブを開く。
- デフォルトだとPIDが表示されていないので、「全ユーザーのプロセスを表示する(S)」「表示(V)→列の選択(S)→PID(プロセスID)」にそれぞれにチェックを入れる。
すると、PID「3476」がtomcat6.exeで使用されていることがわかる。
最後に該当の行を右クリックするなどして「プロパティ」などを見れば、使用されているアプリケーションが特定できる。めでたしめでたし。
- Comments: 0
- Trackbacks: 0
Subversionの管理構成
- 2009年6月8日 6:05 PM
- その他
一般にSubversionではリポジトリの構成を以下のようにするのがよい、と提案されている。らしい。
- <project>/trunk/<subdir>/…
- <project>/branches/<branch>/<subdir>/…
- <project>/tags/<tag>/<subdir>/…
確かに今やっているプロジェクトもこんな感じだなぁ。
参考
- Comments: 0
- Trackbacks: 0
コーディング規約集
- 2009年1月20日 9:05 PM
- その他
Java
- 株式会社 電通国際情報サービス
http://www.objectclub.jp/community/codingstandard/JavaCodingStandard2004.pdf - http://www.alles.or.jp/~torutk/oojava/codingStandard/
- http://www.okapiproject.com/java/java_codeconventions/index.html
Ruby
- http://shugo.net/ruby-codeconv/codeconv.html
- http://www.loveruby.net/w/RubyCodingStyle.html
- 株式会社 那由多屋(なゆたや) http://labs.nayutaya.jp/?ruby-coding-standards
- Matzにっき http://www.rubyist.net/~matz/20041006.html#p02
C#
- マイクロソフトのC#ガイドライン http://blogs.msdn.com/brada/articles/361363.aspx
- http://shodai.hp.infoseek.co.jp/c_sharp/CodingRule/CCharpCodingRule.html
- http://uchukamen.com/Programming/NamingConvention/index.htm
(X)HTML・CSS
- http://www.okapiproject.com/web/html_codeconventions/index.html
- http://www.d-spica.com/document/coding-regulation.html
コーディング規約の会
- Comments: 0
- Trackbacks: 0
ホーム > その他
- Search
- Feeds
- Meta





















