2012年12月30日日曜日

MySQLでERROR 1005 (HY000): Can't create table 'user_db.groups' (errno: 150)

MySQLにおいて、外部参照キーをもつテーブルを作成する際に、以下のエラーが発生した際の対処方法を記載する。
ERROR 1005 (HY000): Can't create table 'user_db.groups' (errno: 150)
上記のエラーの原因は、以下の2つ考えれる。

  • MySQLでは、存在しないテーブルに対する外部参照キーの設定を許可していない。
    ⇒設定により、一時的に、上記のチェック機能を無効にする。
  • 親テーブルと子テーブルの外部参照キーとするカラムのデータタイプまたはサイズが異なる。
上記の1点目の対処方法としては、以下のコマンドを実行し、いったん外部参照キーのチェックを外す。
mysql> SET foreign_key_checks = 0;
外部参照キーをもつテーブルを作成した後、忘れずにもとの設定に戻す。
mysql> SET foreign_key_checks = 1;

2012年12月26日水曜日

OpenAM 10.0.0 管理ツールの設定

OpenAMの管理ツールの設定手順について説明する。
管理ツールを設定する環境には、事前に、OpenAMがセットアップされていることが前提となる。

①以下のサイトから管理ツールの媒体(ssoAdminTools.zip)をダウンロードする。

http://www.forgerock.org/openam.html

②ダウンロードしたインストール媒体を任意の場所に解凍する。

③解凍したフィルダ内のセットアップ用のバッチファイルを実行する。

C:\Users\yasu-bushi\Downloads\ssoAdminTools_10.0.0>setup.bat
OpenAM サーバーの設定ファイルのパス [C:\Users\yasu-bushi\openam]:C:\Users\yasu-bushi\opensso
デバッグディレクトリ [C:\Users\yasu-bushi\Downloads\ssoAdminTools_10.0.0\debug]:
ログディレクトリ [C:\Users\yasu-bushi\Downloads\ssoAdminTools_10.0.0\log]:
スクリプトは次のディレクトリに正しく設定されています:  C:\Users\yasu-bushi\Downloads\ssoAdminTools_1
0.0.0\opensso
デバッグディレクトリは C:\Users\yasu-bushi\Downloads\ssoAdminTools_10.0.0\debug です。
ログディレクトリは C:\Users\yasu-bushi\Downloads\ssoAdminTools_10.0.0\log です。
この tools.zip のバージョン:  OpenAM 10.0.0 (2012-April-13 10:24)
サーバーインスタンスのバージョン:  OpenAM 10.0.0 (2012-April-13 10:24)
C:\Users\yasu-bushi\Downloads\ssoAdminTools_10.0.0>
④管理ツールで使用するパスワードファイルを作成する。パスワードファイルには、OpenAMの管理ユーザ(amAdmin)のパスワードを記載する。
C:\Users\yasu-bushi\Downloads\ssoAdminTools_10.0.0\opensso\bin>echo ampassword> password.txt
⑤管理ツールを実行し、正常に実行することを確認する。

C:\Users\yasu-bushi\Downloads\ssoAdminTools_10.0.0\opensso\bin>ssoadm.bat list-servers -u amAdmin -f password.txt 
http://openam.yasuyasu.com:8080/opensso
【追記】
パスワードファイルには、平文ではなく、暗号化したパスワードを設定することも可能。
以下のコマンドを実行し、パスワードを暗号化する。
C:\Users\yasu-bushi\Downloads\ssoAdminTools_10.0.0\opensso\bin>ampassword.bat -e password.txt 
AQICc3lkj1o3T4VXyeyX2DX8JVGqWcSj19qm 


OpenAM 10.0.0 J2EEポリシーエージェントの設定

OpenAMのJ2EEポリシーエージェントを使用し、OpenAM本体と認証連携する。
下図で示すように、1つのGlassfish上に、OpenAM(認証サーバ)と業務アプリケーション用の2つのドメインを作成する。


① OpenAMの管理コンソールにログインする。「アクセス制御」タブ→「/(最上位のレルム)」→「エージェント」タブ→「J2EE」タブに移動する。

②「エージェント」項目の「新規」ボタンを押下する。以下の項目を入力し、「作成」ボタンを押下する。

  • 名前: glassfish(任意の値)
    ※ポリシーエージェントの設定でも必要になるため、メモしておく。
  • パスワード: password
    ※ポリシーエージェントの設定でも必要になるため、メモしておく。
  • 設定: 集中
    ※エージェントの設定情報が格納されている場所。「ローカル」の場合は、ポリシーエージェントが配備されているサーバに格納される。「集中」は、OpenAM サーバで管理される。
  • サーバー URL: http://openam.yasuyasu.com:8080/opensso
    ※OpenAMの配備先URL。
  • エージェント URL: http://openam.yasuyasu.com:9090/agentapp
    ※ポリシーエージェントの配備先URL

③ポリシーを作成する。「アクセス制御」タブ→「/(最上位のレルム)」→「ポリシー」タブに移動する。「新規ポリシー」ボタンを押下する。

④以下のようにポリシーを設定する。設定した後、「了解」ボタンを押下する。

  • 名前:任意の値
  • ルール:URL ポリシーエージェント (リソース名あり)
    リソース名:http://openam.yasuyasu.com:9090/sampletest/simple
  • 対象:認証済みユーザー
  • 条件:IP アドレス/DNS 名

⑤以下のサイトから、J2EEポリシーエージェント(Glassfish用)「appserver_v10_agent_3.zip」をインストールする。

http://www.forgerock.org/openam.html

⑥ダウンロードしたZIPファイルを任意の場所に解凍する。ここでは、C:\Users\yasu-bushi\Downloads\j2ee_agentsに解凍する。

⑦ポリシーエージェント時に必要となるパスワードファイルを作成する。パスワードファイルには、②で設定した値を記載する。

echo password> .\password

⑧agentadminコマンドを実行し、ポリシーエージェントをセットアップする。

C:\Users\yasu-bushi\Downloads\j2ee_agents\appserver_v10_agent\bin>agentadmin --install

-----------------------------------------------
SUMMARY OF YOUR RESPONSES
-----------------------------------------------
Application Server Config Directory :D:\glassfish\domains\domain2\config
Application Server Instance name : server
OpenSSO server URL : http://openam.yasuyasu.com:8080/opensso
Agent URL : http://openam.yasuyasu.com:9090/agentapp
Agent Profile name : glassfish
Agent Profile Password file name :C:\Users\yasu-bushi\Downloads\j2ee_agents\password

⑨agentapp.warをglassfishに配備する。

⑩サンプルアプリケーションをglassfishに配備する。このとき、web.xmlには、ポリシーエージェントが呼ばれるように、以下のフィルター設定を記載する。

----------------------------------------------------------------
<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>
----------------------------------------------------------------


⑪サンプルアプリケーションにアクセスした際、OpenAMのログイン画面が表示されることを確認する。また、ログインが成功した後、サンプルアプリケーションにアクセスできることを確認する。

【補足】
J2EEポリシーエージェントのデバックログ・監査ログの出力先:
C:\Users\yasu-bushi\Downloads\j2ee_agents\appserver_v10_agent\Agent_001\logs\debug\debug.out



2012年11月12日月曜日

OpenAM10.0 MySQLとの接続

OpenAMで使用するユーザ情報のデータストアとしてMySQLを使用する。
※環境設定用のデータストアはOpenDJのままであることに注意。OpenAMの仕様上、セットアップ以降に環境設定用のデータストアを変更することはできない。

(参考URL)
http://docs.oracle.com/cd/E19316-01/820-4729/ggtsq/index.html

なお、接続先のMySQLの設定情報は以下のとおり。

--------------------------------------------------------------------

mysql> status;
--------------
C:\Program Files\MySQL\MySQL Server 5.5\bin\mysql.exe  Ver 14.14 Distrib 5.5.28,
 for Win64 (x86)

Connection id:          2
Current database:
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.5.28 MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
TCP port:               3306
Uptime:                 1 min 19 sec

Threads: 1  Questions: 13  Slow queries: 0  Opens: 33  Flush tables: 1  Open tab
les: 26  Queries per second avg: 0.164
--------------

--------------------------------------------------------------------

①MySQL Command Line Clientを起動し、ユーザ用のデータベースを作成する。

mysql> create database user_db;
Query OK, 1 row affected (0.00 sec)

②ユーザ用のデータベースにアクセスするユーザ「db_user」を作成する。


mysql> grant select,insert,delete,update,create,drop,file,
    -> alter,index on *.* to db_user identified by 'password';
Query OK, 0 rows affected (0.00 sec)


③user_dbデータベースに、ユーザ情報を格納するテーブル「auth_users」を作成する。
★現時点では、グループ操作に関する処理は未実装であるため、
★グループ用のテーブルは作成しない。


mysql> use user_db;
Database changed

mysql>  create table auth_users(uid varchar(50),cn varchar(50),inetuserstatus va
rchar(20),userpassword varchar(50),ChangePassword varchar(50),mail varchar(50),s
unIdentityMSISDNNumber varchar(50),sn varchar(50),manager varchar(50),preferredl
ocale varchar(10),iplanet_am_user_password_reset_force_reset varchar(50),givenna
me varchar(50),iplanet_am_user_alias_list varchar(50),iplanet_am_user_account_li
fe varchar(50),telephonenumber varchar(50),employeenumber varchar(50),iplanet_am
_user_auth_config varchar(50),postaladdress varchar(50),iplanet_am_user_password
_resetoptions varchar(50),iplanet_am_user_password_reset_question_answer varchar
(50),iplanet_am_user_success_url varchar(50),iplanet_am_user_failure_url varchar
(50));

Query OK, 0 rows affected (0.01 sec)


④MySQLコネクタ「mysql-connector-java-5.1.22-bin.jar」を、OpenAMが配備された以下のディレクトリにコピーする(またはクラスパスに設定する)。

D:\glassfish\domains\domain1\applications\j2ee-modules\opensso\WEB-INF\lib

⑤Glassfishを再起動する。

⑥OpenAMの管理コンソールにログインする。

⑦「アクセス制御」タブ→「/(最上位のレルム)」を押下し、「データストア」タブを押下する。

⑧「新規」ボタンを押下する。「ステップ 1/2: データストアのタイプを選択」において、以下を設定する。入力後、「次へ」を押下する。
・名前:任意の値
・タイプ:データベースリポジトリ (アーリーアクセス)



⑨「ステップ 2/2: 新規データストア - データベースリポジトリ (アーリーアクセス)」において、MySQLの設定を行う。設定後、「終了」を押下する。
主な変更点は以下である。

データベースへ接続するためのパスワード:***
JDBC ドライバ URL:jdbc:mysql://127.0.0.1:3306/user_db
データベースに接続するユーザー:db_user
 

⑩「データストア」タブにおいて、既存の「embedded」(OpenDJ)を削除する。

⑪「対象」→「ユーザ」タブにおいて、「新規」ボタンを押下し、ユーザを作成する。正常にユーザが作成されることを確認する。また、以下のOpenAMのデバックログにエラーが出力されていないことを確認する。

C:\Users\yasu-bushi\opensso\opensso\debug\
                                                  Configuration
                                                  IdRepo


2012年11月11日日曜日

OpenID Simple Registration Extension


OpenID Attribute Exchange」では、OpenID Attribute Exchange 1.0を使用し、ユーザの属性情報をOPから取得した。
ここでは、Simple Registration Extensionを使用して取得してみる。

■ 「consumer_redirect.jsp」の改造
「consumer_redirect.jsp」において、SRegRequestクラスを作成し、認証要求のクラスであるAuthRequestにアタッチする。

-------------------------------------------------------------------------------------------------------------

            // create Simple Registration Exchange
            SRegRequest sregReq = SRegRequest.createFetchRequest();
            // set attribute
            sregReq.addAttribute("gender", true);
            // attach the extension to the authentication request
            authReq.addExtension(sregReq);
-------------------------------------------------------------------------------------------------------------

さあ、確認しようと思ったら、どうやらYahoo!Japanは、Attribute Exchangeはサポートしているが、Simple Registration Extensionまではサポートしていないらしい。
がっくり。。。。

http://developer.yahoo.co.jp/other/openid/extension.html

OpenID Attribute Exchange

OpenID4Java付属のサンプルアプリを使用し、Yahoo!JapanとOpenID認証する」で使用したRPサンプリアプリケーションでは、OPに認証要求しか実施していない。
今回は、OPからユーザの属性情報も取得できるように、RPサンプルアプリケーションをちょこっと改造する。

OpenID2.0規約として、ユーザの属性情報を取得する仕様は、以下の2つが規定されている。

・Simple Registration Extension
→認証要求のプロトコルの中に、要求する属性名を指定する方法。

・Attribute Exchange
→認証要求とは別のプロトコルを使用し、属性取得を要求する方法。

OPとして使用するYahoo!Japanでは、以下のユーザの属性情報を取得できる。

http://developer.yahoo.co.jp/other/openid/extension.html

今回は、「Attribute Exchange」を使用し、性別情報を取得する。

■ OpenID4Java RPサンプルアプリケーションのロジック
サンプルアプリケーションでは、いくつかjspファイルがあり、「consumer_redirect.jsp」で認証要求を作成している。ソースをみてみると、以下のようになっている。
Attribute Exchangeを実装するには、認証要求の作成後に、ロジックを追加する必要がある。

【consumer_redirect.jspから一部抜粋】
---------------------------------------------------------------

(・・・中略・・・)

// RPの機能を提供するConsumerManagerをnew
ConsumerManager newmgr=new ConsumerManager();
// アソシエーションフェーズで使用するオブジェクトをセット
newmgr.setAssociations(new InMemoryConsumerAssociationStore());
// リプレイ攻撃を防ぐNonce値をセット
newmgr.setNonceVerifier(new InMemoryNonceVerifier(5000));


(・・・中略・・・)


// perform discovery on the user-supplied identifier
// OPのディスカバリ
List discoveries = manager.discover(openid);

// attempt to associate with an OpenID provider
// and retrieve one service endpoint for authentication
// OPとのアソシエーション
DiscoveryInformation discovered = manager.associate(discoveries);

// store the discovery information in the user's session
session.setAttribute("openid-disco", discovered);

// obtain a AuthRequest message to be sent to the OpenID provider
// 認証要求の作成
AuthRequest authReq = manager.authenticate(discovered, returnToUrl);

(・・・中略・・・)
---------------------------------------------------------------

■ 「consumer_redirect.jsp」の改造
「consumer_redirect.jsp」において、属性情報の要求クラスに相当するFetchRequestクラスを使用する。Yahoo!Japan(OP)からは、性別(http://axschema.org/person/gender)を取得するために、addAttributeメソッドで要求対象の属性情報を設定する。

---------------------------------------------------------------

// Attribute Exchangeリクエストを作成
FetchRequest fetch = FetchRequest.createFetchRequest();
// 属性情報の設定
fetch.addAttribute("gender",                                           // attribute alias
                         "http://axschema.org/person/gender",    // type URI
                          true);                                                // required

// attach the extension to the authentication request
// 認証要求にセット
 authReq.addExtension(fetch);

---------------------------------------------------------------

上記を改造した後、marvenコマンドでwarファイルを再作成する。
OPで認証した後に、以下のような、OpenIDに加えて、属性情報をRPに通知してよいかの同意画面が表示される。


また、OPからRPに通知されたURLをみてみると、以下のように属性情報(gender)が通知されていることがわかる(下線部分)。

http://localhost:8080/simple-openid/consumer_returnurl.jsp?openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.return_to=http%3A%2F%2Flocalhost%3A8080%2Fsimple-openid%2Fconsumer_returnurl.jsp&openid.claimed_id=https%3A%2F%2Fme.yahoo.co.jp%2Fa%2F***&openid.identity=https%3A%2F%2Fme.yahoo.co.jp%2Fa%2F***&openid.assoc_handle=***&openid.realm=http%3A%2F%2Flocalhost%3A8080%2Fsimple-openid%2Fconsumer_returnurl.jsp&openid.ns.ax=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.ax.mode=fetch_response&openid.ax.value.gender=M&openid.response_nonce=***&openid.signed=assoc_handle%2Cclaimed_id%2Cidentity%2Cmode%2Cns%2Cop_endpoint%2Cresponse_nonce%2Creturn_to%2Csigned%2Cax.value.gender%2Cax.type.gender%2Cns.ax%2Cax.mode%2Cns.pape%2Cpape.auth_policies%2Cpape.auth_level.ns.nist%2Cpape.auth_level.nist&openid.op_endpoint=https%3A%2F%2Fopen.login.yahooapis.jp%2Fopenid%2Fop%2Fauth&openid.ax.type.gender=http%3A%2F%2Faxschema.org%2Fperson%2Fgender&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.auth_policies=http%3A%2F%2Fschemas.openid.net%2Fpape%2Fpolicies%2F2007%2F06%2Fnone&openid.pape.auth_level.ns.nist=http%3A%2F%2Fcsrc.nist.gov%2Fpublications%2Fnistpubs%2F800-63%2FSP800-63V1_0_2.pdf&openid.pape.auth_level.nist=0&openid.sig=***


2012年11月10日土曜日

OpenID4Java付属のサンプルアプリを使用し、Yahoo!JapanとOpenID認証する

OpenID4Javaでは、OpenID2.0認証用のJavaライブラリを提供する。
このライブラリに付属するRPサンプリアプリケーションを使用し、Yahoo!Japan(OP)と認証してみる。

おおざっぱなシステム構成およびシーケンスは以下になる。
■前提条件
・以下のURLにアクセスし、OpenIDを予め発行しておく。
http://openid.yahoo.com/

・RPの構築環境に、JavaおよびApache marvenをインストールしていること。


■設定手順
①以下のサイトからOpenID4Java媒体をダウンロードする(openid4java-full-0.9.5.593.tar.gzを使用)。ダウンロードした媒体を任意のディレクトリに解凍する。

http://code.google.com/p/openid4java/

②コマンドプロンプトを起動し、以下のmavernコマンドを実行して、RPサンプリアプリケーションのwarファイルを作成する。

--------------------------------------------------------------------------------

d:\>cd d:\openid4java-full-0.9.6.662\samples\simple-openid
d:\openid4java-full-0.9.5.593\samples\simple-openid>d:\apache-maven-3.0.4\bin\mvn war:war
--------------------------------------------------------------------------------

③RPサンプリアプリケーションはJetty上で動かす。mavernコマンドを実行してJettyを起動する。

--------------------------------------------------------------------------------
d:\openid4java-full-0.9.5.593\samples\simple-openid>d:\apache-maven-3.0.4\bin\mvn jetty:run
--------------------------------------------------------------------------------

以下にアクセスし、正常にアクセスできることを確認する。
http://localhost:8080/simple-openid/


④RP画面のOpenID欄に、Yahooで発行したOpenIDを入力し、「送信」ボタンを押下する。押下後、Yahoo(OP)に対して、OPのディスカバリとアソシエーションのプロトコルが実行される。

--------------------------------------------------------------------------------

[INFO] Discovery - Starting discovery on URL identifier: https://me.yahoo.co.jp/a/*********
[INFO] YadisResolver - Yadis discovered 1 endpoints from: https://me.yahoo.co.jp/a/********
[INFO] Discovery - Discovered 1 OpenID endpoints.  ★OP検索完了!
[INFO] ConsumerManager - Trying to associate with https://open.login.yahooapis.jp/openid/op/auth attempts left: 4
[WARN] HttpMethodBase - Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.
[INFO] ConsumerManager - Associated with https://open.login.yahooapis.jp/openid/op/auth handle: *******  ★アソシエーション完了!
[INFO] ConsumerManager - Creating authentication request for OP-endpoint: https://open.login.yahooap is.jp/openid/op/auth claimedID: https://me.yahoo.co.jp/a/****    OP-specific ID: https://me.yahoo.co.jp/a/******* ★認証要求の作成完了!
--------------------------------------------------------------------------------


⑤RPからOPに認証要求をPOSTするタイミングで、画面に「Continue」ボタンが表示される。「continue」ボタンを押下する。


⑥Yahoo!Japan側のログイン画面が表示されるため、ID/PWを入力する。

⑦認証に成功すれば、OpenIDをRPに通知してよいかを求める同意画面が表示される。「同意する」ボタンを押下する。


⑧OPからRPへ認証応答が通知され、RP側でレスポンスの内容を検証する。検証OKであれば、以下のように画面が表示される。



--------------------------------------------------------------------------------

[INFO] ConsumerManager - Verifying authentication response...
[INFO] ConsumerManager - Received positive auth response.
[INFO] ConsumerManager - Found association: ****-- verifying signature locally...
[INFO] ConsumerManager - Verification succeeded for: https://me.yahoo.co.jp/a/*********
--------------------------------------------------------------------------------

感想:Yahoo!Japanとすごく簡単につながった!!!

2012年10月6日土曜日

eclipse rubyプラグインのインストール

eclipseに、rubyプラグインをインストールする。

①「ヘルプ」メニューから「新規ソフトウェアのインストール」を選択する。


②作成対象に「http://download.aptana.com/tools/radrails/plugin/install/radrails-bundle」を入力し、「追加」ボタンを押す。名前欄に任意な値に設定して「OK」ボタンを押す。


③「Rails」を選択し、「次へ」ボタンを押下する。次に、「インストール詳細画面」に遷移し、「次へ」ボタンを押下する。


④「ライセンスのレビュー」画面に遷移し、同意を選択して「完了」ボタンを押す。インストールが開始される。

⑤インストールが完了した後、eclipseを再起動する。「ファイル」メニュー→「新規」から「その他」を選択する。「Ruby」プロジェクトが作成できることを確認する。

2012年9月2日日曜日

ERROR -- : SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

「jii」を起動したら、ログに以下のエラーメッセージが出力されていた。

E, [2012-09-01T23:42:39.771973 #220] ERROR -- : SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

上記のエラーは、証券サイトにHTTPS通信でアクセスした際、サーバ証明書の検証で失敗していることが原因である。
以下の手順で、ルートCA証明書を設定する。

①以下のサイトからcacert.penをダウンロードし、任意のディレクトリに格納する。

http://curl.haxx.se/ca/cacert.pem

②DOSプロンプトを起動し、以下のようにSSL_CERT_FILE環境変数でpemのパスを設定する。

c:\Ruby187\lib\ruby\gems\1.8\gems\jiji-1.2.8\lib\jiji>set SSL_CERT_FILE=C:\Ruby187\lib\ruby\gems\1.8\gems\jiji-1.2.8\cacert.pem

③jijiを再起動する。ログを確認し、正常に動作することを確認する。


# Logfile created on Sun Sep 02 12:11:00 +0900 2012 by logger.rb/1.2.6
I, [2012-09-02T12:11:00.803463 #6808]  INFO -- : collector start
I, [2012-09-02T12:11:02.437556 #6808]  INFO -- : collector finished


2012年9月1日土曜日

フリーな自動売買FXシステム 「jiji」

Rubyで書かれている自動売買FXシステムで「jiji」というものがあり、フリーということなので早速インストールしてみる。

■前提
・OSはWindows 7。
・Ruby 1.8.*系をインストール済みであること。

■設定手順
①DOSコマンドプロンプト上から、以下のgemコマンドを実行する。

C:\Users\yasu-bushi>gem sources -a http://gems.github.com
C:\Users\yasu-bushi>gem install gemcutter
C:\Users\yasu-bushi>gem install tumble
C:\Users\yasu-bushi>gem install jiji --no-ri --no-rdoc

②jijiコマンドを実行し、証券会社のID/PWを入力する。
 現状、以下の3つの証券会社をサポートしている。
  ・クリック証券
  ・クリック証券(デモ)
  ・SBI証券

C:\Users\yasu-bushi>jiji setting
> Please select a securities.
    1 : CLICK Securities
    2 : CLICK Securities DEMO
    3 : SBI Securities
2
> Please input a user name of CLICK Securities DEMO.
********
> Please input a password of CLICK Securities DEMO.
*********
> Please input a proxy. example: http://example.com:80 (default: nil )
> Please input a data directory of jiji. (default: ~/.jiji )
> Please input a server port. (default: 7000 )

create. C:/Users/yasu-bushi/.jiji/base
create. C:/Users/yasu-bushi/.jiji/agents/moving_average_agent.rb
create. C:/Users/yasu-bushi/.jiji/shared_lib/moving_average.rb
create. C:/Users/yasu-bushi/.jiji/shared_lib/system/cross.rb
create. C:/Users/yasu-bushi/.jiji/shared_lib/system/position_manager.rb
create. C:/Users/yasu-bushi/.jiji/shared_lib/system/signal.rb
Setting was completed!

③jijiを起動する。

C:\Users\yasu-bushi>jiji start
jiji started.

④「http://localhost:7000/」にアクセスする。
(初回起動時はチャートが表示されず、レート情報を収集後に表示される模様です)


 
 

2012年4月15日日曜日

Shibboleth2.4.3 SAML SP インストール

Shibboleth SPのインストール手順についてまとめる。


①以下のサイトから、.msiをダウンロードする。
http://shibboleth.net/downloads/service-provider/2.4.3/win64/shibboleth-sp-2.4.3-win64.msi

②ダウンロードした.msiを実行する。以下のようなインストール画面が表示されるため、「Next」を実行する。

③ライセンスの同意画面が表示されるため、「I accept…」を選択し、「Next」を押下する。

④インストール先ディレクトリの確認画面が表示される。そのまま「Next」を押下する。

⑤shibdデーモンで利用するポートの確認画面が表示される。そのまま(デフォルト1600)、「Next」を押下する。

⑥ISAPI Filterで利用する拡張子の確認画面が表示される。そのまま「Next」を押下する。

⑦最終確認画面が表示される。そのまま「Next」を押下する。インストールが開始される。


⑧インストール完了画面が表示される。「Finish」ボタンを押下する。


⑨Windowsを再起動する。

 「C:\opt\shibboleth-sp\var\log\shibboleth」配下に、shibd.logが出力されていることを確認する。
----------------------------------------------------------

2012-04-15 18:37:01 INFO Shibboleth.Listener : registered remoted message endpoint (default::getHeaders::Application)
2012-04-15 18:37:01 INFO Shibboleth.Listener : listener service starting

----------------------------------------------------------




OpenSolaris10 Flash Player 11 インストール

  1. 以下のサイトからインストール媒体(flash_player_11_solaris_x86.tar.bz2 )をダウンロードする。
    http://get.adobe.com/jp/flashplayer/
  2. ダウンロードした媒体を解凍する。
    # bunzip2 flash_player_11_solaris_x86.tar.bz2
    # tar xvf flash_player_11_solaris_x86.tar
    flash_player_solaris_11_2_202_223_x86/
    flash_player_solaris_11_2_202_223_x86/libflashplayer.so
  3. 解凍したlibflashplayer.soを、firefoxの所定のプラグインディレクトリにコピーする。
    # mkdir  /usr/lib/firefox3.5.3/plugins
    # cp flash_player_solaris_11_2_202_223_x86/libflashplayer.so /usr/lib/firefox3.5.3/plugins
    # ls -l /usr/lib/firefox3.5.3/plugins/libflashplayer.so

2012年4月9日月曜日

You have already activated rake 0.9.2.2, but your Gemfile requires rake 0.8.7

rakeのバージョン不一致が原因。
新バージョンのrakeをアンインストールして、古いバージョンものをインストールする。

$ gem uninstall rake --version 0.9.2.2
Successfully uninstalled rake-0.9.2.2

$ gem install rake --version 0.8.7
Successfully installed rake-0.8.7
1 gem installed
Installing ri documentation for rake-0.8.7...
Installing RDoc documentation for rake-0.8.7...

2012年4月8日日曜日

OpenAM10.0 OAuth2.0を使ってみる

OpenAM10.0が提供するConsumer機能を使用してみる(現時点では、OpenAMにOP機能は提供されていない)。
連携先のOPは、Facebookを使用する。
①OpenAMにおいて、アカウント"taro"を作成する。
※Facebookとのアカウントの連携は、メールアドレスを利用して実施する。そのため、作成したアカウントには、facebook側のメールアドレスを必ず設定する必要がある。

②以下のURLにアクセスし、ConsumerとしてOpenAMのURLを登録する。このとき、自動作成されたAPPキーとAPPシークレットをメモしとく。
https://developers.facebook.com/apps


③OpenAMの管理コンソールにログインする。次に、「アクセス制御」タブを押下する。

④「/(最上位のレルム)」を押下し、「認証」タブを押下する。次に、「モジュールインスタンス 」において、「新規」ボタンを押下する。
⑤「新規モジュールインスタンス」において、以下の値を入力する。「了解」を押下する。
・名前:任意の値(例.facebook)
・タイプ:OAuth2.0

⑥「/(最上位のレルム)ー認証」の「モジュールインスタンス 」において、作成した認証モジュール"facebook"を押下する。以下の値を入力する。「保存」を押下する。
・Client Id:②で取得したAPPキーを入力。
・Client Secret:②で取得したAPPシークレットを入力。
・Proxy URL:環境に合わせて、URLを修正する。
例.http://openam.yasuyasu.com:48080/openam/oauth2.0c/OAuthProxy.jsp
※上記以外の項目は、デフォルトのままで動作した。

⑦認証モジュールにfacebookを明に指定して、OpenAMの管理コンソールにログインする。
http://openam.yasuyasu.com:48080/openam/?module=facebook

⑧facebookの認証画面が表示されるため、ログインする。

⑨ニュースフィードへのアクセスを求める同意画面が表示されるため、「認可する」を押下する。

⑩OpenAMのパスワード確認画面が表示されるため、入力する。「Submit」を押下する。
※最初のアクセスのみ表示される。2回目以降のアクセスでは、アカウントが連携されているため、画面は表示されない。
  

⑪作成したユーザ情報が表示されることを確認する。






OpenAM10.0 REST APIを使用してみる

OpenAM10.0では、以下のRESTなAPIを提供する。


REST Operation
URL
Parameters
Response
認証要求
http://localhost:8080/
opensso/identity/authenticate
username
password
uri
subjectid
認証トークンの検証
http://localhost:8080/
opensso/identity/isTokenValid
tokenid
boolean
ログアウト
http://localhost:8080/
opensso/identity/logout
subjectid
void
認可要求
http://localhost:8080/
opensso/identity/authorize
uri
action
subjectid
boolean
ログ要求
http://localhost:8080/
opensso/identity/log
appid
subjectid
logname
message
void
属性検索
http://localhost:8080/
opensso/identity/search
filter
attributes_names
attribute_values_attributename
identitydetails
属性取得
http://localhost:8080/
opensso/identity/attributes
attributes_names
subjectid
userdetails
Read
http://localhost:8080/
opensso/identity/read
name
attributes_names
admin
identitydetails
属性作成
http://localhost:8080/
opensso/identity/create
identity_name
identity_attribute_names
identity_attribute_values_attributename
admin
void
属性更新
http://localhost:8080/
opensso/identity/update
identity_name
identity_attribute_names
identity_attribute_values_attributename
admin
void
属性削除
http://localhost:8080/
opensso/identity/delete
identity_name
admin
void
【使用例】
①認証要求
http://openam.yasuyasu.com:48080/openam/identity/authenticate?username=amadmin&password=ampassword









②認証トークンの検証
http://openam.yasuyasu.com:48080/openam/identity/isTokenValid?tokenid=AQIC5wM2LY4SfcyDOrkYBnVe87y1F2kTCoU6ipf8gsGcsG4.*AAJTSQACMDE.*









2012年4月7日土曜日

OpenAM10.0 インストール手順

OpenAM10.0のインストール手順について説明する。
なお、WebサーバはGlassfish V2を使用する。
※インストール/設定手順は、OpenAM9.X系とほぼ同じ。

①Glassfishにおいて、domainを作成する。
c:\glassfish>asadmin create-domain --adminport 44848 --instanceport 48080 --save
masterpassword=true --savelogin=true openam10

②作成したdomainを起動する。
c:\glassfish>asadmin start-domain openam10

③以下のサイトからダウンロードしたOpenAM10のZIPファイルを解凍する。解凍後、deployable-warフォルダ配下にあるopensso.warをopenam.warに変名し、Glassfishのautodeployフォルダに配置する。
http://www.forgerock.org/openam.html

④以下のURL(OpenAM設定画面)にアクセスする。
http://openam.yasuyasu.com:48080/openam

⑤「カスタム設定」の「新しい設定の作成」を押下する。











⑥「手順1:一般」において、デフォルトユーザーのパスワードを入力する。「次へ」を押下する。













⑦「手順 2: サーバー設定」において、サーバ情報を設定する。「次へ」を押下する。













⑧「手順 3: 設定データストア設定」において、設定データを格納するデータストアを設定する。「次へ」を押下する。














⑨「手順 4: ユーザーデータストア設定」において、ユーザデータを格納するデータストアを設定する。ここでは、OpenAM付属のデータストア(OpenDJ)を使用する。「次へ」を押下する。















⑩「手順 5: サイト設定」において、ロードバランサの設定を行う。負荷分散は行わないため、そのまま「次へ」を押下する。










⑪「手順 6: デフォルトのポリシーエージェントユーザー」において、デフォルトのポリシーエージェントのパスワードを設定する。OpenAMの管理パスワードと異なるものを設定する必要があることに注意。「次へ」を押下する。










⑫「設定ツールの概要と詳細」において、「設定の作成」ボタンを押下する。OpenAMの設定が開始される。












⑬設定が完了後、「ログインへ進む」リンクを押下する。















⑭以下の画面が表示されることを確認する。














⑮管理ユーザのID/PWを入力し、OpenAMにログインできることを確認する。また、バージョンがOpenAM10であることを確認する。



2012年4月4日水曜日

SAML 2.0 Session Token Profile 1.0


セッション管理を行う運用において、IdPSP側のセッション情報を管理するケースで使用する。
(Session Tokenのフォーマットを規定しており、Session TokenはSAMLアサーション形式になる)

IdPにおいて、SP向けのSession Tokenを発行して、SPではそのままこのSession Tokenを利用して、セッションを確立する。
このSession Token内の属性ステートメントには、セッションを管理するための情報(セッションIDやセッションの有効時間など)が含まれる。

■SAMLアサーションの例
(太字箇所がセッションに関連する情報)

<saml:Assertion ID="_a75e1c55-01d7-40cc-929f-d627c72ebdfc"
   IssueInstant="2010-11-25T13:16:02Z" Version="2.0"
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
    xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
    xmlns:xs=”http://www.w3.org/2001/XMLSchema”
    xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
  <saml:Issuer>sessionauthority.example.com</Issuer>
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
      <ds:CanonicalizationMethod
        Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
      <ds:SignatureMethod
        Algorithm="http://www.w3.org/2001/04/xmldsig-more#hmac-sha256"/>
      <ds:Reference URI="#_a75e1c55-01d7-40cc-929f-d627c72ebdfc">
        <ds:Transforms>
          <ds:Transform
            Algorithm="http://www.w3.org/2000/09/xmldsig#envelopedsignature"/>
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
            <InclusiveNamespaces PrefixList="#default saml ds xs xsi"
              xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/>
          </ds:Transform>
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
        <ds:DigestValue>Kcl ... </ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue> ... </ds:SignatureValue>
    <ds:KeyInfo>
      <ds:KeyName>SessionKey003<ds:KeyName/>
    </ds:KeyInfo>
  </ds:Signature>
  <saml:Subject>
    <saml:NameID NameQualifier="Repository6">John.Smith</NameID>
    <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"
      <saml:SubjectConfirmationData Address="192.168.1.2"
    </saml:SubjectConfirmation>
  </saml:Subject>
  <saml:Conditions NotBefore="2010-11-25T13:16:02Z"
    NotOnOrAfter="2010-11-25T13:20:02Z">
  </saml:Conditions>
  <saml:AuthnStatement AuthnInstant="2010-11-25T13:15:13Z">
    <saml:AuthnContext>
      <saml:AuthnContextClassRef>
          urn:oasis:names:tc:SAML:2.0:ac:classes:Password
      </saml:AuthnContextClassRef>
    </saml:AuthnContext>
  </saml:AuthnStatement>
  <saml:AttributeStatement>
    <saml:Attribute NameFormat=
                 "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
      Name="urn:oasis:names:tc:SAML:2.0:profiles:session:sessionId"
      xsi:type="xs:string" >
        258673
    </saml:Attribute>
    <saml:Attribute NameFormat=
                 "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
 Name="urn:oasis:names:tc:SAML:2.0:profiles:session:AuthenticationStrength"
      xsi:type="xs:integer" >
        20
    </saml:Attribute>
    <saml:Attribute NameFormat=
                 "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
    Name="urn:oasis:names:tc:SAML:2.0:profiles:session:TimeLastActive"
    xsi:type="xs:dateTime" >
        2010-11-25T13:16:02Z
    </saml:Attribute>
    <saml:Attribute NameFormat=
                 "urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
  Name="urn:oasis:names:tc:SAML:2.0:profiles:session:TokenFormatVersion"
      xsi:type="xs:string" >
       1.0
    </saml:Attribute>
  </saml:AttributeStatement>
</saml:Assertion>

SAML2.0 Attribute Predicate Profile 1.0


IdPからSPにユーザの個人情報(実際の属性の値)を通知したくないという前提で、SPが、特定のユーザに対して、ある条件を満たしているかをIdPに問い合わせするプロファイルである。
(SP側で、個人情報の取り扱い違反における賠償請求を回避するのがプロファイルの主な目的)

例えば、SP側でチャットサービスを運用しているケースにおいて、ある利用者が18歳以上かをチェックしたい場合に、IdPに対して利用者が18歳以上かをXACML仕様を使用して問い合わせすることができる。
(IdPからSPに対しては、実際の利用者の年齢を通知しない)

2012年4月1日日曜日

OpenAM 10.0 OAuth2.0について

OpenAM10.0がOAuth2.0をサポートしているとのことなので調べてみた。

(参照URL)
https://wikis.forgerock.org/confluence/display/openam/OAuth+2.0+Authentication+%28Facebook%2C+Google%2C+MSN%2C+etc%29

調査した結果、以下のことが判明した。
・現時点では、OPの機能はサポートしておらず、Consumer側のみをサポートしている。
・OPとしては、Google、Facebook、MNSの名前が挙がっていた(左記のOPには確実に連携できる?)。
・今後も、バージョンアップされる模様。

(OAuth2.0 フロー)

2012年1月8日日曜日

Liberty仕様をサポートしている「Lasso」

LassoというC言語で開発されたフリーソフトウェアがあるらしい。
Liberty ID-FF1.2、ID-WSFやSAML2.0などの仕様をサポートしているとのこと。
ちょっと調べてみよう。

http://lasso.entrouvert.org/

ちなみに、公開サイトには、以下をサポートしている旨の記載があった。
Supported Liberty protocol profiles
FeatureIdPSP
Single Sign-On using Artifact ProfileOKOK
Single Sign-On using Browser POST ProfileOKOK
Single Sign-On using LECP ProfileOKOK
Register Name Identifier - (IdP Initiated) - HTTP-RedirectOKOK
Register Name Identifier - (IdP Initiated) - SOAP/HTTPOKOK
Register Name Identifier - (SP Initiated) - HTTP-RedirectOKOK
Register Name Identifier - (SP Initiated) - SOAP/HTTPOKOK
Federation Termination Notification (IdP Initiated) - HTTP-RedirectOKOK
Federation Termination Notification (IdP Initiated) - SOAP/HTTPOKOK
Federation Termination Notification (SP Initiated) - HTTP-RedirectOKOK
Federation Termination Notification (SP Initiated) - SOAP/HTTPOKOK
Single Logout (IdP Initiated) ­ HTTP-RedirectOKOK
Single Logout (IdP Initiated) ­ HTTP-GETOKOK
Single Logout (IdP Initiated) ­ SOAPOKOK
Single Logout (SP Initiated) ­ HTTP-RedirectOKOK
Single Logout (SP Initiated) ­ SOAPOKOK
Identity Provider Introduction (cookie)OKOK
Attribute Query SOAPOKOK
Authorization Decision Query SOAPOKOK