2013年2月4日月曜日

Windows OS上でTFTPを使用する

TFTPとは、FTPを簡素化したもので、ユーザ認証をせずにファイル転送を行うことができるファイル転送用のプロトコルである。
Windows OS上でTFTPコマンドを動かす。


  1. 「コントロールパネル」→「プログラム」→「プログラムと機能」を開く。
  2. 「プログラムと機能」画面上で、「Windowsの機能の有効化または無効化」を押す(30秒ほど待つ)。
  3. 「Windowsの機能の有効化または無効化」画面を開いたら、「TFTPクライアント」にチェックを入れる。最後に「OK」ボタンをおす。
以上の手順で、TFTPコマンドを使用可能となる。




2013年2月2日土曜日

JdbcSimpleUserDAOにおけるグループ操作の実装

現状のOpenAM最新版(10.0.0)において、MySQLへアクセスするDAOクラス「JdbcSimpleUserDAO」では、グループ操作に関するメソッドが未実装である。
本稿では、グループ関連のメソッドを実装する。
  • 「JdbcSimpleUserDAO」において、グループ操作に関するメソッドとしては以下のメソッドがある。
---------------------------------------------------------------------------
    public Set<String> getMembers(String groupName, String membershipIdAttributeName) {
        return Collections.EMPTY_SET;
    }
   
    public Set<String> getMemberships(String userName, String membershipIdAttributeName) {
        return Collections.EMPTY_SET;
    }
 
    public void deleteGroup(String groupName, String membershipIdAttributeName) {      
    }
 
    public void createGroup(String groupName, String membershipIdAttributeName){
    }
 
    public void deleteMembersFromGroup(Set<String> members, String groupName, String membershipIdAttributeName) {
    }
 
    public void addMembersToGroup(Set<String> members, String groupName, String membershipIdAttributeName) {
    }
 
    public Map<String, Map<String, Set<String>>>  searchForGroups(
            String membershipIdAttributeName, int limit, String idPattern,
            Set<String> attributesToFetch, String filterOperand,
            Map<String, Set<String>> avPairs) {
     
        return Collections.EMPTY_MAP;
    }
 
    public Map<String, Set<String>> getGroupAttributes(String groupName,
            String membershipIdAttributeName, Set<String> attributesToFetch) {
        return Collections.EMPTY_MAP;
    }
---------------------------------------------------------------------------
  •  グループおよびユーザのテーブルにおける関係は、以下を想定する。

<テーブル作成コマンド>
mysql> create table groups(group_name varchar(50), cn varchar(50), primary key(g
roup_name));
Query OK, 0 rows affected (0.04 sec)
mysql> create table usergroupmapping(group_name varchar(50), uid varchar(50), pr
imary key(group_name, uid), foreign key(uid) references users(uid) ON UPDATE CAS
CADE ON DELETE CASCADE,  foreign key(group_name) references groups(group_name) ON UPDATE CASCADE ON DELETE CASCADE) engine=innodb;
Query OK, 0 rows affected (0.01 sec)

<開発内容>
  • 既存の「com.sun.identity.idm.plugins.database.JdbcSimpleUserDAO」クラスを継承し、「JdbcUserGrourpDAO」クラスを新規に作成する。
  • 開発環境はEclipseを使用する。Eclipseには、予めamserver.jarおよびopensso-sharedlib.jarへのクラスパスを通りしておく。

①Eclipse環境において、以下のような「JdbcUserGrourpDAO」クラスを作成する。

   【ソース公開先】
   https://docs.google.com/file/d/0Bwo1aq16K4DXVUxBZTdsR3VEQzA/edit

②Explise上でjarファイルを作成し、以下の格納場所に配備する。
(またはWebサーバ上のクラスパスに設定する)

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


③glassfishを再起動する。

④OpenAMの管理コンソールにログインする。「アクセス制御」タブ→「/(最上位のレルム)」→「データストア」タブを押下する。

⑤データベースのリポジトリを選択し、「データベースのデータアクセスオブジェクトプラグインのクラス名:」にカスタムしたDAOクラスを設定する。「保存」ボタンを押下する。

⑥glassfishを再起動する。

⑦OpenAMの管理コンソール上からグループを操作(作成・ユーザの追加/削除)し、正常に動作することを確認する。

















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