開発者向けチュートリアル ガイド (UNIX/Win)

HP OpenView Select Access SDK
Windows®、 UNIX®、 および HP-UX® オペ レーテ ィ ング シ ス テム
ソ フ ト ウ ェ ア バージ ョ ン : 6.2
開発者向けチ ュ ー ト リ アル ガ イ ド
ド キ ュ メ ン ト 発行日 : 2006 年 9 月
ソ フ ト ウ ェ ア リ リ ース日 : 2006 年 9 月
ご注意
保証について
HP 製品お よ びサービ ス に関す る 保証は、 こ れ ら の製品お よ びサービ ス に付随す る 明示的保証書に記載 さ れた内容
に限定 さ れます。 本文書には、 追加の保証を規定 し てい る 箇所はあ り ません。 HP は、 本文書に含まれ る 技術的ま
たは編集上の誤 り や遺漏に対 し て、 責任を負わない も の と し ます。
こ の情報は予告な し に変更 さ れ る こ と があ り ます。
法律上の権利の制限について
本文書で取 り 扱 う コ ン ピ ュ ー タ ソ フ ト ウ ェ アは秘密情報であ り 、 その所有、 使用、 複製には、 HP か ら 有効な ラ イ
セ ン ス を得 る 必要があ り ます。 FAR 12.211 お よ び 12.212 に従っ て、 商用 コ ン ピ ュ ー タ ソ フ ト ウ ェ ア、 コ ン ピ ュ ー
タ ソ フ ト ウ ェ アの ド キ ュ メ ン ト 、 お よ び商用ア イ テ ム の技術デー タ は、 ベン ダの標準商用 ラ イ セ ン ス に基づいて
米国政府に ラ イ セ ン ス が付与 さ れ ます。
著作権について
© Copyright 2004-2006 Hewlett-Packard Development Company, L.P.
商標について
HP OpenView Select Access には、 サー ド パーテ ィ 製 ソ フ ト ウ ェ アが含ま れてい ます。 HP OpenView Select Access で
使用 さ れ る ソ フ ト ウ ェ アは次の と お り です。
•
Apache Software Foundation 開発の ソ フ ト ウ ェ ア
•
Claymore Systems 社開発の ソ フ ト ウ ェ ア
•
Eric Young 氏開発の暗号化 ソ フ ト ウ ェ ア
•
Cryptix Foundation 社開発の暗号化 ソ フ ト ウ ェ ア
•
cURL、 Copyright 2000 Daniel Stenberg.
•
JavaBeans Activation Framework バージ ョ ン 1.0.1 Sun Microsystems, Inc.
•
JavaMail バージ ョ ン 1.2 Sun Microsystems, Inc.
•
Alexandria Software Consulting 開発の JavaService ソ フ ト ウ ェ ア
•
JClass LiveTable、 Copyright 2002 Sitraka Inc.
•
OpenSSL ツールキ ッ ト で使用す る OpenSSL プ ロ ジ ェ ク ト
•
Protomatter Syslog、 Copyright 1998-2000 Nate Sammons.
•
SoapRMI、 Copyright 2001 Extreme! Lab, Indiana University.
その他の著作権情報については、 HP OpenView Select Access の <install_path>/3rd_party_license デ ィ レ
ク ト リ を参照 し て く だ さ い。
2
ド キ ュ メ ン ト の更新情報
こ のマニ ュ アルの表紙には、 次の識別情報が含まれてい ます。
•
ソ フ ト ウ ェ アのバージ ョ ン番号。 ソ フ ト ウ ェ アのバージ ョ ン を示 し ます。
•
ド キ ュ メ ン ト の発行日。 ド キ ュ メ ン ト の更新のたびに変更 さ れ ます。
•
ソ フ ト ウ ェ アの リ リ ース日。 ソ フ ト ウ ェ アの こ のバージ ョ ンの リ リ ース日を示 し ます。
最新版の有無や、現在使用中のド キ ュ メ ン ト が最新版かど う かを 確認する 場合は、次のサイ ト を 参照し てく ださ い。
http://ovweb.external.hp.com/lpe/doc_serv/
製品のサポー ト サービ ス に登録 し て、 本書の最新版を入手す る こ と も で き ます。 詳細は HP の担当営業 ま でお問
い合わせ く だ さ い。
3
サポー ト
次の HP OpenView サポー ト Web サ イ ト を参照 し て く だ さ い。
http://www.hp.com/managementsoftware/support
HP OpenView オ ン ラ イ ン サポー ト では、 対話型テ ク ニ カル サポー ト ツールをす ぐ にご利用いただけ ます。 次の機
能が用意 さ れてい ます。
•
マニ ュ アル類の検索
•
サポー ト ケース と 機能拡張要求の登録 と ト ラ ッ キ ン グ
•
ソ フ ト ウ ェ ア パ ッ チのダ ウ ン ロ ー ド
•
サポー ト 契約の確認、 変更、 お よ び更新
•
HP サポー ト の連絡先の確認
•
入手可能なサービ ス の確認
•
フ ォ ー ラ ムへの参加
•
ソ フ ト ウ ェ ア ト レーニ ン グの確認 と 登録
各種サポー ト のご利用の際には、 ほ と ん ど の場合、 HP Passport ユーザー と し て ご登録いただいた う えで、 サ イ ン
イ ンす る こ と が条件 と な り ます。 さ ら に、 サポー ト 契約 も 必要です。
ア ク セ ス レベルの詳細は、 次のサ イ ト を参照 し て く だ さ い。
http://www.hp.com/managementsoftware/access_level
HP Passport ID の登録は、 次のサ イ ト で行 う こ と がで き ます。
http://www.managementsoftware.hp.com/passport-registration.html
4
目次
1 Select Access API について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
対象読者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
Select Access ド キ ュ メ ン ト セ ッ ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13
各章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
2 Select Access API の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Select Access の コ ン ポーネ ン ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Select Access のカ ス タ マ イ ズ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
Select Access のプ ロ グ ラ ミ ン グ API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
Select Access の API を使用 し た カ ス タ マ イ ズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
Select Access の ソ ース フ ァ イ ル と ラ イ ブ ラ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
SDK でのサン プルの作成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
UNIX で C++ サン プルを作成す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
Windows で C++ サン プルを作成す る には. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
Windows ま たは UNIX で Java サン プルを作成す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
Windows ま たは UNIX で Web 管理 イ ン タ ーフ ェ イ ス を作成お よ び イ ン ス ト ールす る には. . . . . . . . . . .24
XML の重要性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
ルールの表現方法 と 格納方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
デー タ のエ ン コ ー ド 方法 と 通信方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
シナ リ オ : ア イ デン テ ィ テ ィ が mycompany.com へのア ク セ ス を要求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
3 GUI のカ ス タ マ イ ズ : Policy Builder API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Policy Builder について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Policy Builder API について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
Policy Builder プ ラ グ イ ンの種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
認証プ ラ グ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
イ ン ス ト ール さ れてい る 認証プ ラ グ イ ン を確認す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
承認プ ラ グ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Policy Builder API の仕組み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Policy Builder API の ク ラ ス と ユーテ ィ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Policy Builder プ ラ グ イ ンの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
新 し い Policy Builder プ ラ グ イ ン を作成す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Configuration Editor の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
Configuration Editor を作成す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
5
承認プ ラ グ イ ン のア イ コ ンの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
component.xml フ ァ イ ルの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Policy Builder プ ラ グ イ ンの イ ン ス ト ール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Policy Builder プ ラ グ イ ン を イ ン ス ト ールす る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Policy Builder プ ラ グ イ ンの削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Policy Builder プ ラ グ イ ン を削除す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
4 認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Policy Validator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Validator API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Validator API プ ラ グ イ ン の種類. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
認証プ ラ グ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
判定ポ イ ン ト プ ラ グ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Validator API の仕組み. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
Validator API の ク ラ ス と ユーテ ィ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
Policy Validator プ ラ グ イ ンのルールの作成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
プ ラ グ イ ン を作成す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
authenticate() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
decide() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
Policy Validator プ ラ グ イ ンの イ ン ス ト ール. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
Policy Validator プ ラ グ イ ンの削除. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
認証プ ラ グ イ ン の作成 : フ ァ イ ルベース の認証の例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
認証プ ラ グ イ ン のヘ ッ ダー フ ァ イ ルの組み込み. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
FileAuthenticator ク ラ ス の定数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
認証プ ラ グ イ ン の登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
factory() メ ソ ッ ド を使用 し た認証プ ラ グ イ ンの イ ン ス タ ン ス の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
認証プ ラ グ イ ン の イ ン ス タ ン ス の破棄 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
ア イ デン テ ィ テ ィ の認証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
判定ポ イ ン ト プ ラ グ イ ンの作成 : デ ィ レ ク ト リ 属性の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .68
判定ポ イ ン ト プ ラ グ イ ンのヘ ッ ダー フ ァ イ ルの組み込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
attributelogic ク ラ ス の定数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
判定ポ イ ン ト プ ラ グ イ ンの登録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
判定ポ イ ン ト プ ラ グ イ ンの イ ン ス タ ン ス の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
判定ポ イ ン ト プ ラ グ イ ンの イ ン ス タ ン ス の破棄 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
ポ リ シー ノ ー ド の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
LdapConnection / User / UserSource / UserCache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
サン プル attributelogic の作成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
5 セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
Enforcer プ ラ グ イ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
Enforcer API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
6
Enforcer API の仕組み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
Enforcer プ ラ グ イ ン の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
Enforcer API の ク ラ ス と ユーテ ィ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
Enforcer API の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
作成時の考慮事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
承認の必要性の判断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
ロ グ イ ン画面の表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
セ ッ シ ョ ンの状態の保持 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
シ ン グル サ イ ン オ ン の nonce の処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
複数 ド メ イ ン シ ン グル サ イ ン オ ン の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
Java Enforcer API を使用 し た Enforcer プ ラ グ イ ン の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
ServletFilter の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
Java Enforcer API の ク ラ ス と ユーテ ィ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
Enforcer の ク ラ ス の イ ン ポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
ServletFilter ク ラ スお よ び ServletTransaction ク ラ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
サーブ レ ッ ト の要求の フ ィ ル タ リ ン グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
ServletTransaction ク ラ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
Enforcer オブジ ェ ク ト の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
Enforcer オブジ ェ ク ト の新 し い イ ン ス タ ン ス の イ ン ス タ ン ス化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
承認デー タ の抽出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
承認の必要性の判断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
Policy Validator 要求の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96
Policy Validator への ク エ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
Policy Validator の応答結果の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
複数 ド メ イ ン シ ン グル サ イ ン オ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
サン プル Web アプ リ ケーシ ョ ンへの Servlet Filter の配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
C/C++ Enforcer API を使用 し た Enforcer プ ラ グ イ ンの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
Apache Enforcer プ ラ グ イ ンの例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
C/C++ Enforcer API の ク ラ ス と ユーテ ィ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
Enforcer ラ イ ブ ラ リ の組み込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
Enforcer オブジ ェ ク ト の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
承認の必要性の判断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Policy Validator 要求の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Policy Validator への ク エ リ 送信 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
応答結果の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
複数 ド メ イ ン シ ン グル サ イ ン オ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
UNIX での考慮事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
Apache プ ラ グ イ ン の登録. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
Apache Enforcer プ ラ グ イ ンの コ ンパ イ ル と イ ン ス ト ール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
COM Enforcer API を使用 し た Enforcer プ ラ グ イ ンの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126
WSE Enforcer プ ラ グ イ ンの例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126
Helper ク ラ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127
InputFilter ク ラ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127
7
OutputFilter ク ラ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128
COM Enforcer API の ク ラ ス と ユーテ ィ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
COM ラ イ ブ ラ リ の イ ン ポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
Enforcer オブジ ェ ク ト の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130
XML 要求の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
Policy Validator への ク エ リ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136
Policy Validator の応答結果の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
WSE Enforcer プ ラ グ イ ンの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
サ イ ト 固有デー タ の組み込み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
Policy Validator ク エ リ にサ イ ト のデー タ を挿入す る 方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
site_data プ ラ グ イ ン を ロ ー ド す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
6 個別化属性の使用 : Personalization API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149
Personalization API について. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149
Policy Validator での個別化のサポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150
Enforcer プ ラ グ イ ン での個別化のサポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150
サーブ レ ッ ト Enforcer プ ラ グ イ ン の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151
サーブ レ ッ ト HTTP ヘ ッ ダーへの個別化デー タ の追加 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151
Apache Enforcer プ ラ グ イ ンの例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152
環境へのエ ク ス ポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153
各種 リ ソ ース か ら の個別化デー タ の利用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154
UNIX 環境変数の表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155
サーブ レ ッ ト か ら の HTTP ヘ ッ ダーの表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155
Visual Basic を使用 し たサーバー変数の表示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
7 マルチ リ ソ ースへのク エ リ : Policy API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
ア ク セ ス制御について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
XML と Policy API について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
Java Policy API の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162
C/C++ Policy API の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163
COM Policy API の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163
8 一時的なデ ィ レ ク ト リ プ ロ フ ァ イル : User API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
User API について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
フ ァ イ ル認証プ ラ グ イ ン の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168
フ ァ イ ル オーセ ン テ ィ ケー タ の イ ン ス ト ール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
プ ラ グ イ ン を作成す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
Policy Builder プ ラ グ イ ン を イ ン ス ト ールす る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
Policy Validator プ ラ グ イ ン を イ ン ス ト ールす る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
オ ン ラ イ ン ヘルプ を イ ン ス ト ールす る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
8
フ ァ イ ル オーセ ン テ ィ ケー タ の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
認証サービ ス を作成す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
フ ァ イ ル オーセ ン テ ィ ケー タ の仕組み . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172
ア イ デン テ ィ テ ィ の認証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175
既存のプ ロ フ ァ イ ルの検索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .177
新規ア イ デン テ ィ テ ィ プ ロ フ ァ イ ルの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .178
属性の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
9 Administration API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
Administration Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
Administration API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182
例外の処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182
記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182
Administration API の入手 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183
デー タ の種類の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183
共通のデー タ の種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184
resourcePath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184
ネ ッ ト ワ ー ク リ ソ ース パ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
管理 リ ソ ース パ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
ネ ッ ト ワ ー ク 管理 リ ソ ース パ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
ス キーマ管理パ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186
機能管理パ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186
ア イ デン テ ィ テ ィ 管理パ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186
LdapSearchCriteria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187
LdapSearchCriteria のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .188
LdapSearchCriteriaFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189
LdapSearchCriteriaFilter のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190
AdminFault. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
リ ソ ース固有の API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
getResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
入力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .191
getResource のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192
ResourceServer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192
ResourceServer のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
プ ロ グ ラ ム例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
setResource. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194
入力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194
setResource の入力パ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
setResource の動作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
setResource の出力パ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196
プ ロ グ ラ ム例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196
9
searchResources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
入力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
プ ロ グ ラ ム例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
ポ リ シー固有の API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198
getPolicies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198
入力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198
出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
getPolicies のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
IdentityColumn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
IdentityColumn のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200
Policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200
Policy のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200
AccessPolicy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
AccessPolicy のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
Rule. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
Rule のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
WorkflowPolicy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
WorkflowPolicy のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
AdminPolicy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
AdminPolicy のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
SelectAuthPolicy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
SelectAuthPolicy のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
SelectAuthPropertyType. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
SelectAuthPropertyType のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206
SelectAuthProperty XML の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .208
プ ロ グ ラ ム例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209
setPolicy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
入力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
setPolicy のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
プ ロ グ ラ ム例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
ヘルパ API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
refreshValidators. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
getAuthServiceNames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
getRuleNames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
入力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
パ ス ワ ー ド の変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
ユーザー パ ス ワー ド の変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
setUserPassword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
入力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
setUserPassword のパ ラ メ ー タ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
出力 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
10
プ ロ グ ラ ム例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
エ ラ ー処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217
10 管理サーブ レ ッ ト : Web 管理イ ン タ ー フ ェ イ ス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
Web 管理 イ ン タ ーフ ェ イ ス について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
Admin ク ラ ス の メ ソ ッ ド の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220
Web 管理 イ ン タ ーフ ェ イ ス のカ ス タ マ イ ズ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
ビル ド プ ロ セ スお よ び山か っ こ (>< ま たは >#<) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
使用 さ れ る JSP フ ァ イ ル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
メ ニ ュ ーの表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
HTML メ イ ン メ ニ ュ ー. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
デー タ の表示 : デ ィ レ ク ト リ サーバーの検索結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
デ ィ レ ク ト リ サーバーの検索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226
デ ィ レ ク ト リ の Node 情報の表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229
デー タ の表示 : ア イ デン テ ィ テ ィ プ ロ フ ァ イ ル と し てのデ ィ レ ク ト リ エ ン ト リ . . . . . . . . . . . . . . . . . . . . .230
デ ィ レ ク ト リ サーバー エ ン ト リ の場所の確認 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230
デ ィ レ ク ト リ サーバー エ ン ト リ を プ ロ フ ァ イ ル と し て表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231
プ ロ フ ァ イ ルの編集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
プ ロ フ ァ イ ルのデ ィ レ ク ト リ サーバー エ ン ト リ の編集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
JSP コ ン テナ と JAR フ ァ イ ルについて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235
11 ログのカ ス タ マ イ ズ : Logger API. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237
Logger API について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237
Logger API の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
手動で C++ ロ グ フ ィ ル タ を設定す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
XML を使用 し て Java ロ グ フ ィ ル タ を設定す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
C++ の Logger API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
デフ ォ ル ト の出力先を使用 し た メ ッ セージの記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
手動に よ る ロ グ フ ィ ル タ の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240
メ ッ セージの記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241
Java の Logger API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
デフ ォ ル ト の出力先を使用 し た メ ッ セージの記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
XML を使用 し た ロ グ フ ィ ル タ の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
XML の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243
メ ッ セージの記録 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245
カ ス タ ム チ ャ ネルへの ロ グ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245
12 プ ロパテ ィ エデ ィ タ のカ ス タ マ イ ズ : サブ ジ ェ ク ト エデ ィ タ API . . . . . . . . . . . . . . . . . . . . 247
こ の章の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247
サブジ ェ ク ト エデ ィ タ API について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ンの作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248
新 し いサブジ ェ ク ト エデ ィ タ プ ラ グ イ ン を作成す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248
11
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン のプ レ ビ ュ ー . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
画面の イ ン タ ーフ ェ イ ス の作成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
getScreenName() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250
createScreen() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250
openScreen() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251
loadScreenData() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251
validateScreenData() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252
saveScreenData() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
closeScreen() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
showHelp() メ ソ ッ ド のオーバー ラ イ ド . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254
ヘルプの表示 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ンの イ ン ス ト ール と 削除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン を イ ン ス ト ールす る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン を削除す る には . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
A ク エ リ : ア ク セスの理解 と 評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
付録の概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
ク エ リ と は . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
ク エ リ の使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
XML ク エ リ の構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258
ク エ リ に含まれ る プ ロ パテ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
XML ク エ リ に対す る Policy Validator の応答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
ク エ リ ユーテ ィ リ テ ィ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
C++ 実装について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
コ マ ン ド ラ イ ンの構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
使用のシナ リ オ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
Java 実装について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
プ ロ グ ラ ムのオプシ ョ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .266
索引 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
12
1 Select Access API について
Select Access は、 コ ン ポーネ ン ト ベー ス の多層アーキ テ ク チ ャ に基づいてい ま す。 こ の独創的な
構造に よ り 、管理者お よ び開発者はシ ス テ ム を容易に設定 し 、 ア ッ プグ レー ド で き ます。 コ ン ポー
ネ ン ト ベー ス のアーキ テ ク チ ャ を利用す る こ と で、 Select Access は、 既存のあ ら ゆ る ネ ッ ト ワ ー
ク イ ン フ ラ ス ト ラ ク チ ャ に対応 し ます。 ま た、 将来的なセキ ュ リ テ ィ 要件に合わせた拡張 も 可能
です。
拡張性を実現す る ため、 Select Access には、 Select Access の機能をお客様のネ ッ ト ワ ー ク イ ン フ
ラ ス ト ラ ク チ ャ お よ びビ ジネ ス要件に合わせて カ ス タ マ イ ズす る ための コ ン ポーネ ン ト を作成す
る 各種 API が付属 し てい ます。 新たに作成 さ れた コ ン ポーネ ン ト は、 製品全体を再 イ ン ス ト ール
せずに Select Access ソ フ ト ウ ェ アに 「プ ラ グ イ ン」 す る こ と がで き ます。
対象読者
こ の文書は、ビ ジネ ス環境に合わせて HP OpenView Select Access 6.2 を カ ス タ マ イ ズ し たい と 考え
てい る 開発者向けに書かれてい ます。 特に、 Select Access API のサポー ト を目的 と し てい ます。 こ
れに よ り 、特定の ラ イ ブ ラ リ の メ ソ ッ ド ま たは関数に関す る 参照資料を見つけ る こ と がで き ます。
こ のガ イ ド は、 読者が C/C++、 Java、 お よ び COM の各プ ロ グ ラ ミ ン グ に習熟 し てい る こ と を前
提に書かれてい ます。 ま た、 Web サーバーについて、 お よ び Web サーバーが Select Access で ど の
よ う に機能す る かについて熟知 し てい る こ と も 前提 と し てい ます。
Select Access ド キ ュ メ ン ト セ ッ ト
本書では、 参照箇所 と し て Select Access の次のマニ ュ アルが紹介 さ れてい ます。 こ れ ら のマニ ュ
アルは、 Select Access の イ ン ス ト ール時に <install_path>/docs フ ォ ルダに保存 さ れます。
•
『HP OpenView Select Access 6.2 イ ン ス ト ール ガ イ ド 』 © Copyright 2000-2006 Hewlett-Packard
Development Company, L.P. (installation_guide.pdf)
•
『HP OpenView Select Access 6.2 Policy Builder ガ イ ド 』 Copyright 2000-2006 Hewlett-Packard
Development Company, L.P. (policy_builder_guide.pdf)
•
『HP OpenView Select Access 6.2 ネ ッ ト ワ ー ク 統合ガ イ ド 』 © Copyright 2002-2006
Hewlett-Packard Development Company, L.P. (integration_guide.pdf)
•
『HP OpenView Select Access 6.2 コ ン セプ ト ガ イ ド 』 © Copyright 2005 - 2006 Hewlett-Packard
Development Company, L.P. (concepts_guide.pdf)
Select Access と 各 サ ー ド パ ー テ ィ テ ク ノ ロ ジ の 統 合 方 法 に つ い て は、 製 品 CD の docs/
solutions フ ォ ルダに格納 さ れてい る 該当のサー ド パーテ ィ の 『Integration Paper ( 統合ガ イ ド )』
を参照 し て く だ さ い。
13
Setup Tool と Policy Builder の コ ン ポーネ ン ト については、オ ン ラ イ ン ヘルプ を参照 し て く だ さ い。
Select Access の SDK には、 本製品に関す る 次の 2 つのマニ ュ アル も 保存 さ れてい ます。
•
『HP OpenView Select Access 6.2 開発者向けチ ュ ー ト リ アル ガ イ ド 』 © Copyright 2004-2006
Hewlett-Packard Development Company, L.P. (dev_tut_guide.pdf)
•
『HP OpenView Select Access 6.2 開発者向け リ フ ァ レ ン ス ガ イ ド 』 © Copyright 2004-2006
Hewlett-Packard Development Company, L.P. (dev_ref_guide.pdf)
SDK の入手方法については、 HP のパー ト ナー ケ アの Web サ イ ト (http://
support.openview.hp.com/partner_care.jsp) を参照 し て く だ さ い。
各章の概要
表 1 は、 本書に収め ら れてい る 章の一覧です。
表1
14
各章の概要
章
説明
第 2 章、 「Select Access API
の実行」
Select Access は、 コ ン ポーネ ン ト ベース の多層アーキ テ ク チ ャ に
基づいてい ます。 こ の章では、 Select Access の コ ン ポーネ ン ト
と 、 独自のプ ラ グ イ ン の作成方法について説明 し ます。
第 3 章、 「GUI のカ ス タ マ イ
ズ : Policy Builder API」
Select Access では、 開発者は Policy Builder の Configuration Editor
を新たに追加す る こ と がで き ます。 こ の章では、 Select Access の
Policy Builder と 統合 さ れ る 、 コ ン フ ィ ギ ュ レー タ と 呼ばれ る
Configuration Editor を、 Policy Builder API を使用 し て作成す る 方
法について説明 し ます。
第 4 章、 「認証方式 と 認証
ルールのカ ス タ マ イ ズ :
Validator API」
Select Access では、 Policy Validator の拡張に よ り 、 認証方式お よ
び認証ルールのカ ス タ マ イ ズが可能です。 こ の章では、 Validator
API を使用 し て、 認証お よ び承認のプ ラ グ イ ン を作成す る 方法
について説明 し ます。
第 5 章、 「セ キ ュ リ テ ィ
サービ ス のカ ス タ マ イ ズ :
Enforcer API」
Enforcer API に よ っ て、 Select Access のセキ ュ リ テ ィ サービ ス を
ほ と ん ど の製品お よ びカ ス タ ム コ ン ポーネ ン ト と 統合で き ます。
こ の章では、 Enforcer API を使用 し て、 Java、 C/C++、 お よ び
COM オブジ ェ ク ト のセ キ ュ リ テ ィ サービ ス を提供す る 方法につ
いて説明 し ます。
第 6 章、 「個別化属性の
使用 : Personalization API」
Select Access では、 Enforcer プ ラ グ イ ン がア イ デン テ ィ テ ィ の個
別化デー タ を提供 し ます。 こ の章では、 Select Access を設定 し て
個別化をサポー ト す る 方法、 Policy Validator が個別化属性を
Enforcer プ ラ グ イ ン に提供す る 仕組み、 お よ び Enforcer プ ラ グ イ
ン が こ う し た情報を アプ リ ケーシ ョ ン で利用で き る よ う にす る
仕組みについて説明 し ます。
第 7 章、 「マルチ リ ソ ース
への ク エ リ : Policy API」
Select Access では、 Enforcer プ ラ グ イ ン に よ り Policy Validator に
ク エ リ を行い、 各種の リ ソ ース を利用す る こ と がで き ます。 こ の
章では、 マルチ リ ソ ース の要求を行 う 方法について説明 し ます。
第1章
表1
各章の概要 ( 続き )
章
説明
第 8 章、 「一時的なデ ィ レ ク
ト リ プ ロ フ ァ イ ル : User
API」
Select Access は、 デ ィ レ ク ト リ サーバーにプ ロ フ ァ イ ルを持た
ないア イ デン テ ィ テ ィ に関 し て、 永続的な ア イ デン テ ィ テ ィ 属
性を格納す る ための API を提供 し ます。 認証プ ラ グ イ ンが一時
的な ア イ デン テ ィ テ ィ プ ロ フ ァ イ ルを作成す る こ と に よ り 、
Policy Validator では、 こ う し た ア イ デン テ ィ テ ィ に対す る 個別化
属性を提供す る こ と が可能にな り ます。 こ の章では、 こ の よ う
なプ ロ フ ァ イ ルの作成方法を説明 し ます。
第 9 章、 「Administration
API」
管理 API は、 Select Access Administration Server 用のプ ロ グ ラ ミ
ン グ イ ン タ ーフ ェ イ ス を提供 し ます。 こ の イ ン タ ーフ ェ イ ス を
使用 し て、 リ ソ ース の定義やポ リ シーの設定、 ユーザー パ ス
ワー ド の変更を行 う こ と がで き ます。 こ の章では、 管理 API の
機能について説明 し ます。
第 10 章、 「管理サーブ レ ッ
ト : Web 管理 イ ン タ ーフ ェ
イ ス」
Policy Builder アプ レ ッ ト のほか、 Select Access では、 管理者が
Web ブ ラ ウ ザを使用 し て委任管理や ワ ー ク フ ロ ー タ ス ク を実行
す る ための Web 管理 イ ン タ ーフ ェ イ ス を提供 し てい ます。 こ の
章では、 サーブ レ ッ ト を使用 し た イ ン タ ーフ ェ イ ス のカ ス タ マ
イ ズ方法 と 、 Web 管理 イ ン タ ーフ ェ イ ス について説明 し ます。
第 11 章、 「 ロ グのカ ス タ
マ イ ズ : Logger API」
Select Access は、 Java アプ リ ケーシ ョ ンや C++ アプ リ ケーシ ョ
ン に よ る 安全かつ構造化 さ れた方法での イ ベン ト 報告を可能に
す る 、 Logger API を提供 し ます。 Logger API は、 名前付 き の ロ
グ チ ャ ネル、 ロ グの重要度レベル、 お よ び ロ グの出力先を提供
す る Select Access の ロ グ ク ラ ス を使用 し ます。 こ の章では、 ロ
グ を アプ リ ケーシ ョ ン に統合す る 方法を説明 し ます。
第 12 章、 「プ ロ パテ ィ
エデ ィ タ のカ ス タ マ イ ズ
: サブジ ェ ク ト エデ ィ タ
API」
サブジ ェ ク ト エデ ィ タ API では、 ユーザー、 グループ、 ダ イ ナ
ミ ッ ク グループ、 お よ びフ ォ ルダのプ ロ パテ ィ を編集す る 設定
画面のカ ス タ マ イ ズが可能です。 デフ ォ ル ト のプ ロ パテ ィ パネ
ルは こ の API を使用 し て作成 さ れてい ます。 こ の章では、 サブ
ジ ェ ク ト エデ ィ タ API を使用 し て Policy Builder のプ ロ パテ ィ エ
デ ィ タ パネルを カ ス タ マ イ ズす る 方法について説明 し ます。
付録 A、 「 ク エ リ : ア ク セ ス
の理解 と 評価」
Policy Validator の ク エ リ は、 Select Access のア ク セ ス制御シ ス テ
ム の重要な要素です。 デー タ のエ ン コ ー ド と 送信の際に XML を
使用す る こ と に よ り 、 あ ら ゆ る フ ォ ームや種類のデー タ を ク エ
リ に含め る こ と がで き ます。 こ の付録では、 こ う し た ク エ リ の
フ ォ ーマ ッ ト と 実装方法について説明 し ます。
Select Access API について
15
16
第1章
2 Select Access API の実行
Select Access は複数のコ ン ポーネン ト から 構成さ れる 、 高度で一貫性のあ る ア ーキ テ ク チャ です。
こ の章では、 最新のプロ グ ラ ミ ン グ 言語、 業界標準、 最先端のセキ ュ リ ティ 方式を 使用し 、 既存の
あ ら ゆる ネッ ト ワ ーク イ ン フ ラ ス ト ラ ク チャ に Select Access を 適用する 方法について説明し ま す。
柔軟性の高い Select Access は、 将来のセ キ ュ リ テ ィ 要件に合わせて簡単に拡張す る こ と がで き ま
す。 ま た、 コ ン ポーネ ン ト ベース の多層アーキ テ ク チ ャ を主な基盤 と し てい る ため、 管理者お よ
び開発者はシ ス テ ム を容易に設定 し 、 ア ッ プグ レー ド で き ます。
こ の章の概要
こ の章では、 Select Access の コ ン ポーネ ン ト の詳細 と 、 環境や業務上のニーズに合わせて Select
Access の機能を カ ス タ マ イ ズす る ために独自のプ ラ グ イ ン を作成す る 方法について説明 し ます。
•
Select Access の コ ン ポーネ ン ト (17 ページ )
•
Select Access のカ ス タ マ イ ズ (19 ページ )
•
Select Access の ソ ース フ ァ イ ル と ラ イ ブ ラ リ (22 ページ )
•
SDK でのサン プルの作成 (23 ページ )
•
XML の重要性 (25 ページ )
Select Access の コ ンポーネ ン ト
Select Access の コ ン ポーネ ン ト を拡張す る 前に、 各 コ ン ポーネ ン ト の機能について十分に理解 し
てお く 必要があ り ます。 こ のガ イ ド では、 Policy Builder、 ポ リ シー ス ト ア、 Policy Validator、 お よ
び Enforcer プ ラ グ イ ンの 4 つの主要 コ ン ポーネ ン ト について説明 し ます。
Policy Builder は、ネ ッ ト ワー ク リ ソ ース のセキ ュ リ テ ィ ポ リ シーを設定す る ために使用 さ れ る グ
ラ フ ィ カル アプ リ ケーシ ョ ン です。セキ ュ リ テ ィ ポ リ シーは判定ツ リ ーの一連のルール と し て表
現 さ れ ます。 こ のルールには、Select Auth ルール と 条件付 き ア ク セ ス ルールの 2 種類があ り ます。
図 1 は、 Policy Builder の グ ラ フ ィ カ ル イ ン タ ー フ ェ イ ス と 、 Select Auth ルールお よ び条件付 き
ルールの設定ダ イ ア ロ グへのア ク セ ス方法を示 し てい ます。
Select Auth ルールはネ ッ ト ワ ー ク リ ソ ース の認証方式を指定 し ます。 ルールの ノ ー ド は認証サー
ビ ス を表 し ます。 サービ ス は Policy Builder 認証プ ラ グ イ ン を使用 し て設定 さ れますが、 サービ ス
その も のはオーセ ン テ ィ ケー タ と 呼ばれ る Policy Validator プ ラ グ イ ン に よ っ て提供 さ れます。
17
条件付 き ルールは リ ソ ース の承認ポ リ シーを指定 し ます。 1 つの条件付 き ルールは、 1 つの判定ツ
リ ー と そ の ツ リ ー内 の 各分岐 の ポ リ シ ー ノ ー ド か ら 構成 さ れ ま す。 ポ リ シ ー ノ ー ド は Rule
Builder お よ び Policy Builder 承認プ ラ グ イ ン を使用 し て設定 さ れます。エバ リ ュ エー タ と 呼ばれ る
Policy Validator プ ラ グ イ ンは、 リ ソ ー ス の要求時にポ リ シー ノ ー ド を評価す る サービ ス を提供 し
ます。
Rule Builder に よ っ て条件付き
ルールを設定
Select Auth の設定
図1
Select Auth お よび条件付きルールの設定
Policy Builder は、 ポ リ シー ス ト ア内に、 各ポ リ シー ノ ー ド の設定を は じ め と す る 設定済みのセ
キ ュ リ テ ィ ポ リ シーを格納 し ます。 Policy Validator は、 設定済みのセキ ュ リ テ ィ ポ リ シーを取得
し 、 そのポ リ シーを使用 し て リ ソ ース要求を評価 し ます。
Enforcer プ ラ グ イ ンは、 Select Access のセ キ ュ リ テ ィ サービ ス を カ ス タ ム アプ リ ケーシ ョ ンお よ
びサーバー と 統合 し ま す。 Enforcer プ ラ グ イ ン は リ ソ ー ス 要求を受け取 る と 、 要求の許可 ま たは
拒否を決定す る ために Policy Validator に ク エ リ を行い ます。Policy Validator の判定結果を実行す る
の も Enforcer プ ラ グ イ ン の役割です。
18
第2章
Select Access のカ ス タ マ イ ズ
こ の ガ イ ド で は、 ネ ッ ト ワ ー ク イ ン フ ラ ス ト ラ ク チ ャ お よ び ビ ジ ネ ス 要件に合わせ て Select
Access コ ン ポーネ ン ト を カ ス タ マ イ ズす る 方法について説明 し ます。 Select Access は、 製品機能
のカ ス タ マ イ ズ を可能にす る 一連の API を提供 し ます。 コ ン ポーネ ン ト を追加ま たは拡張す る 場
合には、 単に コ ン ポーネ ン ト を作成 し て追加す る だけで よ く 、 製品自体を再 イ ン ス ト ールす る 必
要はあ り ません。 Select Access を カ ス タ マ イ ズす る には、 次の 2 通 り の方法があ り ます。
•
Select Acccess API を使用す る
•
その他の API ま たはカ ス タ マ イ ズ方法を使用す る
Select Access のプ ログ ラ ミ ン グ API
表 2 では、 Select Access の SDK に含まれ る すべての ラ イ ブ ラ リ について説明 し てい ます。 こ のガ
イ ド で取 り 上げ る すべての API が示 さ れ、 各 API に よ っ て実行 さ れ る 内容の概略、 お よ び 各 API
で必要 と さ れ る フ ァ イ ルが記載 さ れてい ます。
表2
Select Access の API
API の名称
実行内容
Validator API
新 し い認証 / 承認方式を作成 し ます。
Policy Validator プ ラ グ イ ンはプ ロ グ ラ ミ ン グ言語 と し て C/C++ を使用 し ま
す。 Policy Validator プ ラ グ イ ンの役割は次の通 り です。
1
Enforcer プ ラ グ イ ン か ら の承認要求を処理 し ます。
2
Policy Builder に よ っ て設定 さ れたセ キ ュ リ テ ィ ポ リ シーを使用 し て要
求を評価 し ます。
3
要求の評価に応 じ て、実行す る 動作を Enforcer プ ラ グ イ ンに通知 し ます。
注記 : Policy Validator を カ ス タ マ イ ズす る 場合、 対応す る Policy Builder プ
ラ グ イ ン を作成 し て Policy Validator プ ラ グ イ ン を設定す る 必要があ り ます。
Policy Builder API
Policy Validator Decider プ ラ グ イ ン の新 し い設定パネルを作成 し ます。
Policy Builder プ ラ グ イ ンには次の よ う な役割があ り ます。
1
Policy Validator プ ラ グ イ ン の イ ン ス タ ン ス を新たに設定 し ます。
2
Policy Validator の既存の イ ン ス タ ン ス を編集 し ます。
3
設定 さ れた Policy Validator プ ラ グ イ ンの イ ン ス タ ン ス の状態を保存 し
ます。
注記 : Policy Builder プ ラ グ イ ン を作成す る 場合、 セキ ュ リ テ ィ ルールで
Policy Builder プ ラ グ イ ン を使用す る 前に、 対応す る Policy Validator プ ラ グ
イ ン を作成 し てお く 必要があ り ます。
Select Access API の実行
19
表2
Select Access の API
API の名称
実行内容
Personalization
個別化に使用 さ れ る ア イ デン テ ィ テ ィ デー タ を提供す る Enforcer プ ラ グ イ
ン を作成 し ます。
こ れは前述の API の連携に よ っ て実行 さ れます。 つま り 、 Personalization
API と は、 単一の API を指す も のではあ り ません。
Enforcer API
新 し い Enforcer プ ラ グ イ ン を作成 し ます。
Enforcer プ ラ グ イ ンは、 Web / アプ リ ケーシ ョ ン サーバー上で Select Access
のエージ ェ ン ト と し て機能 し ます。 次の よ う な役割があ り ます。
1
ア イ デン テ ィ テ ィ の要求の詳細を XML ク エ リ 形式で Policy Validator に
渡 し ます。
2
Policy Validator の評価後、 XML ク エ リ の結果を実行 し ます。
Enforcer プ ラ グ イ ン では、 リ ソ ース のバ ッ ク エ ン ド アプ リ ケーシ ョ ン ロ
ジ ッ ク を カ ス タ マ イ ズで き ます。
次の 3 つの Enforcer API ラ イ ブ ラ リ が利用可能です。
•
•
Enforcer C++ API ラ イ ブ ラ リ
Enforcer Java API ラ イ ブ ラ リ
•
Enforcer COM イ ン タ ーフ ェ イ ス API ラ イ ブ ラ リ
注記 : カ ス タ ム プ ラ グ イ ン を作成す る 場合、 Setup Tool を使用 し て テ ン プ
レー ト フ ァ イ ル enforcer.xml を作成す る 必要があ り ます。 設定 ウ ィ
ザー ド を実行す る と 、 ど の よ う な種類の Enforcer プ ラ グ イ ン を作成す る 場
合で も 、 こ の フ ァ イ ルが作成 さ れます。 詳細は、 『HP OpenView Select
Access 6.2 イ ン ス ト ール ガ イ ド 』 を参照 し て く だ さ い。
Adminstration API
次の処理を行 う ために使用 さ れ ます。
•
サービ スお よ び リ ソ ース エ ン ト リ の追加、 変更、 削除
•
ユーザーお よ び リ ソ ース のポ リ シー設定の追加、 変更、 削除
( 許可、 拒否、 あ る いは既存のルールを使用 )
•
ユーザーに よ る パ ス ワー ド 変更の許可
Administration API は、 Web サービ ス でサポー ト さ れてい る 言語を使用 し て
開発者が外部的に リ ソ ー ス 定義 と ポ リ シー設定を行 う ための、 公開 WSDL
をベース と し た環境です。
こ の API は Web サービ ス で実装 し 、 Axis Enforcer で保護 し ます。 Setup Tool
は、 Administration API 環境 と Axis Enforcer を自動的に設定 し ます。
20
第2章
Select Access の API を使用 し た カ ス タ マ イ ズ
さ ま ざ ま な コ ン ポーネ ン ト を カ ス タ マ イ ズで き ます。 表 3 を参照 し 、 実際の ビ ジネ ス 環境 と の関
連を確認 し て く だ さ い。
表3
Select Access API を使用 し た カ ス タ マ イ ズ
使用する API
機能
新 し い認証方式を作成 し 、 Select Access の認証
サービ ス を拡張 し ます。 新 し い認証方式を追加す
る には、 次の 2 つのプ ラ グ イ ンが必要です。
1
Select Auth ルールに認証サービ ス を設定す る 新
し い Policy Builder 認証プ ラ グ イ ン
2
認証サービ ス を提供す る Policy Validator のオー
セ ン テ ィ ケー タ プ ラ グ イ ン
リ ソ ースへのア ク セ ス を評価す る 新 し い方式を サ
ポー ト す る ために承認サービ ス を追加 し ます。 新
し い承認サービ ス を追加す る には、 次の 2 つのプ
ラ グ イ ンが必要です。
1
Rule Builder で条件付 き ルールに新 し い機能を
設定す る Policy Builder 承認プ ラ グ イ ン
2
リ ソ ース要求を評価す る Policy Validator の判
定ポ イ ン ト プ ラ グ イ ン
バ ッ ク エ ン ド アプ リ ケーシ ョ ン / サーバー と
Select Access のセキ ュ リ テ ィ イ ン フ ラ ス ト ラ ク
チ ャ を統合す る 、 新 し い Enforcer プ ラ グ イ ン を追
加 し ます。 こ のプ ラ グ イ ンは Policy Validator の判
定結果を実行 し ます。
•
Policy Builder
API
•
Validator API
参照箇所
第 3 章、 「GUI のカ ス
タ マ イ ズ : Policy
Builder API」
Policy Builder API
68 ページの 「判定ポ
お よ び Validator API イ ン ト プ ラ グ イ ン の
作成 : デ ィ レ ク ト リ
属性の例」
Enforcer
第 5 章、 「セ キ ュ リ
テ ィ サービ ス のカ ス
タ マ イ ズ : Enforcer
API」
Validator API お よ び
Enforcer API
第 6 章、 「個別化属性
の使用 :
Personalization API」
注記 : カ ス タ ム プ ラ グ イ ン を作成す る 場合、 Setup
Tool を使用 し て テ ン プ レー ト フ ァ イ ル
enforcer.xml を作成す る 必要があ り ます。 設定
ウ ィ ザー ド を実行す る と 、 ど の よ う な種類の
Enforcer プ ラ グ イ ン を作成す る 場合で も 、 こ の
フ ァ イ ルが作成 さ れ ます。 詳細は、 『HP OpenView
Select Access 6.2 イ ン ス ト ール ガ イ ド 』 を参照 し て
く だ さ い。
個別化デー タ に よ り 、 バ ッ ク エ ン ド アプ リ ケー
シ ョ ンはカ ス タ マ イ ズ さ れたユーザー表示を提供
で き ます。
注記 : 個別化デー タ を使用す る には、 Policy
Builder で Policy Validator を設定 し 、 個別化を サ
ポー ト す る 必要があ り ます。
Java Enforcer プ ラ グ イ ン を作成す る 場合、 必要な JAR フ ァ イ ルを検索す る 必要があ り ます。 署名
さ れ て い な い JAR フ ァ イ ル は <install_path>/shared/、 署 名 さ れ た JAR フ ァ イ ル は
<install_path>/jetty/protected/ を それぞれ検索 し て く だ さ い。
Select Access API の実行
21
以前のバージ ョ ン か ら カ ス タ ム Java プ ラ グ イ ン を ア ッ プグ レー ド す る 場合、プ ラ グ イ ン を移行 し
て、今回の リ リ ース の ラ イ ブ ラ リ を使用す る 必要があ り ます。詳細は、『HP OpenView Select Access
6.2 リ リ ース ノ ー ト 』 を参照 し て く だ さ い。
Java Enforcer プ ラ グ イ ン を作成す る 場合、 ホ ス ト コ ン ピ ュ ー タ での コ ン ポーネ ン ト の イ ン ス ト ー
ル状況に よ っ ては、プ ラ グ イ ン の作成に必要な DLL が存在 し ないケース があ る 点に注意 し て く だ
さ い。 NTEventLogAppender.dll は、 Select Access を フ ル イ ン ス ト ール し た場合のみ イ ン ス
ト ール さ れ ま す。 カ ス タ ム プ ラ グ イ ン の作成で失敗す る と き は、 こ の フ ァ イ ルが ロ ー カ ルの
system32 フ ォ ルダに コ ピー さ れてい る か確認 し ます。
Select Access の ソ ース フ ァ イル と ラ イ ブ ラ リ
Select Access には、 カ ス タ ム プ ラ グ イ ン の作成に役立つ ソ ース フ ァ イ ル と ラ イ ブ ラ リ が含まれて
い ます。
Select Access の SDK CD の SelectAccess/source フ ォ ルダには、 カ ス タ ム プ ラ グ イ ンの作成
に必要なすべての フ ァ イ ルが用意 さ れてい ます。ま た、local_tools フ ォ ルダには、Select Access
の ロ ーカ ラ イ ズに必要なデ ィ レ ク ト リ と フ ァ イ ルが格納 さ れてい ます。 ロ ーカ ラ イ ズ を行わない
場合、 こ の フ ォ ルダは使用 し ません。
デフ ォ ル ト の SelectAccess/source フ ォ ルダには、 次の表のサブ フ ォ ルダが格納 さ れてい ま
す。
表4
22
Select Access のデ フ ォル ト のデ ィ レ ク ト リ 構造
フ ォルダ
格納 さ れている フ ァ イル
enforcer
C/C++ Enforcer API ヘ ッ ダー フ ァ イ ル。
include
ACE、 Expat、 cURL、 OpenSSL な ど のサー ド パーテ ィ のヘ ッ
ダー フ ァ イ ル。
Java
Policy Builder の判定ポ イ ン ト の 4 つのサン プル ( ト グル、
attributelogic、 ア イ デン テ ィ テ ィ フ ィ ル タ 、 プ ロ ト コ ル フ ィ ル
タ )、 Java ク エ リ テ ス ト 、 Web 管理用の Java ソ ース フ ァ イ ル。
server_plugins
Apache 2 Enforcer プ ラ グ イ ンお よ び TCP Enforcer プ ラ グ イ ン用
の C/C++ ソ ース フ ァ イ ル。 Apache 2、 IIS、 お よ び iPlanet 用の
site_data のサ ンプル フ ァ イ ル も あ り ます。
validator/plugins
Policy Validator 判定ポ イ ン ト のプ ラ グ イ ンのサ ンプル ( ト グル、
attributelogic、 ア イ デン テ ィ テ ィ フ ィ ル タ 、 プ ロ ト コ ル フ ィ ル
タ ) の再構築に使用す る C/C++ ソ ース フ ァ イ ル。
linux、 solaris、
hpux、 win32、
64bits/hpux-ia64、
64bits/linux-ia64
各プ ラ ッ ト フ ォーム のサン プルを作成す る ための、 プ ラ ッ ト
フ ォ ーム に固有のヘ ッ ダー フ ァ イ ル と プ レース ホルダのデ ィ
レク ト リ。
query
C++ ク エ リ プ ロ グ ラ ム の ソ ース コ ー ド 。
第2章
SDK でのサン プルの作成
こ のセ ク シ ョ ン では、今回の SDK リ リ ース を十分に機能 さ せ る ために検討すべ き 手順について説
明 し ます。 以下に記載 さ れた手順に従い、 Select Access の ラ イ ブ ラ リ を使用 し て カ ス タ ム プ ラ グ
イ ン を作成で き る か確認 し て く だ さ い。
•
UNIX で C++ サン プルを作成す る には (23 ページ )
•
Windows で C++ サン プルを作成す る には (24 ページ )
•
Windows ま たは UNIX で Java サン プルを作成す る には (24 ページ )
•
Windows ま たは UNIX で Web 管理 イ ン タ ーフ ェ イ ス を作成お よ び イ ン ス ト ールす る には
(24 ページ )
UNIX で C++ サン プルを作成するには
1
unixify.sh ス ク リ プ ト を実行 し 、 Windows の行末を UNIX の行末に変換 し ます。
2
ビル ド 環境には、 必ず 表 5 に リ ス ト さ れてい る フ ァ イ ルが含ま れ る よ う に し ます。 こ れ ら の
フ ァ イ ルは イ ン ス ト ール パ ス に配置す る 必要があ り ます。
表5
ビル ド 環境の要件
フ ァ イル
必須 と な る場合
GNU makea。 例 : gmake <fileName>
Select Access Makefile シ ス テ ム
注記 : Red Hat AS 4.0 に関 し ては、
make CXX=g++32 を使用 し ます。
例 : make <fileName>
gcc v3.3.2 お よ び g++
Solaris
aCC: HP aC++/ANSI C B3910B A.05.55
[2003 年 12 月 4 日 ]
HP-UX (PA-RISC お よ び IA64)
gcc v3.2.3
RedHat Linux AS 3.0/4.0 (x86 お よ び
IA64)
Visual C++ 6.0
Windows
a.
3
バージ ョ ン を問わず、 パ ス に含まれ る make の前に gmake を付け ます。
次のいずれかの操作を行い ます。
•
Apache の場合 : ルー ト フ ォ ルダか ら make を実行 し 、 プ ラ グ イ ン を コ ンパ イ ル し ます。
“undefined reference” エ ラ ーは無視 し て く だ さ い。 こ のエ ラ ーは Apache の実行時
に解決 さ れ ます。
•
Red Hat Enterprise Linux 4 の場合 : プ ラ グ イ ンに対 し て make CXX=g++32 を実行 し ます。
SDK で C++ コ ン ポーネ ン ト を作成す る には、 make CXX=g++32 を実行 し ます。 こ れ
に よ り gcc 3.2 が使用 さ れ、 ビル ド に Red Hat Enterprise Linux 3 と の一貫性を持たせ
る こ と がで き ます。
•
Select Access API の実行
他のサン プルの場合 : プ ラ グ イ ンに対応す る フ ォ ルダか ら make を実行 し ます。
23
Windows で C++ サン プルを作成するには
1
Select Access SDK には Visual Studio .NET に よ る ビル ド に必要なプ ロ ジ ェ ク ト フ ァ イ ルが含
まれていないため、 ビル ド 環境に Visual Studio 6.0 Service Pack 5 が含まれてい る こ と を確認
し ます。
2
メ イ ン デ ィ レ ク ト リ に SelectAccess.dsw ワー ク スペース を ロ ー ド し ます。
3
プ ロ ジ ェ ク ト と し て _allsdk を選択 し ます。
4
[ ビル ド ] → [ ア ク テ ィ ブ な構成の設定 ] を ク リ ッ ク し ます。
5
構成で Release を選択 し ます。
6
[ ビル ド ] → [ すべて リ ビル ド ] を ク リ ッ ク し 、 すべてのサン プルを再 コ ンパ イ ル し ます。
フ ァ イ ル オーセ ン テ ィ ケー タ サ ン プルの コ ンパ イ ル時に表示 さ れ る シ ン ボル名のエ
ラ ー メ ッ セージは、 無視 し てか ま い ません。
7
特定のサン プルのみを リ ビル ド す る には、 Visual Studio で対応す る プ ロ ジ ェ ク ト を右 ク リ ッ
ク し 、 [( 選択範囲 ) のビル ド ] を ク リ ッ ク し ます。
Windows または UNIX で Java サン プルを作成するには
1
ビル ド 環境に以下が含ま れ る こ と を確認 し ます。
•
javac (Java コ ンパ イ ラ ) お よ び java (Java 実行時 コ ンパ イ ラ )。 Java SDK バージ ョ ン
1.4.2_10 には、 両方 と も 含まれてい ます。
•
Ant ビル ド ツール。Ant 1.6.1 は、http://ant.apache.org か ら ダ ウ ン ロ ー ド で き ます。
2
Java デ ィ レ ク ト リ の build.xml フ ァ イ ルを使っ てサ ンプルを作成 し ます。 詳細は、 次の
「Windows ま たは UNIX で Web 管理 イ ン タ ーフ ェ イ ス を作成お よ び イ ン ス ト ールす る には」
を参照 し て く だ さ い。
3
特定のサン プルを リ ビル ド す る には、 コ マ ン ド ラ イ ン で Ant にサン プル名を指定 し ます。 た
と えば、 コ マ ン ド プ ロ ン プ ト で ant toggle ま たは ant FileAuthenticator と 入力 し
ます。
Windows または UNIX で Web 管理イ ン タ ー フ ェ イ ス を作成および イ ン ス ト ール
するには
24
1
Java ソ ース フ ァ イ ルを変更 し ます。
2
DOS コ マ ン ド ま たは UNIX シ ェ ル ウ ィ ン ド ウ を開 き 、 次の操作を行い ます。
a
<SDK_install_path>/SelectAccess/source/Java フ ォ ルダに移動 し ます。
b
プ ロ ン プ ト で ant と 入力 し 、 Java ソ ース フ ァ イ ルを コ ンパ イ ル し ます。
第2章
ビル ド が完了 し た ら 、 カ ス タ マ イ ズ し た Web 管理全体が deploy フ ォ ルダにパ ッ ケージ
さ れ ます。
次の手順では、 Select Access イ ン ス ト ー ラ に よ り イ ン ス ト ール さ れた フ ァ イ ルが
上書 き さ れ る ため、 <SA_install_path>/shared/jetty/
policy_builder/webadmin フ ォ ルダ内のオ リ ジナル フ ァ イ ルをすべてバ ッ
ク ア ッ プ し てお く こ と をお勧め し ます。 こ れに よ り 、 必要に応 じ て フ ァ イ ルを
元に戻す こ と がで き ます。 た と えば、 webadmin フ ォ ルダ を webadmin.orig
と い う 名前に変更 し ます。
c
3
deploy ス テージ ン グ デ ィ レ ク ト リ の webadmin フ ォ ルダにパ ッ ケージ し た カ ス タ ム コ
ン テ ン ツ を コ ピー し 、 <SA_install_path>/shared/jetty/policy_builder/
webadmin フ ォ ルダのすべての コ ン テ ン ツ を上書 き し ます。
サーブ レ ッ ト の配置を有効にす る には、 Jetty Web サーバー / Administration Server を再起動 し
ます。
XML の重要性
Select Access はデー タ の格納 と 通信の双方で XML を使用 し ます。 し たがっ て、 Select Access の コ
ン ポーネ ン ト を カ ス タ マ イ ズす る 前に、 ソ フ ト ウ ェ アが ど の よ う に XML を利用 し てい る か を理
解す る こ と が重要です。 XML は直感的な理解が可能であ り 、 XML エデ ィ タ で XML ド キ ュ メ ン ト
を使用す る 場合は特に、 簡単にシ ス テ ム を把握 し 、 拡張す る こ と がで き ます。
ルールの表現方法 と 格納方法
XML は本質的に ツ リ ー構造で あ る ため、 Select Access の 2 分的な判定 ツ リ ー ルール と 調和 し ま
す。 ルールお よ びルールを構成す る オーセ ン テ ィ ケー タ と 判定ポ イ ン ト は、 XML オブジ ェ ク ト と
し て表現 さ れ、 デ ィ レ ク ト リ サーバーに格納 さ れます。 各 Policy Validator プ ラ グ イ ンには対応す
る Policy Builder プ ラ グ イ ン があ り ます。 Policy Builder はプ ロ パテ ィ エデ ィ タ を提供 し ます。 プ ロ
パテ ィ エデ ィ タ に よ っ て、プ ロ パテ ィ が XML に変換 さ れ ます。変換 さ れた XML はルールの XML
内にネ ス ト さ れ、 デ ィ レ ク ト リ サーバーの LDAP デー タ ベース に再度書 き 込まれます。 使用 さ れ
る デー タ の形式や種類に制限はな く 、 各組織のニーズに応 じ た、 認証 / 承認エ ン ジ ン の拡張が可
能にな り ます。
デー タ のエ ン コ ー ド 方法 と 通信方法
デー タ は XML 形式でエ ン コ ー ド さ れ、 Enforcer プ ラ グ イ ン と Policy Validator 間の通信に使用 さ れ
ます ( ク エ リ と 応答)。 こ れに よ り 、 新 し い情報を制約な く 追加す る こ と がで き ます。
•
ク エ リ と は属性 と 値の組み合わせを指 し 、 必要に応 じ て値を含んだ新 し い属性を ク エ リ に追
加で き ます。 例 と し ては、 <PROPERTY NAME="service">http://
mycompany.com:8080</PROPERTY> の よ う にな り ます。
•
応答 も XML ベース であ り 、 情報が埋め込まれてい ます。 情報は次の よ う な形式を と り ます。
— さ ら にデー タ を収集す る よ う 、 Enforcer プ ラ グ イ ンに通知す る キ ュ ー。 収集 さ れたデー
タ を基に応答が変更 さ れ る こ と があ り ます。
Select Access API の実行
25
— アプ リ ケーシ ョ ン に返 さ れ る 、 ク エ リ を実行 し た ア イ デン テ ィ テ ィ に関す る デー タ 。 こ
の情報を使用 し て、 ア イ デン テ ィ テ ィ に対 し 、 その リ ソ ース に関す る 個別化 さ れたエ ク
スペ リ エ ン ス が提供 さ れます。
XML ベース のプ ラ グ イ ン アーキ テ ク チ ャ の柔軟な特性に よ っ て、Select Access はあ ら ゆ る 判定結
果を実行す る こ と が可能です。 た と えば、 特定のサービ ス 上でア イ デン テ ィ テ ィ が入力 し た コ マ
ン ド に基づいた判定を行い、 読み取 り 専用のア ク セ ス を適用す る こ と がで き ます (HTTP メ ソ ッ ド
の POST に対す る GET、 FTP コ マ ン ド の PUT に対す る GET な ど )。
図 2 は、 XML ベース のプ ラ グ イ ン アーキ テ ク チ ャ をわか り やす く 図解 し た も のです。
図2
Select Access のプ ラ グ イ ン アーキテ ク チ ャ
シナ リ オ : ア イ デン テ ィ テ ィ が mycompany.com へのア ク セス を要求
XML の優れた機能につい て、 次の よ う な シナ リ オ を使用 し て説明 し ま す。 未知の ア イ デン テ ィ
テ ィ が HTTP://mycompany.com へのア ク セ ス を要求 し て き た ケース を想定 し ます。 Enforcer プ
ラ グ イ ンは、そのア イ デン テ ィ テ ィ の HTTP://mycompany.com へのア ク セ ス権限を判断す る た
めに Policy Validator に ク エ リ を送信 し ます。Policy Validator は、 まず条件付 き ア ク セ ス の応答を送
信 し 、 未知のア イ デン テ ィ テ ィ に登録を行 う よ う 要求 し ます。 未知のア イ デン テ ィ テ ィ が登録を
行 う と 、 収集 さ れたすべてのア イ デン テ ィ テ ィ 情報は XML ク エ リ にエ ン コ ー ド さ れ、 ア イ デン
テ ィ テ ィ の新 し いデ ィ レ ク ト リ エ ン ト リ / ア イ デン テ ィ テ ィ プ ロ フ ァ イ ルの属性 と し て直接マ ッ
ピ ン グ さ れ ます。
26
第2章
表 6 は、 後続の コ ー ド 例について簡単に説明 し てい ます。
表6
ク エ リ と 応答の例
コー ド例
説明
Policy Validator に対す る ク エ リ
の例 (27 ページ )
Enforcer プ ラ グ イ ン か ら Policy Validator への最初の
ク エ リ 。 リ ソ ースへのア ク セ ス を要求す る 。
Policy Validator に対す る 2 番目
の ク エ リ の例 (27 ページ )
Enforcer プ ラ グ イ ン か ら Policy Validator への 2 番目
の ク エ リ 。 登録の詳細情報を含む。
単純な Policy Validator 応答の例
(28 ページ )
既知のア イ デン テ ィ テ ィ Steve Smith のア ク セ ス を
許可す る 、 簡単な Policy Validator の応答。
Policy Validator に対する ク エ リ の例
次の コ ー ド サン プルは、 Policy Validator に対す る ク エ リ の例です。
<PolicyValidatorQuery>
<PROPERTYLIST>
<PROPERTY NAME="service">http://mycompany.com:8080</PROPERTY>
<PROPERTY NAME="path">/secure/form</PROPERTY>
<PROPERTY NAME="srcIP">10.10.10.6</PROPERTY>
<PROPERTY NAME="srcPort">1107</PROPERTY>
<PROPERTY NAME="dstIP">10.10.10.7</PROPERTY>
<PROPERTY NAME="dstPort">8000</PROPERTY>
<PROPERTY NAME="native_auth">native_password</PROPERTY>
<PROPERTY NAME="native_auth">native_register</PROPERTY>
<PROPERTY NAME="site_data">time: TueJul1013:14:402001</PROPERTY>
<PROPERTY NAME="owner">gandalf</PROPERTY>
<PROPERTY NAME="size">268</PROPERTY>
<PROPERTY NAME="method">GET</PROPERTY>
</PROPERTYLIST>
<PROPERTY NAME="queryID">1</PROPERTY>
</PolicyValidatorQuery>
Policy Validator に対する 2 番目の ク エ リ の例
次の コ ー ド サン プルは、 Policy Validator に対す る ク エ リ の例です。
<PolicyValidatorQuery>
<PROPERTY NAME="queryID">10.10.10.6:1107</PROPERTY>
<PROPERTY NAME="service">http://mycompany.com:8080</PROPERTY>
<PROPERTY NAME="path">/secure/form</PROPERTY>
<PROPERTY NAME="srcIP">10.10.10.6</PROPERTY>
<PROPERTY NAME="srcPort">1107</PROPERTY>
<PROPERTY NAME="dstIP">10.10.10.7</PROPERTY>
<PROPERTY NAME="dstPort">8000</PROPERTY>
<PROPERTY NAME="native_auth">native_password</PROPERTY>
<PROPERTY NAME="native_auth">native_register</PROPERTY>
<PROPERTYLIST NAME="registration">
Select Access API の実行
27
<PROPERTY NAME="givenName">Steve</PROPERTY>
<PROPERTY NAME="sn">Smith</PROPERTY>
<PROPERTY NAME="o">HP Inc.</PROPERTY>
<PROPERTY NAME="mail">[email protected]</PROPERTY>
<PROPERTY NAME="telephonenumber">555-555-555 ext 555</PROPERTY>
<PROPERTY NAME="facsimileTelephoneNumber">416-555-2399
</PROPERTY>
<PROPERTY NAME="userPassword">letMeIn4now</PROPERTY>
<PROPERTY NAME="preferredLanguage">Security, LDAP, XML, SSL
</PROPERTY>
<PROPERTY NAME="cn">Steve Smith</PROPERTY>
</PROPERTYLIST>
<PROPERTY NAME="method">POST</PROPERTY>
</PolicyValidatorQuery>
単純な Policy Validator 応答の例
次の コ ー ド サン プルは、 簡単な応答の例です。
<PolicyValidatorReply>
<PROPERTYLIST>
<PROPERTY NAME="queryID">1</PROPERTY>
<PROPERTY NAME="authenticated_dn">uid=ssmith,ou=users,ou=steve,
o=ca.mycompany.com</PROPERTY>
<PROPERTY NAME="devo_groups">users</PROPERTY>
</PROPERTYLIST>
<PROPERTY
NAME="nonce">bWFub3dhci5jYS5iYWx0aW1vcmUuY29tOjk5ODh8dWlkPW
dhbmRhbGYsb3U9dXNlcnMsb3U9c3RldmUsbz1jYS5iYWx0aW1vcmUuY29tf
Ex8cGFzc192YW
xpZGF0b3J8O0zd4DuLSR2cw0K7Yp5pTb04TSWWxJJqqc7rUszF16atYOqTLnVqt
+O4a6OFr
WQegqu89L17Kwzv4n3XWIwFpsP+wJ8V1eEw4KG9c+REkJFs67bLKZuWZ6xNz2Xpgs7
FLb5s2
O3iwswvuDvcBNOZqF2pbOproktsiuaC36SqxmKLSzY/</PROPERTY>
<PROPERTY NAME="action">ALLOW</PROPERTY>
</PolicyValidatorReply>
28
第2章
3 GUI のカ ス タ マ イ ズ : Policy Builder API
Select Access では、 開発者は Policy Builder の Configuration Editor を新たに追加す る こ と がで き ま
す。 こ れに よ り 、 管理者は認証方式や認証ルール を カ ス タ マ イ ズ で き ま す。 こ の章では、 Select
Access の Policy Builder と 統合 さ れ る 、 コ ン フ ィ ギ ュ レ ー タ と 呼ばれ る Configuration Editor を、
Policy Builder API を使用 し て作成す る 方法について説明 し ます。
こ の章の概要
こ の章では、 Policy Builder お よ び Policy Builder API の詳細 と 、 Policy Builder の動作を カ ス タ マ イ
ズす る ために こ の API を使用 し て作成す る プ ラ グ イ ン について説明 し ます。
•
Policy Builder について (29 ページ )
•
Policy Builder API について (30 ページ )
•
Policy Builder プ ラ グ イ ンの作成 (34 ページ )
•
Policy Builder プ ラ グ イ ンの イ ン ス ト ール (40 ページ )
•
Policy Builder プ ラ グ イ ンの削除 (41 ページ )
Policy Builder について
Policy Builder は、 管理者がネ ッ ト ワ ー ク リ ソ ー ス への ア ク セ ス を 管理す る ために使用す る グ ラ
フ ィ カル アプ リ ケーシ ョ ン です。 管理者は、 Policy Builder を使用 し て、 リ ソ ース の認証方式 と 認
証ルールを管理で き ま す。 Policy Builder はセ キ ュ リ テ ィ ポ リ シーを設定 し ま す。 Policy Validator
は、 Policy Validator プ ラ グ イ ン を使用 し て、 リ ソ ー ス の要求が設定 さ れた ポ リ シーに反 し ていな
い こ と を検証 し ます。 各 Policy Validator プ ラ グ イ ンは、 Policy Builder プ ラ グ イ ン を使用 し て、 ポ
リ シーを設定 し ます。 通常は、 Policy Builder プ ラ グ イ ン と Policy Validator プ ラ グ イ ン の両方を作
成 し て一緒に使用 し ます。
Policy Builder プ ラ グ イ ンは、 対応す る Policy Validator プ ラ グ イ ン を作成す る ま では、 リ ソ ース の
保護に使用 し ないで く だ さ い。 初めて ア ク セ ス ルールを評価す る 際、 Policy Validator が正常に機
能 し な く な り ます。 Policy Validator プ ラ グ イ ンの作成方法については、 第 4 章、 「認証方式 と 認証
ルールのカ ス タ マ イ ズ : Validator API」 を参照 し て く だ さ い。
30 ページの図 3 は、 Policy Builder と Policy Validator を一緒に使用 し て、 認証お よ び承認サービ ス
を拡張す る 方法を示 し てい ま す。 Policy Validator プ ラ グ イ ン では、 認証お よ び承認サービ ス を追
加 し ます。 Policy Builder は、 セキ ュ リ テ ィ ポ リ シーで こ れ ら のサービ ス を設定す る ために使用 し
ます。Policy Builder API に よ り 、開発者はカ ス タ マ イ ズ さ れた設定パネルを作成 し 、Policy Validator
プ ラ グ イ ン の イ ン ス タ ン ス を管理で き ます。 Policy Builder で Policy Validator プ ラ グ イ ン の イ ン ス
タ ン ス を設定す る 必要があ る 場合、 Policy Builder API に該当す る イ ン ス タ ン ス の設定パネルが表
示 さ れ ま す。 Policy Validator プ ラ グ イ ン の イ ン ス タ ン ス の設定後、 設定内容が Policy Builder API
に よ っ てポ リ シー ス ト アに格納 さ れます。
29
図3
Policy Builder プ ラ グ イ ン と Select Access コ ン ポーネ ン ト の連携
Policy Builder API について
Policy Builder API では、 認証方式 と 承認ポ リ シー ノ ー ド のカ ス タ マ イ ズ を行 う Java ベース のグ ラ
フ ィ カル コ ン ポーネ ン ト を作成で き ます。 同一の API が認証プ ラ グ イ ン と 承認プ ラ グ イ ンの双方
に使用 さ れ ます。 理論上は、 1 つの Policy Builder プ ラ グ イ ン を、 認証お よ び承認用の Configuration
Editor と し て機能 さ せ る こ と が可能です。 し か し 実際には、 ほ と ん ど の場合、 認証 と 承認のプ ラ
グ イ ン では完全に異な る 設定属性が必要 と さ れ ます。
Policy Builder プ ラ グ イ ンの種類
Policy Builder プ ラ グ イ ン には、 認証プ ラ グ イ ン と 承認プ ラ グ イ ン の 2 種類があ り ます。 認証プ ラ
グ イ ンは Policy Validator オーセ ン テ ィ ケー タ の イ ン ス タ ン ス を設定 し ます。 一方、 承認プ ラ グ イ
ンは Policy Validator 判定ポ イ ン ト の イ ン ス タ ン ス を設定 し ます。 判定ポ イ ン ト の詳細は、 68 ペー
ジの 「判定ポ イ ン ト プ ラ グ イ ンの作成 : デ ィ レ ク ト リ 属性の例」 を参照 し て く だ さ い。
認証プ ラ グ イ ン
認証プ ラ グ イ ン では、 管理者は Select Auth に よ っ て使用 さ れ る 認証サービ ス を設定で き ます。
30
第3章
イ ン ス ト ール さ れている認証プ ラ グ イ ン を確認するには
1
Policy Builder で [ ツール ] → [ 認証サービ ス ] の順に ク リ ッ ク し ます。 [ 新 し い認証サービ ス ] ダ イ
ア ロ グ ボ ッ ク ス が表示 さ れます。
2
[ 追加 ] を ク リ ッ ク し て、 図 4 の よ う な [ 新 し い認証サービ ス ] ダ イ ア ロ グ ボ ッ ク ス を表示 し ま
す。 ア ッ プ ロ ー ド さ れてい る 認証プ ラ グ イ ン の ラ ジオ ボ タ ン がオ ン の状態で表示 さ れます。
図4
[ 新 し い認証サービ ス ]
承認プ ラ グ イ ン
承認プ ラ グ イ ン では、 管理者は認証ルールのルール ノ ー ド を設定で き ます。 利用可能な承認プ ラ
グ イ ン を確認す る には、 Policy Builder で [ ツール ] → [Rule Builder] の順に選択 し て、 Rule Builder
を起動 し ます。 図 5 の よ う に、 Rule Builder の ツールバーに、 イ ン ス ト ール さ れてい る 各承認プ ラ
グ イ ンのア イ コ ン が表示 さ れます。
承認プ ラ グ イ ン には、判定ポ イ ン ト がルールで使用 さ れた場合に表示 さ れ る 大 き な Rule Builder の
ア イ コ ン があ り ます。 認証ルールで使用 さ れてい る 承認プ ラ グ イ ン を確認す る には、 [ ルール リ ス
ト ] か ら ルールを選択 し ます。
GUI のカ ス タ マ イ ズ : Policy Builder API
31
図5
Rule Builder
図 5 の よ う に、 各ルール ノ ー ド には、 0、 1、 ま たは 2 つの コ ネ ク タ 分岐 ( 赤 と 緑の矢印 ) があ り
ます。 コ ネ ク タ 分岐に よ っ てルール ノ ー ド を接続 し 、 認証ルールを作成 し ます。 表示 さ れ る コ ネ
ク タ 分岐の数は、 Configuration Editor の種類に よ っ て異な り ます。
図 6 の認証ルールには、 次の よ う な 4 種類の承認プ ラ グ イ ンが示 さ れてい ます。
32
•
サブルール : サブルールは、 あ る 1 つのルールを別のルールに接続す る 際に使用 さ れます。 こ
の コ ン フ ィ ギ ュ レー タ は予約済みです。 サブルールの コ ン フ ィ ギ ュ レ ー タ は作成 し ないで く
だ さ い。 サブルールには コ ネ ク タ はあ り ません。
•
フ ィ ル タ : フ ィ ル タ は任意の動作を実行 し ますが、認証ルールの処理の流れを変更す る も ので
はあ り ません。 フ ィ ル タ の コ ネ ク タ は true 分岐のみです。 フ ィ ル タ の例 と し ては、 警告通知
コ ン フ ィ ギ ュ レー タ があ り ます。
•
判定ポ イ ン ト : 判定ポイ ン ト は、 条件付き ア ク セス を 実行する Decider プラ グ イ ン を 設定し ま
す。 判定ポイ ン ト は、 認証ルールでの条件付き 判定ポイ ン ト を 表し ま す。 各判定ポイ ン ト には、
true と false の 2 つのコ ネク タ があ り ま す。 判定ポイ ン ト の例と し ては、 ディ レ ク ト リ 属性
評価コ ン フ ィ ギュ レ ータ やア イ デン ティ ティ 認証コ ン フ ィ ギュ レ ータ など があ り ま す。
•
終端ポ イ ン ト : 終端ポ イ ン ト は、 認証ルールの処理を終了 し ます。 終端ポ イ ン ト の コ ン フ ィ
ギ ュ レー タ は、 許可 と 拒否の 2 つの カ テ ゴ リ に分類 さ れ ま す。 終端ポ イ ン ト には コ ネ ク タ は
あ り ません。 終端ポ イ ン ト の例 と し ては、 ロ グ ア ウ ト コ ン フ ィ ギ ュ レー タ や リ ダ イ レ ク ト コ
ン フ ィ ギ ュ レー タ な ど があ り ます。
第3章
警告通知 フ ィ ル タ
サブルール
false コ ネ ク タ
終端ポ イ ン ト ( 拒否 )
ア イ デン テ ィ テ ィ
認証の判定ポ イ ン ト
true コ ネ ク タ
終端ポ イ ン ト
( 許可 )
図6
認証ルール
本書では、 フ ィ ル タ 、 終端ポ イ ン ト 、 サブルールのカ ス タ マ イ ズについては取 り 上げ ません。
Policy Builder API の仕組み
Policy Builder API での作業 と は、 基本的に、 Policy Builder に よ っ て表示 さ れ る JPanel の作成で
す。 こ れに よ り 、 開発者は Configuration Editor を柔軟に設計で き る よ う にな り ます。
Policy Builder では、 標準的なボ タ ン ([OK]、 [ 取消 ]、 [ ヘルプ ]) を含む JDialog に Configuration
Editor が 表示 さ れ ま す。 コ ー ル バ ッ ク メ ソ ッ ド を オ ー バ ー ラ イ ド す る 方法 は、 35 ペー ジ の
「Configuration Editor の作成」 を参照 し て く だ さ い。
Policy Builder API はポ リ シー ス ト アか ら 最新の設定情報を取得 し ます。XML プ ロ パテ ィ は ク ラ ス
フ ィ ール ド m_properties で確認で き ます。 Configuration Editor には こ の フ ィ ール ド で設定 さ れ
た状態を適用 し ます。 [OK] ボ タ ン を押す と 、 Configuration Editor は m_properties フ ィ ール ド を
設定 し 新 し い内容 を 反映 さ せ ま す。 Configuration Editor が正常に終了す る と 、 その時点で Policy
Builder は自動的に XML 設定を ポ リ シー ス ト アに格納 し ます。
Policy Builder API のク ラ ス と ユーテ ィ リ テ ィ
Policy Builder API の中心にな る のは RuleComponentPanel ク ラ ス です。 こ の ク ラ ス は標準的な
Java の JPanel を拡張 し 、 ポ リ シー ス ト ア と の通信を カプセル化 し ます。 すべての Configuration
Editor では、 RuleComponentPanel ク ラ ス を拡張す る 必要があ り ます。
RuleComponentPanel ク ラ ス は、 各プ ラ グ イ ン に対す る 適切な XML 設定を抽出 し 、 継承 さ れ
た フ ィ ー ル ド m_properties に 格 納 し ま す。 こ の フ ィ ー ル ド の 種 類 は、 後 に 示 す よ う に
Property と な り ま す。 m_properties フ ィ ール ド には、 プ ラ グ イ ン イ ン ス タ ン ス の設定状態
が格納 さ れ ます。 Configuration Editor が正常に終了す る と 、 その時点でプ ラ グ イ ンは
m_properties 変数を更新 し 、 新 し く 設定 さ れた状態を反映 さ せます。 Policy Builder API では自
動的に、m_properties フ ィ ール ド の内容を格納 し ます。こ の フ ィ ール ド に含ま れ る XML ド キ ュ
メ ン ト が再びポ リ シー ス ト アに格納 さ れ ます。
GUI のカ ス タ マ イ ズ : Policy Builder API
33
Policy Builder API は、 XML プ ロ パテ ィ を使用 し て、 プ ラ グ イ ン の設定を格納 し ます。 設定へのア
ク セ ス、操作、お よ び保存を行 う には、com.hp.selectaccess.util パ ッ ケージにあ る 、Policy
Builder API の次の XML ク ラ ス を使用す る 必要があ り ます。
•
Property: Property イ ン タ ーフ ェ イ ス は、 PropertyElement お よ び
PropertyListElement に よ っ て実装 さ れます。
•
PropertyElement: PropertyElement ク ラ ス は、 名前 と 値のペア を格納す る XML 要素を
表 し ます。 値は文字列でなければな り ません。
•
PropertyListElement: こ の ク ラ ス は、 PropertyElement と ネ ス ト さ れた
PropertyListElement の リ ス ト を表 し ます。
XML のプ ロ パテ ィ の詳細は、 『HP OpenView Select Access 6.2 開発者向け リ フ ァ レ ン ス ガ イ ド 』 を
参照 し て く だ さ い。
Policy Builder API では上記のほか、 次に示す よ う な、 多 く のプ ラ グ イ ン で使用 さ れ る 複数の ク ラ
ス が com.hp.selectaccess.util パ ッ ケージに含まれてい ます。
•
CDN: こ の ク ラ ス は正規の識別名 (DN) を表 し ます。 DN の構文では同 じ 名前を複数の方法で定
義で き る ため、 CDN ク ラ ス に よ っ て DN を正規化 し ます。 CDN ク ラ ス では、 正規化 さ れた DN
を取得 し 、あ る 1 つの DN が別の DN の名前空間に存在 し てい る か ど う か を確認す る ための複
数の方式を提供 し てい ます。 こ の ク ラ ス を使用 し て、 ア イ デン テ ィ テ ィ オブジ ェ ク ト のデ ィ
レ ク ト リ の場所 と 、 一時プ ロ フ ァ イ ルのキ ャ ッ シ ュ の場所を設定 し ます。 一時プ ロ フ ァ イ ル
の詳細は、 75 ページの 「LdapConnection / User / UserSource / UserCache」 を参照 し て く だ さ い。
•
TableSorter お よ び TableUtil: こ の ク ラ ス は、 た と えば RADIUS サーバー構成をサポー
ト す る 際に使用す る よ う な テーブル モデルに対 し て有効な ク ラ ス です。
Policy Builder プ ラ グ イ ンの作成
Policy Builder プ ラ グ イ ン の作成は簡単です。 Configuration Editor の作成は、 標準的な JPanel の
作成に比較 し て、 それほ ど難 し い も のではあ り ません。
新 し い Policy Builder プ ラ グ イ ン を作成するには
34
1
Policy Validator プ ラ グ イ ン を設定す る Configuration Editor を作成 し ます。 35 ページの
「Configuration Editor の作成」 を参照 し て く だ さ い。
2
承認プ ラ グ イ ン を作成す る 場合は、 プ ラ グ イ ン ア イ コ ン と ツールバー ア イ コ ン を作成 し ま
す。 37 ページの 「承認プ ラ グ イ ン のア イ コ ンの作成」 を参照 し て く だ さ い。
3
プ ラ グ イ ン を設定す る component.xml フ ァ イ ルを作成 し ます。 37 ページの
「component.xml フ ァ イ ルの作成」 を参照 し て く だ さ い。
4
プ ラ グ イ ン を ロ ー ド し ます。 40 ページの 「Policy Builder プ ラ グ イ ン の イ ン ス ト ール」 を参照
し て く だ さ い。
5
プ ラ グ イ ン を テ ス ト し ます。 グ ラ フ ィ カル コ ン ポーネ ン ト が正 し く 動作 し 、 設定 さ れた状態
が正 し く 格納 さ れ取得で き る こ と を確認 し ます。
第3章
Configuration Editor の作成
Configuration Editor を作成す る 前に、 Policy Validator プ ラ グ イ ンの設定要件を把握す る 必要があ り
ます。 Configuration Editor には、 各フ ィ ール ド を設定す る ためのグ ラ フ ィ カル イ ン タ ーフ ェ イ ス
が必要です。 Policy Builder では、 管理者がルールに対 し て カ ス タ ム コ ン ポーネ ン ト の変更や追加
を行 う 際、 JDialog に Configuration Editor が表示 さ れ ます。
カ ス タ ム エデ ィ タ 作成のガ イ ド ラ イ ン
Configuration Editor の要件
•
Policy Validator プ ラ グ イ ン を設定す る 管理グ ラ フ ィ カル イ ン タ ーフ ェ イ ス を表示 し ます。
•
最新の設定を取得 し 、 その設定を反映す る よ う にグ ラ フ ィ カル イ ン タ ーフ ェ イ ス を初期化 し
ます。
•
エ ン ド ユーザーが実行 し た操作を処理 し ます。 作成す る Configuration Editor に応 じ て、 ボ タ
ン、 更新フ ィ ール ド 、 ポ ッ プア ッ プ ウ ィ ン ド ウ な ど を処理す る 必要があ り ます。
•
[OK] ボ タ ンが押 さ れた場合に、 設定の状態を確認 し て保存 し ます。
Configuration Editor を作成するには
1
開発環境の CLASSPATH 設定に、 Java アーカ イ ブ /shared/PolicyBuilder.jar、
/shared/jetty/policy_builder/protected/shared.jar を追加 し ます。
2
RuleComponentPanel を拡張す る ク ラ ス を作成 し ます。 Policy Validator プ ラ グ イ ンの設定
に必要な テ キ ス ト フ ィ ール ド 、 ブ ラ ウ ザ、 ボ タ ン な ど のグ ラ フ ィ カル コ ン ポーネ ン ト を追
加 し ます。
3
RuleComponentPanel メ ソ ッ ド を オーバー ラ イ ド し ます。 こ れ ら の メ ソ ッ ド については、
後述の説明を参照 し て く だ さ い。
4
ク ラ ス を コ ンパ イ ル し ます。
5
component.jar と いう 名前の JAR フ ァ イ ルにすべてのク ラ ス フ ァ イ ルを パッ ケ ージし ま す。
Policy Builder で Configuration Editor を表示す る と 、 [OK]、 [ 取消 ]、 [ ヘルプ ] ボ タ ン を含む基本 ウ ィ
ン ド ウ にパネルが配置 さ れ ま す。 RuleComponentPanel ク ラ ス は、 ポ リ シー ス ト ア か ら XML
設 定 を ロ ー ド し 、 ク ラ ス メ ン バ 変 数 m_properties に XML ド キ ュ メ ン ト を 配 置 し ま す。
RuleComponentPanel ク ラ ス と の通信が正 し く 実行 さ れ る ためには、 次の メ ソ ッ ド を オーバー
ラ イ ド す る 必要があ り ます。
•
initialize(): Policy Builder API は、 XML 設定の含まれた m_properties を初期化 し た
後、 initialize() メ ソ ッ ド を 呼 び 出 し ま す。 こ の メ ソ ッ ド を オ ー バ ー ラ イ ド し て、
m_properties の XML 設定を処理 し 、 設定デー タ の検証後、 その内容が反映 さ れ る よ う に
グ ラ フ ィ カル イ ン タ ーフ ェ イ ス の状態を設定 し ます。
•
okClicked(): Configuration Editor の設定後、 管理者が [OK] ボ タ ン を ク リ ッ ク し た場合に、
okClicked() メ ソ ッ ド が Policy Builder API に よ っ て呼び出 さ れ ま す。 プ ラ グ イ ンは こ の メ
ソ ッ ド を オーバー ラ イ ド し 、グ ラ フ ィ カル イ ン タ ーフ ェ イ ス の設定状態を検証後、プ ロ パテ ィ
を 再 び m_properties 変 数 に 格 納 し 直 し ま す。 こ の メ ソ ッ ド が true を 返 し た 場 合、
RuleComponentPanel ク ラ ス はポ リ シー ス ト アに m_properties 変数を格納 し て終了 し
ます。 こ の メ ソ ッ ド が false を返 し た場合は、 RuleComponentPanel ク ラ ス は終了 し ませ
ん。 こ れに よ り 、 Configuration Editor に正 し く 設定 さ れていない フ ィ ール ド があ る 場合に修正
を行 う こ と がで き ます。
GUI のカ ス タ マ イ ズ : Policy Builder API
35
•
helpClicked(): [ ヘルプ ] ボ タ ン が押 さ れた場合に、 Policy Builder API は helpClicked()
メ ソ ッ ド を呼び出 し ま す。 必要に応 じ て helpClicked() メ ソ ッ ド を オーバー ラ イ ド し て、
管理者の Configuration Editor の使用を サポー ト で き ます。 こ こ では、 ヘルプ テ キ ス ト を含む
ポ ッ プア ッ プ ウ ィ ン ド ウ の表示、 ま たはヘルプ ウ ィ ン ド ウ を表示す る 外部 ク ラ ス の呼び出 し
を行い ま す。 外部ヘルプの ク ラ ス で言語 イ ンデ ッ ク ス を使用す る こ と に よ り 、 英語以外の表
記に対応で き ます。
•
cancelClicked(): [ 取消 ] ボ タ ンは RuleComponentPanel に よ っ て自動的に処理 さ れま
す。 Policy Builder は設定を元に戻 し て終了 し ま す。 Policy Builder が取消の要求を処理す る 前
に、 プ ラ グ イ ン が特別な処理を必要 と し てい る 場合以外は、 こ の メ ソ ッ ド を オーバー ラ イ ド
す る 必要はあ り ません。
次の メ ソ ッ ド は、 画面を表示す る 時点で初期化 さ れていないグ ラ フ ィ カル コ ン ポーネ ン ト の初期
化やサ イ ズ変更を行 う 場合に便利です。 一部のプ ラ グ イ ン では、 initialize() メ ソ ッ ド の代わ
り に、 次の メ ソ ッ ド のオーバー ラ イ ド が実行 さ れ る 場合があ り ます。
•
handleWindowOpened(): こ の メ ソ ッ ド は、 画面が初めて表示 さ れた場合にのみ呼び出 さ れ
ます。
•
handleComponentShown(): こ の メ ソ ッ ド は、画面が表示 さ れた と き に Policy Builder API に
よ っ て呼び出 さ れ ます。
36 ページの 「Policy Builder プ ラ グ イ ン フ レーム ワー ク のサン プル」 は、 Policy Builder プ ラ グ イ ン
フ レーム ワー ク のサン プルを示 し てい ます。
Policy Builder プ ラ グ イ ン フ レームワー ク のサン プル
次の コ ー ド サン プルは、 プ ラ グ イ ン フ レーム ワー ク の作成方法の例です。
import
import
import
import
import
com.hp.selectaccess.rulebuilder.RuleComponentPanel;
com.hp.selectaccess.util.CDN;
com.hp.selectaccess.util.Property;
com.hp.selectaccess.util.PropertyListElement;
com.hp.selectaccess.util.PropertyElement;
... その他の イ ン ポー ト ...
public class SamplePropertyEditor extends RuleComponentPanel implements
ActionListener
{
... グ ラ フ ィ カルな ウ ィ ジ ェ ッ ト を含む コ ン ス ト ラ ク タ ...
// Overload Policy Builder API methods
// Initialize the GUI
public boolean initialize(){ ... }
// Save the GUI state to XML
public boolean okClicked() { ... }
// Provide Help
public boolean helpClicked() { ...}
36
第3章
// Do not need to overload the Cancel button
... ユーザー操作を処理す る GUI ...
}
承認プ ラ グ イ ンのア イ コ ンの作成
Rule Builder のプ ラ グ イ ン では、 ツールバー ア イ コ ン と ルール ペ イ ン ア イ コ ン と い う 、2 つの GIF
形式のア イ コ ン が必要です。 ツールバー ア イ コ ンは 16 × 16 ピ ク セル、 ルール ペ イ ン ア イ コ ン
は 32 × 32 ピ ク セルです。 ア イ コ ン には最大で 256 色が使用可能です。
component.xml フ ァ イルの作成
component.xml フ ァ イ ルの目的は 2 つあ り ます。 1 つは Policy Builder へのプ ラ グ イ ン の設定方
法の通知、 も う 1 つは Configuration Editor の新 し い イ ン ス タ ン ス に渡 さ れ る プ ロ パテ ィ リ ス ト の
格納です。 プ ロ パテ ィ リ ス ト に格納 さ れてい る プ ロ パテ ィ を使用 し て、 Configuration Editor のデ
フ ォ ル ト 値を設定で き ます。 component.xml フ ァ イ ルは、 プ ラ グ イ ン設定のプ ロ パテ ィ 値のテ
ン プ レー ト と し て機能 し ます。
component.xml フ ァ イ ルの DTD ( 文書型定義 ) を作成す る 必要はあ り ません。
component.xml フ ァ イル作成のガ イ ド ラ イ ン
component.xml フ ァ イ ルに含め る 必要があ る 3 つの項目
•
XML バージ ョ ン 1.0 準拠を示す行
•
表 7 に示す属性を使用す る コ ン ポーネ ン ト 要素
•
Configuration Editor の新 し い イ ン ス タ ン ス のデフ ォ ル ト 値の設定に使用 さ れ る 、 オプシ ョ ン の
プ ロ パテ ィ を含むプ ロ パテ ィ リ ス ト
GUI のカ ス タ マ イ ズ : Policy Builder API
37
次の表は、 component.xml フ ァ イ ル内の COMPONENT 要素の属性を示 し てい ます。
表7
コ ンポーネ ン ト タ グの属性
属性名
説明
NAME
必須。 こ の文字列は Policy Builder で使用す る プ ラ グ イ ン を特定 し ま
す。 各プ ラ グ イ ンには一意の名前が必要です。
DESCRIPTION
必須。 管理者は、 こ の文字列に よ る 記述を参照 し ます。 判定ポ イ ン
ト プ ラ グ イ ン では、 こ れは Rule Builder ツールバーの ツール ヒ ン ト
と し て表示 さ れます。 認証プ ラ グ イ ン では、 [ 認証方式 ] パネル内の
ラ ジオ ボ タ ンのオプシ ョ ン と し て表示 さ れ ます。
TYPE
必須。 プ ラ グ イ ンの種類を示 し ます。 サポー ト さ れ る 値は次の と お
り です。
• authenticate
• decision
• filter
• allow
• deny
• subrule
Policy Builder の種類に関す る 詳細は、 30 ページの 「Policy Builder プ
ラ グ イ ンの種類」 を参照 し て く だ さ い。
CONDITION
必須。 値 “any” を使用 し ます。 こ の属性は、 プ ラ グ イ ン を Policy
Builder のルールに組み込む際に内部的に使用 さ れ ます。
CONFIGURATOR
必須。こ の文字列は、プ ラ グ イ ン で使用す る Configurator Editor を Rule
Builder に通知 し ます。 こ の値には Java ク ラ ス の フル ネーム を含め る
必要があ り ます。 た と えば、
“com.hp.
selectaccess.rulebuilder.screens.
RadiusPanel” の よ う にな り ます。
EVALUATOR
承認プ ラ グ イ ン では必須。 こ の文字列は、 認証ルールを評価す る 際
に使用す る 判定ポ イ ン ト プ ラ グ イ ン を Policy Validator に通知 し ま
す。 Policy Validator の各プ ラ グ イ ンの詳細は、 第 4 章、 「認証方式 と
認証ルールのカ ス タ マ イ ズ : Validator API」 を参照 し て く だ さ い。
AUTHENTICATOR
認証プ ラ グ イ ン では必須。 こ の文字列は、 使用す る 認証プ ラ グ イ ン
を Policy Validator に通知 し ます。 Policy Validator の各プ ラ グ イ ン の詳
細は、 第 4 章、 「認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator
API」 を参照 し て く だ さ い。
RADIUS の component.xml のサン プルは、 RADIUS プ ラ グ イ ン の component.xml フ ァ イ ルを示
し てい ま す。 各プ ロ パテ ィ 値は、 新 し い RADIUS サーバーを プ ラ グ イ ン設定に追加す る 場合に、
デフ ォ ル ト 値 と し て使用 さ れます。
38
第3章
RADIUS の component.xml のサン プル
<?xml version='1.0'?>
<COMPONENT TYPE="authenticate"
CONDITION="any"
NAME="RADIUS"
DESCRIPTION="RADIUS"
AUTHENTICATOR="radius"
CONFIGURATOR="com.hp.selectaccess.rulebuilder.screens.RadiusPanel">
<PROPERTYLIST NAME="radius">
<PROPERTY NAME="defaultLoginForm">login_form.html</PROPERTY>
<PROPERTY NAME="defaultChallengeForm">radius_form.html
</PROPERTY>
<PROPERTY NAME="defaultIP">127.0.0.1</PROPERTY>
<PROPERTY NAME="defaultPort">1821</PROPERTY>
<PROPERTY NAME="defaultTimeout">3</PROPERTY>
<PROPERTY NAME="defaultRetry">3</PROPERTY>
</PROPERTYLIST>
</COMPONENT>
GUI のカ ス タ マ イ ズ : Policy Builder API
39
Policy Builder プ ラ グ イ ンのイ ン ス ト ール
Policy Builder プ ラ グ イ ンの作成後、 そのプ ラ グ イ ン を Policy Builder に イ ン ス ト ール し ます。
Policy Builder プ ラ グ イ ン を イ ン ス ト ールするには
1
Configurator Editor の ク ラ ス を Java アーカ イ ブ (JAR) フ ァ イ ルにパ ッ ケージ し ます。 JAR フ ァ
イ ルの名前は component.jar と し ます。 UNIX シ ス テ ム では jar、 Windows シ ス テ ム では
jar.exe を実行す る こ と に よ り 、 アーカ イ ブ フ ァ イ ルを作成で き ます。 Java アーカ イ ブの
作成方法の詳細については、 お手持ちの Java プ ロ グ ラ ミ ン グ シ ス テ ム のマニ ュ アルを参照
し て く だ さ い。
2
component.xml フ ァ イ ル と component.jar フ ァ イ ルを同 じ デ ィ レ ク ト リ に配置 し ます。
一時デ ィ レ ク ト リ も 使用可能です。 プ ラ グ イ ンが承認プ ラ グ イ ン の場合は、
toolbaricon.gif フ ァ イ ル と icon.gif フ ァ イ ル も 同 じ デ ィ レ ク ト リ に配置 し ます。
3
[ ツール ] → [ ポ リ シー プ ラ グ イ ン設定 ] の順に ク リ ッ ク し て、 プ ラ グ イ ン を Policy Builder に
ロ ー ド し ます。 図 7 の よ う に、 プ ラ グ イ ン の場所を指定す る 画面が表示 さ れ ます。 プ ラ グ イ
ン のア ッ プ ロ ー ド 後、 Configuration Editor を使用 し て、 認証ルールや認証サービ ス の設定が
で き る よ う にな り ます。 デ ィ レ ク ト リ を ア ッ プ ロ ー ド し た場合は、 デ ィ レ ク ト リ に格納 さ れ
てい る すべてのプ ラ グ イ ンが イ ン ス ト ール さ れ ます。
図7
4
新 し い Policy Builder プ ラ グ イ ンのア ッ プ ロー ド
プ ラ グ イ ン を LDAP に格納 し た後は、 プ ラ グ イ ンの フ ァ イ ル と デ ィ レ ク ト リ を削除す る こ と
がで き ます。
該 当 す る Policy Validator プ ラ グ イ ン を 作 成 し て イ ン ス ト ー ル す る ま で は、 Policy
Validator ではア イ デン テ ィ テ ィ のア ク セ ス を評価で き ません。
40
第3章
Policy Builder プ ラ グ イ ンの削除
通常の状態では、Policy Builder プ ラ グ イ ン を削除す る 必要はあ り ません。新 し いバージ ョ ン を ア ッ
プ ロ ー ド す る こ と に よ っ て、 古いバージ ョ ン が新 し いバージ ョ ン に置 き 換え ら れ ま す。 ま れに、
プ ラ グ イ ン の古い イ ン ス タ ン ス を 削除 し な ければな ら な い場合が あ り ま す。 Select Access には
Policy Builder プ ラ グ イ ン を削除す る メ カ ニズ ム がないため、 プ ラ グ イ ン のア ン イ ン ス ト ールは手
動で行い ます。
プ ラ グ イ ン の削除では LDAP デー タ を直接操作す る 必要があ る ため、 LDAP デー タ の修正に習熟
し てい る こ と が前提 と さ れ ます。 稼働シ ス テ ム では、 ど う し て も 必要であ る 場合を除 き 、 プ ラ グ
イ ンの削除は実行 し ないで く だ さ い。
Hewlett-Packard は、 必要であ る 場合を除いて、 稼働シ ス テ ム での Policy Builder プ ラ グ イ ンの削除
は推奨 し ま せん。 以下の手順で失敗 し た場合、 LDAP のデー タ の整合性に問題が生 じ 、 Policy
Validator の動作が不安定にな る 可能性があ り ます。
Policy Builder プ ラ グ イ ン を削除するには
1
デ ィ レ ク ト リ サーバーのデー タ ベース をバ ッ ク ア ッ プ し ます。
2
すべてのア ク セ ス ルールお よ び Select Auth ルールを確認 し ます。 すべてのルールか ら 該当の
プ ラ グ イ ン を削除 し ます。 承認プ ラ グ イ ン を削除す る 場合は、 Rule Builder を使用 し て、 すべ
てのア ク セ ス 制御ルールか ら コ ン ポーネ ン ト を削除 し ます。 認証プ ラ グ イ ン を削除す る 場合
は、 Policy Builder を使用 し て、 すべての Select Auth ルールか ら コ ン ポーネ ン ト を削除 し ます。
3
デ ィ レ ク ト リ サーバーのプ ラ グ イ ン エ ン ト リ の場所を確認 し ます。 Select Access を イ ン ス
ト ール し た LDAP の分岐か ら プ ラ グ イ ンの場所を確認で き ます。 図 8 は、 Select Access コ ン
ポーネ ン ト の LDAP での配置を示 し てい ます。 Select Access は、 LDAP 分岐
"ou=SelectAccess_5.1, ou=Applications, dc=baltimore, dc=com" に イ ン ス
ト ール さ れてい ます。 ま た、 認証プ ラ グ イ ンは "ou=authenticationmethods,
ou=securitypolicy" サブ ツ リ ー、 承認プ ラ グ イ ンは "ou=rulecomponents,
ou=securitypolicy" サブ ツ リ ーに配置 さ れてい ます。 グ ラ フ ィ カルな LDAP ブ ラ ウ ザを
使用 し ていない場合、 次の LDAP URL を指定 し て、 RADIUS プ ラ グ イ ン を確認で き ます。
“ldap://localhost:389/ou=authenticationmethods, ou=securitypolicy,
ou=SelectAccess_5.1, ou=Applications, dc=hp,
dc=com?sub?(nxPolicyComponent=RADIUS)”
GUI のカ ス タ マ イ ズ : Policy Builder API
41
図8
4
デ ィ レ ク ト リ オブジ ェ ク ト のプ ロ パテ ィ を表示 し て、 適切なエ ン ト リ を選択 し てい る こ と を
確認 し ます。 プ ラ グ イ ン の名前に対 し て nxPolicyComponent 属性が設定 さ れてい る 必要
があ り ます。 ま た、 config.xml フ ァ イ ルで、 プ ラ グ イ ン が nxXml 属性内に含ま れてい る
こ と を確認 し ます。 グ ラ フ ィ カルなブ ラ ウ ザを使用 し ていない場合は、 属性値をデ コ ー ド し
て XML を確認 し て く だ さ い。 図 9 は、 認証プ ラ グ イ ンの標準的な LDAP エ ン ト リ を示 し て
い ます。
図9
42
LDAP での Policy Builder プ ラ グ イ ンの場所
Policy Builder プ ラ グ イ ンの LDAP エ ン ト リ
5
LDAP エ ン ト リ を削除 し ます。
6
Policy Validator のキ ャ ッ シ ュ を更新 し ます。 Policy Builder か ら [ ツール ] → [Validator のキ ャ ッ
シ ュ を ク リ ア ] の順に選択 し て く だ さ い。
第3章
7
Policy Builder を再起動 し 、 削除 し たプ ラ グ イ ンが Rule Builder の メ ニ ュ ー バーや使用可能な
認証サービ ス の リ ス ト に表示 さ れていない こ と を確認 し ます。 以上で、 プ ラ グ イ ンお よ び関
連す る ア イ コ ン の削除は完了です。
保護下の リ ソ ース にア ク セ ス し て、 残 り のポ リ シーが正常に機能 し てい る こ と を確認
し ます。
8
対応す る Policy Validator を削除 し ます。 詳細は、 55 ページの 「Policy Validator プ ラ グ イ ンの
削除」 を参照 し て く だ さ い。
GUI のカ ス タ マ イ ズ : Policy Builder API
43
44
第3章
4 認証方式 と 認証ルールのカ ス タ マ イ ズ :
Validator API
Select Access では、 Policy Validator の拡張に よ り 、 認証方式 と 認証ルールのカ ス タ マ イ ズが可能で
す。 こ の章では、 Validator API を使用 し て、 認証お よ び承認のプ ラ グ イ ン を作成す る 方法につい
て説明 し ます。
こ の章の概要
こ の章では、 Policy Validator、 API、 Policy Validator の動作を カ ス タ マ イ ズす る ために こ の API で
作成で き る プ ラ グ イ ン について説明 し ます。
•
Policy Validator (45 ページ )
•
Validator API (46 ページ )
•
Policy Validator プ ラ グ イ ンのルールの作成 (53 ページ )
•
Policy Validator プ ラ グ イ ンの イ ン ス ト ール (55 ページ )
•
Policy Validator プ ラ グ イ ンの削除 (55 ページ )
•
認証プ ラ グ イ ン の作成 : フ ァ イ ルベース の認証の例 (55 ページ )
•
判定ポ イ ン ト プ ラ グ イ ンの作成 : デ ィ レ ク ト リ 属性の例 (68 ページ )
Policy Validator
Policy Validator は、 ア イ デン テ ィ テ ィ を認証 し 、 リ ソ ースへのア ク セ ス を承認す る サービ ス です。
Apache 2 Enforcer プ ラ グ イ ン な ど の Enforcer プ ラ グ イ ン は、 Policy Validator に ク リ エ を行い、 ア
イ デン テ ィ テ ィ を認証 し て要求 さ れた リ ソ ースへのア ク セ ス の可否を決定 し ます。Policy Validator
は、 Policy Builder に よ っ て設定 さ れたセキ ュ リ テ ィ ポ リ シーを使用 し て こ の要求を評価 し ます。
Select Access で Policy Validator プ ラ グ イ ン を使用す る ための設定を行 う 場合、 まずプ ラ グ イ ン に
対す る Policy Builder の Configuration Editor を作成す る こ と が必要です。 Policy Builder プ ラ グ イ ン
の作成の詳細は、 第 3 章、 「GUI のカ ス タ マ イ ズ : Policy Builder API」 を参照 し て く だ さ い。
46 ページ の図 10 は、 Policy Validator、 Policy Builder お よ び Enforcer プ ラ グ イ ン を一緒に使用 し
て、 認証サービ ス や承認サービ ス を拡張す る 方法を示 し てい ま す。 Policy Validator プ ラ グ イ ン で
は、 認証サービ スお よ び承認サービ ス を追加で き ます。 Policy Builder を使用 し て、 セ キ ュ リ テ ィ
ポ リ シ ーに こ れ ら の サー ビ ス を 設定 し ま す。 各ポ リ シ ーは ポ リ シ ー ス ト ア に格納 さ れ ま す。
Policy Validator が ポ リ シ ー ノ ー ド を 評価す る プ ラ グ イ ン イ ン ス タ ン ス を 作成す る と 、 Policy
Validator は ポ リ シー ス ト ア に格納 さ れてい る 設定内容を使用 し て、 プ ラ グ イ ン を初期化 し ます。
45
プ ラ グ イ ン の初期化後、 Policy Validator は Enforcer プ ラ グ イ ン か ら の リ ソ ース の要求を評価で き
る よ う にな り ま す。 Policy Validator は、 ア ク セ ス の許可、 拒否、 ア イ デン テ ィ テ ィ への認証の通
知 と い っ た 指示 を Enforcer プ ラ グ イ ン に伝 え ま す。 Policy Validator と Enforcer プ ラ グ イ ン は、
XML を使用 し て通信を行い ます。
図 10
Policy Validator プ ラ グ イ ン と Select Access コ ンポーネ ン ト の連携
Validator API
Policy Validator は、 Policy Builder に よ っ て設定 さ れたセ キ ュ リ テ ィ ポ リ シーを使用 し て、 リ ソ ー
スへのア ク セ ス要求を評価 し ます。セキ ュ リ テ ィ ポ リ シーは複数のポ リ シー ノ ー ド か ら 構成 さ れ
る 決定ツ リ ーです。各ポ リ シー ノ ー ド は Policy Validator プ ラ グ イ ン に よ っ て実装 さ れます。Policy
Validator プ ラ グ イ ン は、 認証サービ ス お よ び承認サービ ス を提供 し ま す。 Policy Validator は決定
ツ リ ー を 評価 し て、 ど の Policy Validator プ ラ グ イ ン を 呼び出すか を 決定 し ま す。 Policy Validator
は、 プ ラ グ イ ンの応答を、 リ ソ ース に対 し て設定 さ れた決定ツ リ ー と 比較 し ます。 以上の よ う に、
Policy Validator はポ リ シー評価の一連のプ ロ セ ス を制御 し ます。
Policy Validator プ ラ グ イ ンは、認証要求や承認要求を大量に処理す る 必要があ り ます。 ス ループ ッ
ト を最大にす る ため、 Validator API では C++ プ ロ グ ラ ミ ン グ言語を使用 し てい ます。
Validator API は、他の Select Access コ ン ポーネ ン ト と の通信に XML を使用 し ます。Policy Validator
は、 XML を使用 し てプ ラ グ イ ン設定を格納 し 、 Enforcer プ ラ グ イ ン と 通信 し ます。 XML を使用
す る こ と に よ り 、 開発者は自由にプ ラ グ イ ン を設計 し 、 送信す る XML にあ ら ゆ る 種類のデー タ
を組み込む こ と がで き ます。
Select Access には、 XML ド キ ュ メ ン ト 、 ノ ー ド 、 プ ロ パテ ィ リ ス ト 、 プ ロ パテ ィ を格納 し 処理す
る ための ク ラ ス が組み込まれてい ます。 こ う し た XML ク ラ ス は、 標準的な XML ツールキ ッ ト よ
り も 高いパ フ ォ ーマ ン ス を 実現 し ま す。 XML プ ロ パテ ィ リ ス ト お よ びプ ロ パテ ィ の管理には、
Select Access の ク ラ ス を使用す る 必要があ り ます。 ク ラ ス の詳細は、 50 ページの 「Validator API の
ク ラ ス と ユーテ ィ リ テ ィ 」 を参照 し て く だ さ い。
46
第4章
Validator API プ ラ グ イ ンの種類
Validator プ ラ グ イ ン には、 認証プ ラ グ イ ン と 判定ポ イ ン ト プ ラ グ イ ンの 2 種類があ り ます。
認証プ ラ グ イ ン
認証プ ラ グ イ ン に よ り 、 ア イ デン テ ィ テ ィ の身元を確認す る ための新 し い方式を作成で き ま す。
Policy Builder を 使用 し て、 1 つ以上 の 認証 サ ー ビ ス を 使用す る ID 選択 を 設定 し ま す。 Policy
Validator は保護 さ れた リ ソ ースへのア ク セ ス要求を受け取 る と 、 ポ リ シー マ ト リ ッ ク ス を使用 し
て、 リ ソ ース に対 し て許可 さ れてい る Select Auth の認証サービ ス を判定 し ます。 Select Auth ルー
ルの各認証方式は、 Policy Validator の認証プ ラ グ イ ンに対応付け ら れてい ます。
例 と し て、47 ページの図 11 では、RADIUS 認証方式を使用す る よ う ID 選択が設定 さ れてい ます。
Policy Validator が保護 さ れた リ ソ ースへのア ク セ ス要求を受け取 る と 、ユーザーの認証に RADIUS
プ ラ グ イ ンが使用 さ れます。
図 11
Select Access での Policy Validator プ ラ グ イ ンの使用
判定ポ イ ン ト プ ラ グ イ ン
判定ポ イ ン ト プ ラ グ イ ンに よ り 、 リ ソ ースへのア ク セ ス を制御す る ための新 し い方法を作成で き
ます。 一部のセキ ュ リ テ ィ ポ リ シーでは、 ア ク セ ス の許可 / 拒否を、 リ ソ ース にア ク セ ス し よ う
と す る ア イ デン テ ィ テ ィ ま たはグループのみで判定 し てい ます。 し か し 、 多 く の場合、 セ キ ュ リ
テ ィ ポ リ シーには、 よ り 複雑な ア ク セ ス 制御の判定が必要にな り ます。 Select Access は、 条件付
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
47
き ルールを使用す る こ と に よ っ て、企業の複雑なセキ ュ リ テ ィ ポ リ シーをサポー ト し ます。Policy
Builder には、 ア ク セ ス 許可 、 ア ク セ ス 拒否
、 条件付 き ア ク セ ス
と い う 、 3 種類のア ク
セ ス ルールがあ り ます。
条件付 き ルール (48 ページの図 12 に例を示 し ます ) は、 鍵のア イ コ ン
で示 さ れ ます。 条件付 き
ルールは Rule Builder を 使用 し て設定 し ま す。 こ のルールに よ っ て、 Policy Validator は複雑な セ
キ ュ リ テ ィ ポ リ シーをサポー ト し ます。 条件付 き ルールは、 セキ ュ リ テ ィ ポ リ シーの決定ツ リ ー
を部分的に定義 し ます。 決定ツ リ ーの各 ノ ー ド は、 評価用のプ ラ グ イ ン イ ン ス タ ン ス に対応 し て
い ます。
48 ページの図 12 には、 さ ま ざ ま な種類のプ ラ グ イ ンが示 さ れてい ます。 本書では、 次のプ ラ グ イ
ン の う ち、 判定ポ イ ン ト プ ラ グ イ ン のみを説明 し てい ます。
•
サブルール プ ラ グ イ ンは、 決定ツ リ ーのルー ト です。 Select Access 内部での使用に限定 さ れ
てお り 、 予約済みです。 し たが っ て、 サブルー ト の判定ポ イ ン ト プ ラ グ イ ンは作成 し ないで
く だ さ い。 サブルール プ ラ グ イ ン には、 単一の ツ リ ー コ ネ ク タ があ り ます。 こ れは、 ツ リ ー
内の最初のプ ラ グ イ ン を識別す る ために使用 さ れ ます。
•
フ ィ ル タ プ ラ グ イ ンは、 ロ グ な ど の動作を実行す る プ ラ グ イ ン です。 セキ ュ リ テ ィ ポ リ シー
の流れを変更す る も のではあ り ません。 フ ィ ル タ プ ラ グ イ ン には、 単一の ツ リ ー コ ネ ク タ が
あ り ます。 こ れは、 ツ リ ー内の後続のプ ラ グ イ ン を識別す る ために使用 さ れ ます。
•
判定ポ イ ン ト プ ラ グ イ ンは、 決定ツ リ ー内の任意の分岐に対応 し てい ます。 すべての 判定ポ
イ ン ト プ ラ グ イ ンは、 決定ツ リ ー内で true と false の両方の コ ネ ク タ を持ち ます。 判定ポ
イ ン ト プ ラ グ イ ンは要求を評価 し 、 Policy Validator に対 し て、 true ま たは false のいずれ
かの分岐に進む よ う 指示 し ます。
•
終端ポ イ ン ト プ ラ グ イ ンは、 決定ツ リ ーの リ ーフ に対応 し てい ます。 終端ポ イ ン ト は Policy
Validator に対 し 、 ア ク セ ス要求を許可ま たは拒否す る よ う に通知 し ます。
本書では、 フ ィ ル タ 、 終端ポ イ ン ト 、 サブルールの各プ ラ グ イ ンのカ ス タ マ イ ズにつ
いては取 り 上げません。
警告通知フ ィ ル タ
サブルール
false コ ネ ク タ
終端ポ イ ン ト ( 拒否 )
ユーザー認証の
判定ポ イ ン ト
true コ ネ ク タ
終端ポ イ ン ト
( 許可 )
図 12
48
ルールの例
第4章
Validator API の仕組み
Policy Validator は、 起動時にすべての Validator API プ ラ グ イ ン を ロ ー ド し て初期化 し ます。 Policy
Validator は次の よ う に動作 し ます。
1
プ ラ グ イ ン を検索 し ます。 Policy Validator は起動時に、 <SA_Install>/bin/plugins のデ ィ レ
ク ト リ にあ る すべての共有 ラ イ ブ ラ リ を読み込みます。
2
プ ラ グ イ ン を ロ ー ド し ます。 Policy Validator は、 静的な init() メ ソ ッ ド を呼び出 し て、 プ
ラ グ イ ン のテーブルを取得 し ます。 テーブルの各行には、 プ ラ グ イ ンの名前、 種類、
factory() メ ソ ッ ド へのポ イ ン タ を含むプ ラ グ イ ンのエ ン ト リ が記載 さ れてい ます。 プ ラ
グ イ ン テーブルの null エ ン ト リ は、 最後の行の識別用に使用 さ れ ます。
3
Policy Validator は起動後、 Enforcer プ ラ グ イ ン か ら の要求の受信を開始 し ます。 初めて Policy
Validator プ ラ グ イ ン を使用 し てポ リ シーを評価す る 際、 Policy Validator はプ ラ グ イ ンの イ ン
ス タ ン ス を作成 し ます。 Policy Validator は ポ リ シー ス ト ア か ら XML 設定を取得 し ます。 続
いて factory() メ ソ ッ ド を呼び出 し 、 引数 と し て渡 さ れ る XML 設定を使用 し てプ ラ グ イ
ン の イ ン ス タ ン ス を作成 し ます。
init() メ ソ ッ ド お よ び factory() メ ソ ッ ド の詳細は、58 ページの 「factory() メ ソ ッ
ド を使用 し た認証プ ラ グ イ ン の イ ン ス タ ン ス の作成」 お よ び 71 ページの 「判定ポ イ
ン ト プ ラ グ イ ン の イ ン ス タ ン ス の作成」 を参照 し て く だ さ い。
•
Select Auth が ポ リ シー マ ト リ ッ ク ス の リ ソ ース に対 し て有効であ る 場合、 Policy
Validator は Select Auth の設定に基づいて認証を行い ます。 Policy Validator は次の よ う に
動作 し ます。
— 呼び出す認証プ ラ グ イ ン を判断 し ます。 Select Auth は、 1 つ以上の認証方式をサポー
ト す る よ う に設定 さ れてい ます。 Policy Validator は Select Auth に設定 さ れた順序でプ
ラ グ イ ン を実行 し ます。
— 認証プ ラ グ イ ン の authenticate() メ ソ ッ ド を呼び出 し ます。 authenticate()
メ ソ ッ ド は、 ア イ デン テ ィ テ ィ を確認 し 、 結果 コ ー ド を Policy Validator に返 し ます。
— 認証プ ラ グ イ ン に よ っ て返 さ れた結果 コ ー ド に基づいて、 次に行 う 動作 を 決定 し ま
す。 た と えば、 ア イ デン テ ィ テ ィ が認証 さ れた場合は、 Policy Validator は認証プ ラ グ
イ ン の処理を停止 し て、 ア ク セ ス制御ルールの評価を開始 し ます。 反対に、 ア イ デン
テ ィ テ ィ を確認で き なか っ た場合は、 Policy Validator は Select Auth ルールに設定 さ れ
てい る 次の認証プ ラ グ イ ン を呼び出 し て、 ア イ デン テ ィ テ ィ の認証を試みます。 結果
コ ー ド の完全な一覧は、64 ページの 「ア イ デン テ ィ テ ィ の認証」 を参照 し て く だ さ い。
1
Select Auth ルールで存在 し ない認証プ ラ グ イ ン を使用す る よ う に設定 さ れて
い る 場合、 Policy Validator はエ ラ ーを返 し ます。
•
ア イ デン テ ィ テ ィ の認証が不要な場合、 ま たは認証プ ラ グ イ ン がア イ デン テ ィ テ ィ の認
証に成功 し た場合は、 Policy Validator は リ ソ ース に対す る 承認ポ リ シーの処理を開始 し
ます。 ア ク セ ス制御ルールがア イ デン テ ィ テ ィ ま たはグループのみに基づいた ア ク セ ス
の許可 / 拒否を行 う 場合、 Policy Validator は対応す る XML 応答を生成 し 、 Enforcer プ ラ
グ イ ン に返 し ます。
•
リ ソ ース が条件付 き ルールを使用す る よ う に設定 さ れてい る 場合、 Policy Validator は判
定ポ イ ン ト プ ラ グ イ ン の処理を開始 し ます。 条件付 き ルールでは、 Policy Validator は次
の よ う に動作 し ます。
— 呼び出す判定ポ イ ン ト プ ラ グ イ ン を判断 し ます。 Policy Validator は、 まずルールで指
定 さ れた最初の判定ポ イ ン ト プ ラ グ イ ン を処理 し ます。
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
49
— 判定ポ イ ン ト プ ラ グ イ ン の decide() メ ソ ッ ド を呼び出 し ます。 decide() メ ソ ッ
ド は要求を評価 し 、 true ま たは false が返 さ れ ます。 decide() メ ソ ッ ド に よ る
結果 コ ー ド が Policy Validator に返 さ れ ます。 結果 コ ー ド には、 発生 し たエ ラ ーを通知
す る も の、 ま たは特定の動作 ( 後続の説明を参照 ) を実行す る よ う Policy Validator に
指示す る も のがあ り ます。
—
decide() メ ソ ッ ド の結果 コ ー ド に基づいて、 次に呼び出す判定ポ イ ン ト プ ラ グ イ
ン を判断 し ます。 た と えば、 結果 コ ー ド と し て true が返 さ れた場合、 true 分岐で
後続の判定ポ イ ン ト プ ラ グ イ ンが呼び出 さ れます。 ア ク セ ス が拒否 さ れた場合は、
false 分岐で後続の判定ポ イ ン ト プ ラ グ イ ン が呼び出 さ れ ます。 結果 コ ー ド の完全
な一覧は、 73 ページの 「ポ リ シー ノ ー ド の評価」 を参照 し て く だ さ い。
— 決定ツ リ ーの終端ポ イ ン ト プ ラ グ イ ンに達す る ま で、 判定ポ イ ン ト プ ラ グ イ ンの処
理を継続 し ます。 通常、 終端ポ イ ン ト と し ては、 allow、 deny、 redirect、
logoff があ り ます。
— 終端ポ イ ン ト に達す る と Policy Validator は処理を停止 し 、 XML 応答を Enforcer プ ラ
グ イ ン に送信 し ます。
XML 応答にパ ス ワ ー ド な ど の機密情報を含ま ない よ う に し て く だ さ い。情報が ロ グに記録 さ れた
場合、 誤っ て開示 さ れ る 可能性があ る ためです。
XML プ ロ パテ ィ を要求に追加す る こ と に よ っ て、 認証プ ラ グ イ ン と 判定ポ イ ン ト プ ラ グ イ ン の
通信が可能にな り ます。 ま た、 XML プ ロ パテ ィ を応答に追加す る こ と に よ っ て Enforcer プ ラ グ イ
ン と の通信が可能にな り ます。 た と えば、 認証プ ラ グ イ ンは要求内で認証情報を特定で き ない場
合、 プ ロ パテ ィ を応答に追加 し ます。 そ こ で Enforcer プ ラ グ イ ン に対 し て、 ア イ デン テ ィ テ ィ に
名前 と パ ス ワ ー ド の入力を求め る よ う に指示 し ます。
Validator API の ク ラ ス と ユーテ ィ リ テ ィ
Policy Validator プ ラ グ イ ン を作成す る には、Select Access の ク ラ スお よ びユーテ ィ リ テ ィ に関す る
理解が必要です。
次に示す 2 つの ク ラ ス は、 すべて の Policy Validator プ ラ グ イ ン の親 ク ラ ス です。 Policy Validator
プ ラ グ イ ンは、 こ の 2 つの う ちのいずれかの ク ラ ス を継承 し てい る 必要があ り ます。
50
•
AuthPlugin: こ の ク ラ ス は認証プ ラ グ イ ンの親 ク ラ ス です。 AuthPlugin ク ラ ス は、 認証プ
ラ グ イ ン の結果 コ ー ド 、 プ ラ グ イ ン が呼び出す基本 コ ン ス ト ラ ク タ 、 お よ び仮想 メ ソ ッ ド の
authenticate() と handleUserInfo() を 定義 し ま す。 ア イ デ ン テ ィ テ ィ 認証 を 行 う に
は、authenticate() メ ソ ッ ド を オーバー ラ イ ド す る 必要があ り ます。handleUserInfo()
メ ソ ッ ド は、 一時 ア イ デ ン テ ィ テ ィ の 処理お よ び個別化デー タ の 生成 を 自動化 し ま す。
handleUserInfo() メ ソ ッ ド はオーバー ラ イ ド 可能ですが、 特に実行す る 必要はあ り ま せ
ん。 AuthPlugin ク ラ ス については、 55 ページの 「認証プ ラ グ イ ンの作成 : フ ァ イ ルベース
の認証の例」 で詳 し く 説明 し ます。
•
Decider: こ の ク ラ ス は判定ポ イ ン ト プ ラ グ イ ン の親 ク ラ ス です。 Decider ク ラ ス は、 判定
ポ イ ン ト プ ラ グ イ ン の結果 コ ー ド 、 条件付 き ルールの分岐、 お よ び仮想 メ ソ ッ ド decide()
を定義 し ま す。 decide() メ ソ ッ ド を オーバー ラ イ ド し て、 後続の条件付 き ルールの分岐を
true、 false のいずれにす る か を決定す る 必要があ り ます。 こ の ク ラ ス については、 68 ペー
ジの 「判定ポ イ ン ト プ ラ グ イ ンの作成 : デ ィ レ ク ト リ 属性の例」 で詳 し く 説明 し ます。
第4章
ま た、 Validator API には、 次に示す よ う な、 ア イ デン テ ィ テ ィ デー タ の管理に使用 さ れ る 複数の
内部 ク ラ ス があ り ます。 こ れ ら の ク ラ ス を使用 し て、 一時ア イ デン テ ィ テ ィ の作成、 個別化情報
の検索、 ア イ デ ン テ ィ テ ィ キ ャ ッ シ ュ へ の ア ク セ ス、 お よ び LDAP 接続 の取得 を 行い ま す。
AttributeLogic プ ラ グ イ ンは、こ れ ら の ク ラ ス を使用 し て ア イ デン テ ィ テ ィ に関す る 追加情報
を特定 し ます。 一時ア イ デン テ ィ テ ィ 、 UserSource、 お よ び UserCashe の使用方法の例は、 75
ページの 「LdapConnection / User / UserSource / UserCache」 を参照 し て く だ さ い。
•
UserCache: Policy Validator はア イ デン テ ィ テ ィ デー タ を キ ャ ッ シ ュ し て、パフ ォ ーマ ン ス を
向上 し ます。Policy Validator はデ ィ レ ク ト リ サーバーの検索を行 う 代わ り に、ロ ーカル キ ャ ッ
シ ュ へのア ク セ ス を行い ます。 さ ら に、 一時ア イ デン テ ィ テ ィ は LDAP には格納 さ れず、 ア
イ デン テ ィ テ ィ キ ャ ッ シ ュ にのみ配置 さ れます。
•
User: User ク ラ ス には、 ア イ デン テ ィ テ ィ が持つダ イ ナ ミ ッ ク グループ、 グループ メ ンバ
シ ッ プ と い っ た、 ア イ デン テ ィ テ ィ に関連す る あ ら ゆ る 情報が格納 さ れ ます。 こ の ク ラ ス に
よ っ て、 ア イ デン テ ィ テ ィ が一時ア イ デン テ ィ テ ィ か ど う か を判断で き ま す。 ま た、 こ の ク
ラ ス を使用 し て、 ア イ デン テ ィ テ ィ が配置 さ れてい る UserSource も 取得で き ます。
•
UserSource: UserSource ク ラ ス は、 デ ィ レ ク ト リ サーバー と ア イ デン テ ィ テ ィ が配置 さ
れ て い る デ ィ レ ク ト リ 名前空間内の場所 を 表 し ま す。 こ の ク ラ ス を 使用 し て、 設定済みの
UserSources の リ ス ト を取得で き ます。 ア イ デン テ ィ テ ィ の DN が判明 し てい る 場合、 こ の
ク ラ ス を使用 し て ア イ デン テ ィ テ ィ デー タ が格納 さ れてい る UserSource を特定で き ます。
ア イ デ ン テ ィ テ ィ が格納 さ れて い る UserSource を 特定す る こ と に よ っ て、 ア イ デン テ ィ
テ ィ デー タ を格納 し てい る デ ィ レ ク ト リ サーバーへの LdapConnection を取得で き ま す。
こ れは、 デ ィ レ ク ト リ サーバーを照会 し て追加のア イ デン テ ィ テ ィ デー タ を取得 し たい場合
に便利です。
Select Access では、 XML ク ラ ス に よ っ て Policy Validator のプ ラ グ イ ン設定や Enforcer プ ラ グ イ ン
と の通信が処理 さ れ ま す。 こ の Select Access XML ク ラ ス は、 認証プ ラ グ イ ン、 判定ポ イ ン ト プ
ラ グ イ ン、 お よ び Enforcer プ ラ グ イ ン に よ っ て使用 さ れ ます。 Select Access での XML の操作に
ついては、 25 ページの 「XML の重要性」 を参照 し て く だ さ い。
•
XmlParser: こ の ク ラ ス は メ モ リ ま たはフ ァ イ ルのブ ロ ッ ク を解析 し 、 XML ド キ ュ メ ン ト ツ
リ ーを作成 し ます。 Select Access はすべての設定 / 要求 / 応答に対 し て XML ド キ ュ メ ン ト を
作成す る ため、 通常、 こ の ク ラ ス を直接使用す る 必要はあ り ません。 外部の XML ド キ ュ メ ン
ト を設定 / 要求 / 応答 と 結合す る 場合に、 こ の ク ラ ス を使用す る こ と がで き ます。 ま た、 設定
/ 要求 / 応答を手動で作成す る 場合に も 、 こ の ク ラ ス を使用で き ます。
•
XmlTreeNode: こ の ク ラ ス は解析 さ れた XML ド キ ュ メ ン ト の XML ノ ー ド を格納 し 、 XML
属性への容易な ア ク セ ス を提供 し ます。 一般的には、 PropertyListElement ク ラ スお よ び
PropertyElement ク ラ ス を使用 し て、 XML デー タ にア ク セ ス し ます。
•
PropertyElement: こ の ク ラ ス は名前 と 値のペア を格納 し ます。 PropertyElement は、
Select Access に よ っ て定義 さ れ る XML 要素の 1 つです。 PropertyElement タ グには、 名前
と 値のペアの名前を識別す る ための、 name と 呼ばれ る 属性が必要です。 値は開始 タ グ と 終了
タ グの間のデー タ と し て格納 さ れ ま す。 た と えば、 赤色に対す る 名前 と 値のペア を格納す る
PropertyElement は、 <PROPERTY NAME="color">red</PROPERTY> と な り ます。
•
PropertyListElement: こ の ク ラ ス は 0 以上の PropertyElement タ グ を含む XML ノ ー
ド を格納 し ます。 プ ロ パテ ィ リ ス ト はネ ス ト す る こ と がで き ます。
PropertyListElement にプ ロ パテ ィ リ ス ト と プ ロ パテ ィ 要素が含まれ る 場合 も あ り ます。
PropertyListElement の例 と し ては、 <PROPERTYLIST NAME="colorList">
<PROPERTY NAME="color">red</PROPERTY></PROPERTYLIST> な ど があ り ます。
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
51
Policy Validator プ ラ グ イ ンは、 ロ グ をサポー ト し 、 例外を処理 し 、 Select Access の文字列お よ び メ
モ リ ユーテ ィ リ テ ィ を活用す る 必要があ り ます。ほ と ん ど のプ ラ グ イ ンは、次に示す Select Access
の ク ラ スお よ びユーテ ィ リ テ ィ と 通信を行い ます。
52
•
Logger: Logger ク ラ ス は Select Audit に対す る イ ン タ ーフ ェ イ ス を提供 し ます。 こ の ク ラ ス
は複数レベルの ロ グ、 すなわち DEBUG、 INFO、 WARNING、 ERROR、 お よ び FATAL をサポー
ト し ます。
•
EnforcerException: こ の ク ラ ス は判定ポ イ ン ト プ ラ グ イ ンの例外、 すなわち
EvaluatorFatal、 EvaluatorNonFatal、 お よ び EvaluatorInternal の親 ク ラ ス で
す。 判定ポ イ ン ト プ ラ グ イ ンは、 EnforcerException も 含めた こ れ ら の例外のいずれか
を ス ロ ーす る こ と があ り ます。 判定ポ イ ン ト プ ラ グ イ ン の例外については、 73 ページの
「ポ リ シー ノ ー ド の評価」 で説明 し てい ます。
•
AuthPluginException: こ の ク ラ ス は、 ヘ ッ ダー フ ァ イ ル AuthPlugin.h で定義 さ れ、 認
証プ ラ グ イ ンの例外が発生 し た場合に使用 さ れます。
•
enforcer_sys.h: こ のヘ ッ ダー フ ァ イ ルは SYS_STRDUP、STREQ な ど のプ ラ ッ ト フ ォ ーム
に依存 し ない文字列操作用マ ク ロ を定義 し ます。 プ ラ グ イ ン では、 文字列を操作す る 際に こ
れ ら のマ ク ロ を使用す る 必要があ り ます。
第4章
Policy Validator プ ラ グ イ ンのルールの作成
Policy Validator プ ラ グ イ ン を作成す る 場合、 共有 ラ イ ブ ラ リ を作成す る こ と にな り ま す。 共有 ラ
イ ブ ラ リ フ ァ イ ルの拡張子には、 UNIX プ ラ ッ ト フ ォ ーム では .so ま たは .sl、 Windows プ ラ ッ
ト フ ォ ーム では .dll を使用 し ます。 共有 ラ イ ブ ラ リ には少な く と も 1 つの Policy Validator プ ラ
グ イ ン を格納す る 必要があ り ます。
プ ラ グ イ ン を作成するには
1
C++ フ ァ イ ルを作成 し 、 少な く と も 1 つのプ ラ グ イ ン を含め ます。
2
認証プ ラ グ イ ン には AuthPlugin.h ヘ ッ ダー、 判定ポ イ ン ト プ ラ グ イ ンには Decider.h
ヘ ッ ダーを組み込みます。 必要に応 じ て、 それ以外のヘ ッ ダー も 組み込みます。
3
AuthPlugin ま たは Decider ク ラ ス を継承す る 1 つ以上のプ ラ グ イ ン ク ラ ス を作成 し ま
す。 認証プ ラ グ イ ンは AuthPlugin を継承 し 、 判定ポ イ ン ト プ ラ グ イ ンは Decider を継承
し ます。
4
各プ ラ グ イ ン ク ラ ス の コ ン ス ト ラ ク タ お よ びデス ト ラ ク タ を提供 し ます。
5
各 ク ラ ス の静的な factory() メ ソ ッ ド を提供 し ます。 Policy Validator は、 factory() メ
ソ ッ ド を使用 し て、 プ ラ グ イ ン の イ ン ス タ ン ス を作成 し ます。 名前は factory() であ る 必
要はな く 、 正 し い C++ 名であればいずれで も 構い ません。 factory() メ ソ ッ ド は引数 と し
て XmlTreeNode を受け取 り 、 Decider ま たは AuthPlugin オブジ ェ ク ト へのポ イ ン タ を
返 し ます。
6
プ ラ グ イ ン の種類に応 じ て、 authenticate() メ ソ ッ ド 、 ま たは decide() メ ソ ッ ド を
オーバー ラ イ ド し ます。
7
外部の init() メ ソ ッ ド を 1 つ提供 し て、 プ ラ グ イ ン を登録 し ます。 こ の関数は、 プ ラ グ イ
ン エ ン ト リ のテーブルを Policy Validator に提供 し ます。 各プ ラ グ イ ン エ ン ト リ には、 プ ラ グ
イ ンの名前、 プ ラ グ イ ン の種類、 お よ び factory() メ ソ ッ ド へのポ イ ン タ が含まれます。
init() メ ソ ッ ド には、 フ ァ イ ル内の各プ ラ グ イ ン ク ラ ス のエ ン ト リ が含まれてい ます。
8
プ ラ グ イ ン を コ ンパ イ ル し 、 結果 と し て得 ら れたオブジ ェ ク ト フ ァ イ ルを Validator API ラ イ
ブ ラ リ と リ ン ク し ます。 プ ラ グ イ ン の コ ンパ イ ル方法は、 82 ページの 「サン プル
attributelogic の作成」 を参照 し て く だ さ い。
9
プ ラ グ イ ン を イ ン ス ト ール し ます。 55 ページの 「Policy Validator プ ラ グ イ ンの イ ン ス ト ール」
を参照 し て く だ さ い。
10 プ ラ グ イ ン を テ ス ト し ます。
authenticate() メ ソ ッ ド のオーバー ラ イ ド
authenticate() メ ソ ッ ド は、 オーバー ラ イ ド が可能です。 具体的には、 authenticate() メ
ソ ッ ド は次の処理を実行 し ます。
1
Enforcer プ ラ グ イ ン の要求か ら 認証情報を取得 し ます。
2
ア イ デン テ ィ テ ィ を確認 し ます。 具体的には、 名前お よ びパ ス ワー ド のデー タ ベース と の照
合、 デジ タ ル署名の確認、 Kerberos チケ ッ ト の確認、 要求の RADIUS サーバーへの転送、 そ
の他のカ ス タ マ イ ズ さ れた認証方式な ど が実行 さ れ ます。
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
53
3
必要に応 じ て、 XML 応答を更新 し ます。 認証プ ラ グ イ ンは、 XML 応答にプ ロ パテ ィ を追加
す る こ と に よ り 、 Enforcer プ ラ グ イ ン と 通信で き ます。 た と えば、 認証情報が要求に含まれ
ていない場合、 認証プ ラ グ イ ンは Enforcer プ ラ グ イ ン に対 し 、 ア イ デン テ ィ テ ィ に名前 と パ
ス ワー ド を入力す る よ う 要求す る メ ッ セージの表示を指示で き ます。
4
必要に応 じ て、 handleUserInfo() メ ソ ッ ド を呼び出 し ます。 handleUserInfo() メ
ソ ッ ド は、 ア イ デン テ ィ テ ィ の個別化情報を設定 し ます。 個別化の詳細は、 第 6 章、 「個別
化属性の使用 : Personalization API」 を参照 し て く だ さ い。 必須ではあ り ませんが、 今後予想
さ れ る ア ク セ ス に備え てプ ロ フ ァ イ ルを キ ャ ッ シ ュ す る ため、 認証プ ラ グ イ ン で
handleUserInfo() メ ソ ッ ド を呼び出す こ と を推奨 し ます。 ア イ デン テ ィ テ ィ がプ ロ フ ァ
イ ルを持たない場合、 handleUserInfo() メ ソ ッ ド に よ っ て キ ャ ッ シ ュ に一時プ ロ フ ァ イ ルが作
成 さ れます。 なお、 こ の一時プ ロ フ ァ イ ルはデ ィ レ ク ト リ サーバーには書 き 込まれません。
一時ア イ デン テ ィ テ ィ の詳細は、 75 ページの 「LdapConnection / User / UserSource /
UserCache」 を参照 し て く だ さ い。
5
結果 コ ー ド を Policy Validator に返 し ます。 結果 コ ー ド は要求の処理の続行方法を Policy
Validator に指示 し ます。 認証プ ラ グ イ ン の結果 コ ー ド の詳細は、 64 ページの 「ア イ デン テ ィ
テ ィ の認証」 を参照 し て く だ さ い。
認証プ ラ グ イ ン の作成方法の例は、 55 ページの 「認証プ ラ グ イ ン の作成 : フ ァ イ ルベース の認証
の例」 を参照 し て く だ さ い。
decide() メ ソ ッ ド のオーバー ラ イ ド
decide() メ ソ ッ ド は、 オーバー ラ イ ド が可能です。 具体的には、 decide() メ ソ ッ ド は次の処
理を実行 し ます。
1
ア ク セ ス ポ リ シーを確認 し ます。 判定ポ イ ン ト プ ラ グ イ ンは、 あ ら ゆ る 要求のデー タ を使
用 し て判定を実行 し ます。 使用 さ れ る デー タ は、 ア イ デン テ ィ テ ィ 、 ダ イ ナ ミ ッ ク グループ
メ ンバシ ッ プ、 タ イ ム ス タ ン プ、 IP ア ド レ ス な ど であ り 、 Enforcer プ ラ グ イ ン に よ っ て埋め
込ま れた カ ス タ ム デー タ が使用 さ れ る こ と も あ り ます。 ま た、 外部 リ ソ ース を使用 し て、 追
加情報を取得す る 場合 も あ り ます。 た と えば、 デー タ ベース ま たはデ ィ レ ク ト リ サーバーに
照会を行 う ケース な ど です。 判定ポ イ ン ト プ ラ グ イ ンは、 元の要求を修正す る こ と がで き ま
す。 こ れに よ り 、 プ ラ グ イ ン が相互に通信す る こ と が可能にな り ます。
2
必要に応 じ て、 XML 応答を更新 し ます。 判定ポ イ ン ト プ ラ グ イ ンは、 XML 応答にプ ロ パ
テ ィ を追加す る こ と に よ り 、 Enforcer プ ラ グ イ ン と 通信で き ます。 た と えば、 判定ポ イ ン ト
プ ラ グ イ ンは、 ア イ デン テ ィ テ ィ がア ク セ ス許可を得 る には認証が必要であ る こ と を
Enforcer プ ラ グ イ ン に対 し て通知で き ます。
3
結果 コ ー ド を Policy Validator に返 し ます。 結果 コ ー ド は要求の処理の続行方法を Policy
Validator に指示 し ます。 判定ポ イ ン ト プ ラ グ イ ン の結果 コ ー ド の詳細は、 73 ページの 「ポ リ
シー ノ ー ド の評価」 を参照 し て く だ さ い。
判定ポ イ ン ト プ ラ グ イ ンの作成方法の例は、 68 ページの 「判定ポ イ ン ト プ ラ グ イ ンの作成 : デ ィ
レ ク ト リ 属性の例」 を参照 し て く だ さ い。
54
第4章
Policy Validator プ ラ グ イ ンのイ ン ス ト ール
Policy Validator プ ラ グ イ ン を イ ン ス ト ー ル す る に は、 プ ラ グ イ ン を 含 む 共 有 ラ イ ブ ラ リ を
<SA_Install>/bin/plugins デ ィ レ ク ト リ に配置 し ます。 各 Policy Validator サーバーにプ ラ グ イ ン
の コ ピーを イ ン ス ト ール し ます。 こ こ でプ ラ グ イ ン を イ ン ス ト ールす る 必要があ る のは、 ア ク セ
ス ルールの一部 と し て プ ラ グ イ ン を 使用す る よ う に設定 さ れてい る サーバーのみです。 イ ン ス
ト ール後、 Policy Validator を再起動 し て、 変更を有効に し ます。
Policy Validator プ ラ グ イ ンの削除
Policy Validator か ら プ ラ グ イ ン を削除す る には、 <SA_Install>/bin/plugins デ ィ レ ク ト リ か ら プ
ラ グ イ ン を含む共有 ラ イ ブ ラ リ を削除す る か、 フ ァ イ ルを別のデ ィ レ ク ト リ に移動 し ます。 その
後、 Policy Validator を再起動 し て、 変更を有効に し ます。
Policy Validator を再起動す る 前に、 プ ラ グ イ ン を使用す る すべてのルールお よ び認証サーバーを
削除 し てい る こ と を確認 し て く だ さ い。 Policy Builder を使用 し て、 Select Auth ルールお よ び条件
付 き ルールか ら プ ラ グ イ ンの参照を削除 し ます。
上述の手順では、 Policy Validator プ ラ グ イ ンのみが削除 さ れます。 Policy Validator プ ラ グ イ ン には
対応す る Policy Builder プ ラ グ イ ン があ り ます。 そ う し たプ ラ グ イ ンは、 別途削除す る 必要があ り
ます。 詳細は、 41 ページの 「Policy Builder プ ラ グ イ ン の削除」 を参照 し て く だ さ い。
認証プ ラ グ イ ンの作成 : フ ァ イルベースの認証の例
Select Access には、 一連の認証プ ラ グ イ ン が組み込 ま れてい ま す。 こ のセ ク シ ョ ン では、 フ ァ イ
ルベース の認証プ ラ グ イ ンの ソ ース コ ー ド を取 り 上げます。 次の各項目について説明 し ます。
•
認証プ ラ グ イ ン のヘ ッ ダー フ ァ イ ルを組み込む方法
•
init() メ ソ ッ ド を使用 し てプ ラ グ イ ン を登録す る 方法
•
プ ラ グ イ ン の イ ン ス タ ン ス を作成す る factory() メ ソ ッ ド を作成す る 方法
•
認証を実行す る authenticate() メ ソ ッ ド を オーバー ラ イ ド す る 方法
•
Enforcer プ ラ グ イ ン に対 し 、 認証情報を要求す る よ う 指示す る 方法
•
個別化デー タ を Enforcer プ ラ グ イ ン に通知す る 方法
•
結果 コ ー ド を使用 し て Policy Validator の動作を変更す る 方法
FileAuthenticator ク ラ ス は、 次の処理を実行 し ます。
1
UserSource を設定 し ます。 UserSource は、 ア イ デン テ ィ テ ィ のプ ロ フ ァ イ ルが配置 さ
れてい る デ ィ レ ク ト リ サーバーの分岐を特定 し ます。
2
ロ グ イ ン フ ォ ーム を設定 し ます。
3
パ ス ワ ー ド フ ァ イ ルを キ ャ ッ シ ュ に ロ ー ド し ます。
4
Enforcer プ ラ グ イ ン の要求か ら 名前 と パ ス ワ ー ド を取得 し ます。
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
55
5
ユーザー名 と パ ス ワー ド が取得 さ れなか っ た場合、 ア イ デン テ ィ テ ィ 確認のため、 Enforcer
プ ラ グ イ ン に こ れ ら のプ ロ パテ ィ を要求す る メ ッ セージ を表示 さ せます。
6
パ ス ワ ー ド キ ャ ッ シ ュ に対 し て ア イ デン テ ィ テ ィ を認証 し ます。
FileAuthenticator ク ラ ス の ソ ース コ ー ド は、 /source/validator/plugins/
FileAuthenticator.cpp に配置で き ます。
認証プ ラ グ イ ンのヘ ッ ダー フ ァ イルの組み込み
FileAuthenticator 認証プ ラ グ イ ン には、 ヘ ッ ダー フ ァ イ ル AuthPlugin.h が含まれます
( すべての認証プ ラ グ イ ンは、 こ のヘ ッ ダー フ ァ イ ルを含む必要があ り ます )。
validator_util.h ヘ ッ ダーには validator.h が含ま れ ます。
#include "enforcer_pragmas.h"
#define ACE_BUILD_SVC_DLL
#include <ace/svc_export.h>
#include "auto_free.h"
#include <ctype.h>
#include <stdio.h>
#include <vector>
#include <string>
#include <map>
#include
#include
#include
#include
<new>
<string>
<iostream>
<stdio.h>
#include
#include
#include
#include
#include
#include
#include
#include
#include
<PropertyElement.h>
<PropertyListElement.h>
"User.h"
"UserCache.h"
"UserSource.h"
"validator_util.h"
"AuthPlugin.h"
"EnforcerException.h"
"LdapAttributes.h"
FileAuthenticator ク ラ スの定数
次の各定数は、 コ ー ド の後続部分で使用 さ れ ます。 こ こ では参照用に取 り 上げてい ます。
FileAuthenticator ク ラ スの定数の宣言例
次の コ ー ド 例は、 ク ラ ス の定数の宣言方法を示 し てい ます。
#define TRANSIENT_LOCATION_TAG
#define LOGIN_FILENAME_TAG
#define PASSWORD_FILENAME_TAG
56
"ArtificialSource"
"LoginForm"
"PasswordFile"
第4章
#define USER_SOURCE_TAG
#define ATTRIBUTE_PROP_LIST_TAG
#define ATTRIBUTE_TAG
"UserSource"
"SelectedAttributes"
"Attribute"
#define MAXLINE_SIZE
#define PASSWORD_ATTR
#define UID_ATTR
1024
"userPassword"
"uid"
typedef vector<string> strVector;
typedef map<string, strVector> attributeMap;
typedef map<string, attributeMap> userMap;
認証プ ラ グ イ ンの登録
Policy Validator で認証プ ラ グ イ ン を使用す る には、 プ ラ グ イ ン の登録が必要です。 登録では、 プ
ラ グ イ ン ラ イ ブ ラ リ に init() メ ソ ッ ド を組み込みます。 Policy Validator は Policy Validator デ ィ
レ ク ト リ に 配置 さ れ て い る すべ て の 共有 ラ イ ブ ラ リ で、 init() メ ソ ッ ド を 呼び出 し ま す。
init() メ ソ ッ ド は、 プ ラ グ イ ン エ ン ト リ のテーブルを登録す る こ と に よ り 、 共有 ラ イ ブ ラ リ に
配置 さ れてい る 1 つ以上のプ ラ グ イ ンの登録を実行 し ます。 各テーブル エ ン ト リ には、 次の 3 つ
の要素が含まれます。
•
プ ラ グ イ ン名 : 認証プ ラ グ イ ン を Select Auth の認証方式に関連付け る ために、
component.xml フ ァ イ ル内で使用 さ れ る 名前。
•
プ ラ グ イ ン の種類 : 認証プ ラ グ イ ンは AUTH と し て登録 さ れます。
•
factory() メ ソ ッ ド へのポ イ ン タ 。 factory() メ ソ ッ ド は、 認証プ ラ グ イ ン イ ン ス タ ン ス
へ の ポ イ ン タ を Policy Validator に 提 供 し ま す。 factory() メ ソ ッ ド は、 タ イ プ 定 義
voidp_func での識別に基づいて、 メ ソ ッ ド へのポ イ ン タ を返す必要があ り ます。
プ ラ グ イ ン エ ン ト リ のテーブルは、 NULL プ ラ グ イ ン エ ン ト リ で終了 し ます。 57 ページの 「プ ラ
グ イ ンの登録」 は、 プ ラ グ イ ン エ ン ト リ テーブルの作成お よ び認証プ ラ グ イ ンの登録方法を示 し
てい ます。 コ ー ド では 1 つのプ ラ グ イ ン、すなわち FileAuthenticator 認証プ ラ グ イ ン を登録
し てい ます。
プ ラ グ イ ンの登録
次の コ ー ド 例は、 プ ラ グ イ ン の登録方法を示 し てい ます。
// table of plugins
static PluginEntry plugins[] = {
{ "FileAuthenticator", AUTH,
(voidp_func)&FileAuthenticator::factory
},
{ NULL, AUTH, NULL }
};
PluginEntry * init()
{
return plugins;
}
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
57
factory() メ ソ ッ ド を使用 し た認証プ ラ グ イ ンのイ ン ス タ ン スの作成
factory() メ ソ ッ ド の目的は、Policy Validator に認証プ ラ グ イ ン の イ ン ス タ ン ス を提供す る こ と
です。 認証プ ラ グ イ ンの イ ン ス タ ン ス は、 Select Auth の認証サービ ス を表 し ます。 Policy Validator
は ポ リ シー ス ト ア か ら 認証プ ラ グ イ ンの設定を取得 し 、 XML を factory() メ ソ ッ ド に提供 し
ます。 factory() メ ソ ッ ド は、 XML を使用 し て認証プ ラ グ イ ン の イ ン ス タ ン ス を作成 し 、 認証
プ ラ グ イ ンの状態を初期化 し ます。 factory() メ ソ ッ ド は、 次の よ う に定義 さ れ ます。
static AuthPlugin * factory(const XmlTreeNode *props);
58 ページの 「FileAuthenticator プ ラ グ イ ン の イ ン ス タ ン ス の作成」 は、 factory() メ ソ ッ ド の作
成方法を示 し てい ます。 例では、 props 変数で提供 さ れてい る 、 XML プ ロ パテ ィ を使用 し て設
定 さ れた FileAuthenticator 認定プ ラ グ イ ン の イ ン ス タ ン ス が返 さ れてい ます。
FileAuthenticator ク ラ ス は AuthPlugin ク ラ ス を継承 し てい る ため、 返 さ れ る ポ イ ン タ は
認証プ ラ グ イ ン のオブジ ェ ク ト にな り ます。
FileAuthenticator::factory() メ ソ ッ ド は、 XML 設定を解析 し 、 必要なデー タ がすべて存
在す る こ と を確認 し ます。 新 し いバージ ョ ン のプ ラ グ イ ン では、 管理者はデフ ォ ル ト の値に代え
て、 使用す る ロ グ イ ン フ ォ ームの名前を指定す る こ と がで き ます。
factory() メ ソ ッ ド は FileAuthenticator ク ラ ス の コ ン ス ト ラ ク タ を呼び出 し 、 取得 さ れた
設定値を使用 し て認証プ ラ グ イ ンの イ ン ス タ ン ス を作成 し ます。 そ し て、 パ ス ワ ー ド フ ァ イ ル と
属性 リ ス ト を キ ャ ッ シ ュ に ロ ー ド し ます。
factory() メ ソ ッ ド には、 正 し い C++ 名で あ れば ど の よ う な 名前 を 付け る こ と も で き ま す。
Select Access は init() メ ソ ッ ド を使用 し て、 factory() メ ソ ッ ド へのポ イ ン タ を取得 し ます。
FileAuthenticator プ ラ グ イ ンのイ ン ス タ ン スの作成
次の コ ー ド 例は、 factory () メ ソ ッ ド で FileAuthenticator プ ラ グ イ ン の イ ン ス タ ン ス を
作成す る 方法を示 し てい ます。
AuthPlugin * FileAuthenticator::factory
(
const string & name,
const XmlTreeNode * props
)
{
// Must have properties
if (! props)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<No File Authenticator properties specified");
return NULL;
}
// Parameters
const char * transientUserLocName = props->getChild
StringValue(TRANSIENT_LOCATION_TAG);
const char * loginFormName
= props->getChild
StringValue(LOGIN_FILENAME_TAG);
const char * passwordFileLocName
= props->getChild
StringValue(PASSWORD_FILENAME_TAG);
58
第4章
const char * userSourceName
= props->getChild
StringValue(USER_SOURCE_TAG);
const UserSource * userSource = NULL;
FILE * passwordFile = NULL;
if (!sNameToUserSource(name.c_str(), userSourceName, userSource))
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: Could not create a valid User
Source");
return NULL;
}
if (! transientUserLocName ||
! sValidateSyntheticUserLocation(transientUserLocName,
userSource))
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: Transient user location not
located below the User Source");
return NULL;
}
if (! loginFormName)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: Could not locate the login form
in the configuration");
return NULL;
}
if (! passwordFileLocName)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: Could not locate the password
file in the configuration");
return NULL;
}
else if (access(passwordFileLocName, 4) == -1)
{
if (errno == ENOENT)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: The password file %s does
not exist.", passwordFileLocName);
}
else if (errno == EACCES)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: The password file %s is
not readable.", passwordFileLocName);
}
else
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
59
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: An unknown error occurred
while trying to open the password file %s.",
passwordFileLocName);
}
return NULL;
}
const XmlTreeNode *xmlAttributeList = props->
getChild(ATTRIBUTE_PROP_LIST_TAG);
try
{
passwordFile = fopen(passwordFileLocName, "r");
FileAuthenticator * plugin = new FileAuthenticator
( name.c_str(), userSource, transientUserLocName,
loginFormName);
if(!plugin->getAttributesToCopy(xmlAttributeList))
return NULL;
if(!plugin->getPasswords(passwordFile))
return NULL;
return plugin;
}
catch (...)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: Could not create a File
Authenticator plugin instance");
return NULL;
}
}
FileAuthenticator コ ン ス ト ラ ク タ は、 プ ラ グ イ ン名 と UserSource を親 コ ン ス ト ラ ク タ に
受け渡 し ます。すべての認証プ ラ グ イ ンはプ ラ グ イ ン名 と UserSource を親 ク ラ ス に提供す る 必
要があ り ます。 稼動時に UserSource が NULL であ っ た場合、 Policy Validator は設定 さ れた順序
で利用可能な UserSource を 1 つずつ試 し ます。 ま た、 コ ン ス ト ラ ク タ は一時ア イ デン テ ィ テ ィ
の保存場所 と ロ グ イ ン お よ びチ ャ レ ン ジ用の フ ォ ー ム を 格納す る ための フ ィ ール ド を 設定 し ま
す。 一時ア イ デン テ ィ テ ィ の詳細は、 75 ページの 「LdapConnection / User / UserSource / UserCache」
を参照 し て く だ さ い。 Select Audit の ロ グ レベルで DEBUG メ ッ セージ を含め る よ う に設定 さ れて
い る 場合は、 コ ン ス ト ラ ク タ は呼び出 し た こ と を示す メ ッ セージ も ロ グに記録 し ます。
FileAuthenticator コ ン ス ト ラ ク タ
次の コ ー ド 例は、 FileAuthenticator コ ン ス ト ラ ク タ の一例を示 し てい ます。
FileAuthenticator::FileAuthenticator
(
const char
* name,
const UserSource
* userSource,
const char
* transientUserLoc,
const char
* loginForm
60
第4章
)
:
AuthPlugin(name, userSource),
transientUserLoc_(SYS_STRDUP(transientUserLoc)),
loginForm_(SYS_STRDUP(loginForm)),
cache_user_flag_(true)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG, "FileAuthenticator:
Constructing FileAuthenticator plugin");
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG, "FileAuthenticator:
transientUserloc: %s", transientUserLoc);
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG, "FileAuthenticator:
loginForm: %s", loginForm);
}
認証プ ラ グ イ ン の イ ン ス タ ン ス の作成後、FileAuthenticator::factory() メ ソ ッ ド は XML
属性の リ ス ト を初期化 し ます。 そ し て、 XML の属性を取得す る ために、 その属性を キ ャ ッ シ ュ に
ロ ー ド す る setToCopy() メ ソ ッ ド で呼び出 し ます。 最後に、 getPassword() メ ソ ッ ド を呼び
出 し 、 パ ス ワ ー ド を キ ャ ッ シ ュ に ロ ー ド し ます。
Policy Validator プ ラ グ イ ン を作成す る 際は、 エ ラ ー状態を適切に処理す る こ と が重要です。 有効
な要求が拒否 さ れ る のは、 多 く の場合、 プ ラ グ イ ン エ ラ ーが原因です。 エ ラ ーの特定は困難な場
合があ る ため、 追跡が可能な よ う に、 すべてのエ ラ ーを ロ グに記録す る 必要があ り ま す。 こ れを
行 う には、 ERROR ロ グ レベルを使用 し ます。
factory() メ ソ ッ ド がプラ グ イ ン のイ ン ス タ ン ス を 設定でき な かっ た 場合は、 NULL が返さ れ
ま す。
パスワー ド フ ァ イルの読み込み
次の コ ー ド 例は、 パ ス ワー ド フ ァ イ ルを キ ャ ッ シ ュ に読み込む方法を示 し てい ます。
bool FileAuthenticator::getPasswords(FILE * passwordFile)
{
if (passwordFile == NULL)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: An unknown error occurred while
trying to open the password file.");
return false;
}
fetchPasswordData(passwordFile);
return true;
}
void FileAuthenticator::processLine(char * line, userMap & users, string
& currentUserKey, string & currentAttributeKey, attributeMap &
userRecord )
{
if (!users.empty() && currentUserKey != "")
{
userMap::iterator entry = users.find(currentUserKey);
if (entry != users.end())
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
61
userRecord = entry->second;
}
strVector attributeValues;
if (!userRecord.empty() && currentAttributeKey != "")
{
attributeMap::iterator attr = userRecord.find
(currentAttributeKey);
if (attr != userRecord.end())
attributeValues = attr->second;
}
int i = 0;
bool allSpace = true;
while (i < MAXLINE_SIZE && line[i] != '\0' && allSpace)
{
if (line[i++] != ' ')
allSpace = false;
}
if (allSpace)
{
if (userRecord.size() > 0)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: Read user record for %s",
currentUserKey.c_str());
users[currentUserKey] = userRecord;
currentUserKey = "";
currentAttributeKey = "";
userRecord.clear();
}
return;
}
i = 0;
if (line[0] == '\0' || line[0] == '#')
return;
if (line[0] == ' '&& line[1] != ' ')
{
//printf("multi-line attribute\n");
if (attributeValues.size() > 0)
{
string value = attributeValues.back();
attributeValues.pop_back();
while (line[++i] != '\0' && i < MAXLINE_SIZE)
{
value += line[i];
}
attributeValues.push_back(value);
userRecord[currentAttributeKey] = attributeValues;
if (currentUserKey != "")
{
users[currentUserKey] = userRecord;
}
62
第4章
return;
}
return;
}
bool nameFinished = false;
string name;
string value;
while (i < MAXLINE_SIZE && line[i] != '\0')
{
if (nameFinished)
{
value += line[i];
}
else
{
if (line[i] == ':')
{
nameFinished = true;
i++;
}
else
{
name += line [i];
}
}
i++;
}
if (currentAttributeKey == "")
currentAttributeKey = name;
if (name != currentAttributeKey)
{
currentAttributeKey = name;
attributeValues.clear();
}
attributeValues.push_back(value);
userRecord[currentAttributeKey] = attributeValues;
if (name == "uid")
{
string newName = name + "=" + value;
currentUserKey = newName;
}
if (currentUserKey != "")
users[currentUserKey] = userRecord;
}
void FileAuthenticator::fetchPasswordData(FILE * fp)
{
char line[MAXLINE_SIZE];
char c;
int i = 0;
bool processedLine = false;
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
63
if (!fp)
return;
nullLine(line);
string currentUserKey = "";
string currentAttributeKey = "";
attributeMap tmpUserRecord;
while ((c = fgetc(fp)) != EOF)
{
if (c != '\n')
{
processedLine = false;
line[i] = c;
i++;
}
else
{
processedLine = true;
line[i] = '\0';
i = 0;
processLine (line, users_, currentUserKey,
currentAttributeKey, tmpUserRecord);
nullLine(line);
}
}
if (!processedLine)
processLine (line, users_, currentUserKey,
currentAttributeKey, tmpUserRecord);
}
認証プ ラ グ イ ンのイ ン ス タ ン スの破棄
認証プ ラ グ イ ンは、 デ ス ト ラ ク タ も 提供す る 必要があ り ます。 外部 リ ソ ース が解放 さ れてい る こ
と を確認 し て く だ さ い。 C++ 文字列は自動的に解放 さ れ る ため、 FileAuthenticator ク ラ ス は
外部 リ ソ ース を管理 し ません。
FileAuthenticator::~FileAuthenticator() {}
ア イ デン テ ィ テ ィ の認証
ア イ デン テ ィ テ ィ を認証す る ため、Policy Validator は認証プ ラ グ イ ンの authenticate() メ ソ ッ
ド を呼び出 し ます。 すべての認証プ ラ グ イ ン で、 こ の メ ソ ッ ド を オーバー ラ イ ド す る 必要があ り
ます。 Policy Validator は authenticate() メ ソ ッ ド に次の 4 つのパ ラ メ ー タ を受け渡 し ます。
64
•
要求デー タ へのポ イ ン タ 。 こ の XML プ ロ パテ ィ リ ス ト には、 Enforcer プ ラ グ イ ン に よ っ て
送信 さ れた リ ソ ー ス へのア ク セ ス 要求が含 ま れてい ます。 それ以外に、 他の認証プ ラ グ イ ン
に よ っ て埋め込ま れたデー タ が含まれ る 場合 も あ り ます。 Select Access のプ ラ グ イ ンは、 要求
にデー タ を追加 し て、 異な る プ ラ グ イ ンに情報を受け渡す こ と がで き ます。
•
現在の XML 応答へのポ イ ン タ 。 処理済みの認証プ ラ グ イ ン か ら 取得 さ れた既存の XML プ ロ
パテ ィ が含まれ ます。
第4章
•
個別化情報の保持に使用 さ れ る PropertyListElement。 個別化の詳細は、 第 6 章、 「個別
化属性の使用 : Personalization API」 を参照 し て く だ さ い。
•
Enforcer プ ラ グ イ ン への返信に使用 さ れ る 応答に、 判定ポ イ ン ト プ ラ グ イ ン がポ リ シーの決
定に関す る 詳細情報を組み込むべ き か ど う か を示す ト レー ス フ ラ グ。 一般的にはデバ ッ グの
目的でのみ使用 さ れ、 通常は false に設定 さ れてい ます。
authenticate() メ ソ ッ ド は、 Policy Validator に処理の続行方法を指示す る 結果 コ ー ド を返 し ま
す。 認証プ ラ グ イ ンは、 次の値を返す よ う に設定 さ れてい ます。
•
R_PERMIT: 認証プラ グイ ン の処理を 停止し ま す。 アイ デン ティ ティ はすでに認証さ れていま す。
•
R_DENY: 認証プ ラ グ イ ンの処理を停止 し ます。 ア イ デン テ ィ テ ィ はすでにア ク セ ス を拒否 さ
れてい ます。 こ れは通常、 プ ロ フ ァ イ ルが無効 と な っ てい る 場合に使用 さ れます。
•
R_RESTART: Select Auth の最初の認証プ ラ グ イ ン を処理 し て、 再度認証を行い ます。 こ れは通
常、 ア イ デン テ ィ テ ィ に関す る 新 し い情報がすでに検出 さ れてい る 場合に実行 さ れ ま す。 ア
イ デン テ ィ テ ィ を認証で き なか っ たプ ラ グ イ ンは、 新 し いア イ デン テ ィ テ ィ を使用 し て再試
行を行 う こ と が可能です。 Policy Validator は、 ポ リ シー マ ト リ ッ ク ス と Select Auth を評価 し
て、 使用す る 認証プ ラ グ イ ン を決定 し ます。
•
R_ERROR: アイ デン ティ ティ の認証中にエラ ーが発生し た場合、通知を 行いま す。Policy Validator
は認証の処理を 中止し 、アク セス を 拒否し ま す。プラ グイ ン は、発生し たエラ ーに関する エラ ー
レ ベルのメ ッ セージを ロ グに記録し ま す。
•
R_CONTINUE: ア イ デン テ ィ テ ィ が認証 さ れなか っ た場合に、 Select Auth の後続の認証プ ラ グ
イ ン を使用 し て、 ア イ デン テ ィ テ ィ の認証を試みます。
パ ス ワ ー ド 管理を サポー ト す る ため、 Select Access は次の コ ー ド を内部的に使用 し ま す。 こ れに
よ り 、 Select Access は、 パ ス ワ ー ド の期限切れな ど の特殊な ケース を処理す る こ と がで き ます。 プ
ラ グ イ ン が こ れ ら の値を返す こ と はあ り ません。
•
R_DENY_FORM
•
R_PERMIT_FORM
•
R_DENY_AUTHENTICATED
•
R_DENY_AUTHENTICATED_FORM
•
R_DENY_USER_NOT_FOUND_FORM
要求の認証
次の コ ー ド 例は、 要求の認証方法を示 し てい ます。
AuthPlugin::Result
FileAuthenticator::authenticate(
PropertyListElement *data,
PropertyListElement *response,
const PropertyListElement * const personalizer,
const bool trace
)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG, "FileAuthenticator:
Invoking FileAuthenticator plugin");
AuthPlugin::Result result = R_DENY;
if (isRestart(data, name_.get()))
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
65
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: Authentication restart");
result = validateRestartData(data, response, personalizer);
}
else if (!fetchData(user_, ENFORCER_USER,
ValidatorGetPostDataList(data)) ||
!fetchData(password_, ENFORCER_PASSWD,
ValidatorGetPostDataList(data)))
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: No uid or password, sending login form");
addPasswordHint2Response(response);
}
else if (validateUser(user_, password_))
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: User authenticated");
result = R_PERMIT;
if (canCacheUser())
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: Caching user record");
result = handleUserInfo(data, response,
personalizer, user_.c_str(), transientUserLoc_.get());
}
}
else
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: User login failed");
addPasswordHint2Response(response);
}
setResponseAction(result, response);
return result;
}
ア イ デン テ ィ テ ィ が ま だ認証 さ れていない、 ま たは認証情報が提供 さ れていない場合の、 認証プ
ラ グ イ ン の要求の処理方法に注意 し て く だ さ い。 認証プ ラ グ イ ンは、 要求 さ れた リ ソ ー スへのア
ク セ ス を許可 し ない こ と を Enforcer プ ラ グ イ ン に通知す る R_DENY コ ー ド を返 し ます。
ま た、 認証プ ラ グ イ ンは XML 応答に認証 ヒ ン ト を追加 し ます。 認証 ヒ ン ト は、 要求 さ れた リ ソ ー
ス に 対 し て Policy Validator が 許可す る 認証方式 の 種類 を Enforcer プ ラ グ イ ン に 通知 し ま す。
Enforcer プ ラ グ イ ン が認証 ヒ ン ト に よ っ て提示 さ れた方式の 1 つを サポー ト し てい る 場合、 ア イ
デン テ ィ テ ィ の認証情報を取得す る ための、 Enforcer プ ラ グ イ ン と ア イ デン テ ィ テ ィ と の通信が
開始 さ れ ます。 あ ら ゆ る メ カ ニ ズ ム に よ る サポー ト が可能ですが、 通常は、 ア イ デン テ ィ テ ィ に
ユーザー名 と パ ス ワー ド を入力す る よ う 要求す る ロ グ イ ン フ ォーム が表示 さ れ ます。
66
第4章
パスワー ド の確認
次の コ ー ド は、 パ ス ワ ー ド の確認方法を示 し てい ます。
bool FileAuthenticator::validateUser(const string & user, const string &
password)
{
if (users_.empty())
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG, "No users
present in the login map.");
return false;
}
string userId = UID_ATTR;
userId += "=";
userId += user;
userMap::iterator iter = users_.find(userId);
if (iter == users_.end())
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG, "User %s not
found in login map.", user.c_str());
return false;
}
attributeMap userRecord = iter->second;
attributeMap::iterator iter2 = userRecord.find(PASSWORD_ATTR);
if (iter2 == userRecord.end())
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG, "No password
found for user in login map.");
return false;
}
strVector values = iter2->second;
for (strVector::iterator iter3 = values.begin(); iter3 !=
values.end(); iter3++)
{
if (password == (*iter3))
return true;
}
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG, "Password did not
match.");
return false;
}
authenticate() メ ソ ッ ド は、 validateUser() メ ソ ッ ド か ら の結果 コ ー ド を反映す る よ う に
XML 応答を設定 し ます。 67 ページの 「XML 応答の設定」 で使用 さ れてい る XML 文字列の値に
対す る プ リ プ ロ セ ッ サの定義は、 enforcer.h に記述 さ れてい ま す。 処理が完了す る と 、 Policy
Validator は XML 応答の結果を Enforcer プ ラ グ イ ン に送信 し ます。
XML 応答の設定
次の コ ー ド 例は、 XML 応答の設定方法を示 し てい ます。
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
67
void FileAuthenticator::setResponseAction
(
AuthPlugin::Result result,
PropertyListElement
* response
)
{
switch (result)
{
case R_ERROR:
{
ValidatorSetAction(response, ENFORCER_ACTION_ERROR);
}
break;
case R_DENY:
{
ValidatorSetAction(response, ENFORCER_ACTION_DENY);
}
break;
case R_PERMIT: {
ValidatorSetAction(response, ENFORCER_ACTION_ALLOW);
}
break;
case R_RESTART: {
// No ACTION to be inserted into response
}
break;
default: {
ValidatorSetAction(response, ENFORCER_ACTION_ERROR);
}
break;
}
}
passwordHint2Response() メ ソ ッ ド は、 XML プ ロ パテ ィ を応答に追加 し ます。 追加 さ れ る プ
ロ パテ ィ は Enforcer プ ラ グ イ ン にア イ デン テ ィ テ ィ 認証の要求を通知 し ます。 ロ グ イ ン フ ォ ーム
の場所は、 応答内に記載 さ れてい ます。
判定ポ イ ン ト プ ラ グ イ ンの作成 : デ ィ レ ク ト リ 属性の例
Select Access には、 一連の判定ポ イ ン ト プ ラ グ イ ン が組み込ま れてい ます。 最 も 柔軟な判定ポ イ
ン ト プ ラ グ イ ンの 1 つが、 attributelogic プ ラ グ イ ン です。 こ のプ ラ グ イ ンは、 ア イ デン テ ィ
テ ィ の属性を設定 さ れた検索フ ィ ル タ と 比較 し ます。検索フ ィ ル タ は、34 ページの 「Policy Builder
プ ラ グ イ ン の作成」 のセ ク シ ョ ン に記載の AttributeLogicPanel Policy Builder プ ラ グ イ ン で
構成 さ れてい ます。
68
第4章
検索フ ィ ル タ は、 一連のブール式で構成 さ れてい ます。 各式で属性、 比較演算子、 値を指定 し ま
す。 た と えば、 検索フ ィ ル タ に よ っ て、 ア イ デン テ ィ テ ィ が 「sales」 と 同 じ 値を持つ 「department」
と い う 名前の属性を所有 し てい る 必要があ る こ と な ど を指定で き ます。
こ のセ ク シ ョ ン では、 次の各項目について説明 し ます。
•
判定ポ イ ン ト プ ラ グ イ ンのヘ ッ ダー フ ァ イ ルを組み込む方法。
•
init() メ ソ ッ ド を使用 し てプ ラ グ イ ン を登録す る 方法
•
プ ラ グ イ ン の イ ン ス タ ン ス を作成す る factory() メ ソ ッ ド を作成す る 方法
•
承認を実行す る decide() メ ソ ッ ド を オーバー ラ イ ド す る 方法。
•
User、 UserCache、 UserSource、 お よ び LdapConnection ク ラ ス を使用 し て ア イ デン
テ ィ テ ィ 情報を取得す る 方法。
•
Policy Validator が使用す る DECIDER_BRANCH を制御す る 方法。Decider プ ラ グ イ ンは true お
よ び false 分岐で設定 さ れ ます。 各分岐には判定ポ イ ン ト プ ラ グ イ ン が関連付け ら れ ます。
Policy Validator は、 DECIDER_BRANCH の値に基づいて、 次に処理す る 判定ポ イ ン ト プ ラ グ イ
ン を決定 し ます。
•
結果 コ ー ド を使用 し て Policy Validator の動作を制御す る 方法。
•
EvaluatorExceptions を処理す る 方法。
こ こ では、 承認プ ラ グ イ ンの例 と し て、 attributelogic ク ラ ス を使用 し ます。
attributelogic ク ラ ス は次の処理を実行 し ます。
1
XML 設定か ら LDAP 準拠の検索フ ィ ル タ を作成 し ます。
2
要求 XML か ら ア イ デン テ ィ テ ィ を抽出 し ます。
3
キ ャ ッ シ ュ か ら ア イ デン テ ィ テ ィ を検索 し ます。
4
ア イ デン テ ィ テ ィ を含んだ UserSource を特定 し ます。 UserSource は、 ア イ デン テ ィ
テ ィ の LDAP エ ン ト リ が配置 さ れてい る デ ィ レ ク ト リ サーバーの分岐を指定 し ます。
5
UserSource か ら LdapConnection を取得 し ます。 こ れに よ り 、 attributelogic プ ラ
グ イ ンはデ ィ レ ク ト リ サーバーを検索 し 、 追加のア イ デン テ ィ テ ィ 情報を取得で き ます。
6
ア イ デン テ ィ テ ィ の属性お よ び メ ンバシ ッ プ を設定 さ れた検索フ ィ ル タ と 比較 し ます。 検索
フ ィ ル タ が LDAP を使用す る よ う に設定 さ れてい る 場合、 プ ラ グ イ ンはデ ィ レ ク ト リ サー
バーを検索 し て、 ア イ デン テ ィ テ ィ の属性を検出 し ます。 それ以外の場合は、 ア イ デン テ ィ
テ ィ の属性は XML 要求か ら 抽出 さ れ ます。
7
Policy Validator に対 し て、 ア イ デン テ ィ テ ィ が必要な属性を所有 し てい る 場合は true 分岐、
そ う でない場合は false 分岐を使用す る よ う に指示 し ます。
attributelogic ク ラ ス の ソ ース コ ー ド は、 /source/validator/plugins/
attributelogic.cpp で確認で き ます。
判定ポ イ ン ト プ ラ グ イ ンのヘ ッ ダー フ ァ イルの組み込み
attributelogic.cpp フ ァ イ ルは、 attributelogic.h ヘ ッ ダーを含み ま す。 こ の フ ァ イ ル
には、 すべての判定ポ イ ン ト プ ラ グ イ ン で必要 と な る Decider.h ヘ ッ ダーが含 ま れてい ま す。
ま た、 こ の プ ラ グ イ ン で は XML
ク ラ ス XmlTreeNode、 PropertyElement、 お よ び
PropertyListElement を使用 し ます。 デ ィ レ ク ト リ サーバー接続お よ びダ イ ナ ミ ッ ク グルー
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
69
プ を取得す る ため、プ ラ グ イ ン には User、UserSource、UserCache、お よ び LdapConnection
ク ラ ス が含まれてい ます。 判定ポ イ ン ト プ ラ グ イ ン の例外は evaluator.h ヘ ッ ダーに よ っ て定
義 さ れます。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
<algorithm>
"attributelogic.h"
"attributelogic_tags.h"
"UserSource.h"
"XmlTreeNode.h"
"PropertyElement.h"
"PropertyListElement.h"
"attribute_compare.h"
"ldap_util.h"
"LdapConnection.h"
"User.h"
"UserCache.h"
"validator_util.h"
"evaluator.h"
attributelogic ク ラ スの定数
70 ページの 「attributelogic の定数」 に示 さ れてい る 定数は、 検索フ ィ ル タ の作成お よ び評価時に
使用 さ れ る ブール演算子お よ び比較演算子の種類を定義 し ます。
attributelogic の定数
次の コ ー ド 例は、 attributelogic プ ラ グ イ ン の定数を示 し てい ます。
const char *attributelogic::logicalOperatorNames[] = {"AND", "OR" };
const bool attributelogic::logicalOperatorSigns[] = {true, false};
const int attributelogic::logicalOperatorSize = 2;
const char *attributelogic::operatorNames[] =
{ "Equal",
"NotEqual", "GreaterThan" "GreaterEqual",
"LessThan", "LessEqual", "Set",
"NotSet" };
const char *attributelogic::operatorSigns[] =
{ "=",
"!=",
"!<=",
">=",
"!>=",
"<=",
"=*",
"!=*"
};
const bool attributelogic::operatorUnary[] =
{ false,
false,
false,
false,
false,
false,
true,
true
};
const char *attributelogic::operatorLogic[] =
{ "|",
"|",
"|",
"|",
"|",
"|",
"|",
"&"
};
const int attributelogic::operatorSize = 8;
const char *attributelogic::scopeNames[] =
{"UserData",
"GroupData",
"AnyData"};
const bool attributelogic::scopeUser[] =
{true,
false,
true
};
const bool attributelogic::scopeGroup[] =
{false,
true,
true
};
const int attributelogic::scopeSize = 3;
70
第4章
判定ポ イ ン ト プ ラ グ イ ンの登録
Policy Validator で判定ポ イ ン ト プ ラ グ イ ン を使用す る には、 プ ラ グ イ ンの登録が必要です。 Policy
Validator は Policy Validator のデ ィ レ ク ト リ に配置 さ れてい る すべての共有 ラ イ ブ ラ リ で、init()
メ ソ ッ ド を呼び出 し ます。 init() メ ソ ッ ド は、 共有 ラ イ ブ ラ リ に配置 さ れてい る 1 つ以上のプ
ラ グ イ ン を登録 し ます。
判定ポ イ ン ト プ ラ グ イ ン を作成す る 際は、プ ラ グ イ ン ラ イ ブ ラ リ に init() メ ソ ッ ド を組み込む
必要があ り ます。 init() メ ソ ッ ド は、 プ ラ グ イ ン エ ン ト リ のテーブルを登録 し ます。 各テーブ
ル エ ン ト リ には、 次の 3 つの要素が含まれ ます。
•
プ ラ グ イ ン名 : 判定ポ イ ン ト プ ラ グ イ ン と Rule Builder のプ ラ グ イ ン を関連付け る ために、
component.xml フ ァ イ ルで使用 さ れ る 名前。 プ ラ グ イ ン名は、 対応す る Policy Builder プ ラ
グ イ ン の COMPONENT タ グ に あ る EVALUATOR 属性 の 値 と 一致 し て い る 必要 が あ り ま す。
component.xml フ ァ イ ルの詳細は、 37 ページの 「component.xml フ ァ イ ルの作成」 を参照 し
て く だ さ い。
•
プ ラ グ イ ン の種類 : 判定ポ イ ン ト プ ラ グ イ ンは DECIDER と し て登録 さ れます。
•
factory() メ ソ ッ ド へのポ イ ン タ : factory() メ ソ ッ ド は、 判定ポ イ ン ト プ ラ グ イ ンの イ
ン ス タ ン スへのポ イ ン タ を Policy Validator に提供 し ます。
プ ラ グ イ ン エ ン ト リ のテーブルは、 NULL プ ラ グ イ ン エ ン ト リ で終了 し ます。 コ ー ド では 1 つの
プ ラ グ イ ン、 すなわち判定ポ イ ン ト プ ラ グ イ ン attributelogic を登録 し てい ます。
プ ラ グ イ ンの作成 と 登録
次の コ ー ド 例は、プ ラ グ イ ン のエ ン ト リ テーブルの作成方法お よ び判定ポ イ ン ト プ ラ グ イ ンの登
録方法を示 し てい ます。
extern "C" ACE_Svc_Export PluginEntry *init();
// A table of plugin factories located in this class
static PluginEntry plugins[] =
{
// The Attribute Logic Validator plugin
{ "attributelogic", DECIDER,
(voidp_func)&attributelogic::factory },
// Terminate the table with a "null" entry
{
NULL,
DECIDER,
NULL }
};
PluginEntry * init()
{
return plugins;
}
判定ポ イ ン ト プ ラ グ イ ンのイ ン ス タ ン スの作成
factory() メ ソ ッ ド は条件付 き ルールの 判定ポ イ ン ト を表すオブジ ェ ク ト を Policy Validator に
提供 し ま す。 Policy Validator は ポ リ シ ー ス ト ア か ら 判定 ポ イ ン ト の設定 を 検索 し 、 XML を
factory() メ ソ ッ ド に提供 し ます。 factory() メ ソ ッ ド は、 XML を使用 し て判定ポ イ ン ト プ
ラ グ イ ン の イ ン ス タ ン ス を作成 し 、 判定ポ イ ン ト プ ラ グ イ ン の状態を初期化 し ます。 factory()
メ ソ ッ ド は、 次のテ ン プ レー ト に よ っ て定義 さ れ ます。
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
71
static Decider * factory(const XmlTreeNode *props);
72 ページの 「factory() メ ソ ッ ド 」 に、 factory() メ ソ ッ ド の作成方法を示 し てい ます。 例では、
props 変数で提供 さ れ る XML プ ロ パテ ィ を使用 し て設定 さ れた、attributelogic イ ン ス タ ン
ス が返 さ れてい ます。 attributelogic ク ラ ス は Decider ク ラ ス を継承 し てい る ため、 返 さ れ る オブ
ジ ェ ク ト ポ イ ン タ は Decider オブジ ェ ク ト にな り ます。
factory() メ ソ ッ ド には、 正 し い C++ 名で あ れば ど の よ う な 名前 を 付け る こ と も で き ま す。
Select Access は init() メ ソ ッ ド を使用 し て、 factory() メ ソ ッ ド へのポ イ ン タ を取得 し ます。
factory() メ ソ ッ ド
次の例は、 プ ラ グ イ ン の イ ン ス タ ン ス を作成す る ための factory() メ ソ ッ ド の使用方法を示 し
てい ます。
Decider * attributelogic::factory(const XmlTreeNode *props) {
if (! props) {
throw EnforcerException(EnforcerException::E_NULL_ARG,
"attributelogic factory()", "Invalid Property List");
}
return new attributelogic(*props);
}
// constructor
attributelogic::attributelogic(const XmlTreeNode &propertyList, bool
useLdap)
:
m_expression(propertyList),
m_useLdap(useLdap)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"Constructing attributelogic plugin");
if ( ! m_expression.isPropertyList() ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
"attributelogic::constructor()", "Invalid Property List");
}
}
attributelogic::attributelogic(
const XmlTreeNode &, //propertyList
bool = true
// useLdap
);
例では、 factory() メ ソ ッ ド が XmlTreeNode のみを受け入れ る コ ン ス ト ラ ク タ を呼び出 し て
い る こ と に注意 し て く だ さ い。 直前のサ ン プル コ ー ド に記載 さ れてい る こ の コ ン ス ト ラ ク タ は、
ヘ ッ ダー フ ァ イ ル attributelogic.h で定義 さ れてい ます。 単一のパ ラ メ ー タ constructor
は、 true に設定 さ れた useLdap 変数を使用 し て、 コ ン ス ト ラ ク タ を呼び出 し てい ます。
72
第4章
判定ポ イ ン ト プ ラ グ イ ンのイ ン ス タ ン スの破棄
判定ポ イ ン ト プ ラ グ イ ンは、 デス ト ラ ク タ も 提供す る 必要があ り ます。 外部 リ ソ ース が解放 さ れ
てい る こ と を確認 し て く だ さ い。 attributelogic ク ラ ス は、 外部 リ ソ ース を管理 し ません。
attributelogic::~attributelogic(){}
ポ リ シー ノ ー ド の評価
Policy Validator は条件付 き ルールを処理す る 際、 1 つ以上の 判定ポ イ ン ト を評価 し ます。 各 判定
ポ イ ン ト は判定ポ イ ン ト プ ラ グ イ ン を表 し ます。 Policy Validator が 判定ポ イ ン ト を評価す る 必
要 が あ る 場 合、 対 応 す る 判 定 ポ イ ン ト プ ラ グ イ ン の decide() メ ソ ッ ド を 呼 び 出 し ま す。
decide() メ ソ ッ ド は、 Policy Validator が true ま たは false の ど ち ら の分岐を使用 し て処理を
続行すべ き か を決定 し ます。
decide() は、 判定ポ イ ン ト プ ラ グ イ ン の中核 と な る メ ソ ッ ド です。 プ ラ グ イ ンは、 こ の メ ソ ッ
ド を オーバー ラ イ ド す る 必要があ り ます。 こ れは、親 ク ラ ス Decider で定義 さ れ る 仮想 メ ソ ッ ド
です。
Policy Validator は、 decide() メ ソ ッ ド に対 し て次に示す要素を提供 し ます。
•
要求デー タ へのポ イ ン タ 。 こ の XML ノ ー ド には Enforcer プ ラ グ イ ン に よ っ て送信 さ れた リ
ソ ー ス へのア ク セ ス 要求が含 ま れてい ま す。 それ以外に、 他のエバ リ ュ エー タ や認証プ ラ グ
イ ン に よ っ て埋め込ま れたデー タ が含まれ る 場合 も あ り ます。 Select Access のプ ラ グ イ ンは、
要求にデー タ を追加 し て、 異な る プ ラ グ イ ン と 通信を行 う こ と がで き ます。
•
現在の XML 応答へのポ イ ン タ 。 条件付 き ルールの一部 と し てすでに処理 さ れてい る 、 認証プ
ラ グ イ ン か ら 取得 さ れた既存の XML プ ロ パテ ィ が含まれ ます。
•
コ マ ン ド ラ イ ン でデバ ッ グが有効に さ れてい る か ど う か を示す ト レース フ ラ グ。
•
文字列 decider_branch_path。 こ の文字列は、 Policy Validator が使用すべ き パ ス (true ま
たは false) に合わせて設定す る 必要があ り ます。 応答の文字列 と し て有効な設定には、 あ ら
か じ め定義 さ れた DECIDER_BRANCH_TRUE と DECIDER_BRANCH_FALSE. の 2 つの文字
列があ り ます。
decide() メ ソ ッ ド は、 処理の続行、 エ ラ ーに よ る 停止な ど の動作の実行を Policy Validator に指
示す る 結果 コ ー ド を返 し ます。 結果 コ ー ド の種類を次に示 し ます。
1
CONTINUE: 応答変数 (DECIDER_BRANCH_TRUE ま たは DECIDER_BRANCH_FALSE) に よ っ て
指定 さ れた、 条件付 き ルール内の後続の判定ポ イ ン ト プ ラ グ イ ン を処理 し ます。 通常の状態
では、 ほ と ん ど の判定ポ イ ン ト プ ラ グ イ ン が こ の値を返 し ます。
2
DONE: 判定ポ イ ン ト プ ラ グ イ ン の処理を停止 し 、 XML 応答を Enforcer プ ラ グ イ ン に返 し ま
す。 通常、 判定ポ イ ン ト プ ラ グ イ ン が こ の値を返すのは、 ア ク セ ス が残 り の条件付 き ルール
に関係な く 許可ま たは拒否 さ れた場合のみです。 た と えば、 プ ロ フ ァ イ ルが無効化 さ れてい
る ア イ デン テ ィ テ ィ へのア ク セ ス を常に拒否す る 場合な ど が こ れに該当 し ます。
3
ALLOW: 処理を停止 し 、 ア ク セ ス を許可 し ます。 こ れは Select Access の終端ポ イ ン ト に対す
る 予約済みの値です。 判定ポ イ ン ト プ ラ グ イ ン が こ の値を返す こ と はあ り ません。
4
FAILED: エ ラ ーのために処理を停止 し ます。
5
RESTART: 最初の判定ポ イ ン ト か ら 条件付 き ルールを再度評価 し ます。 通常、 判定ポ イ ン ト
プ ラ グ イ ンは、 ア イ デン テ ィ テ ィ の認証を要求 し た後に こ の コ ー ド を返 し ます。
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
73
6
SEND_FORM: こ れは、 Select Access に よ っ て内部で使用 さ れ る 予約 コ ー ド です。 プ ラ グ イ ン
が こ の値を返す こ と はあ り ません。
判定ポ イ ン ト プラ グ イ ン が DONE ま た は ALLOW の値を 返すには、XML にア ク セス の可否を 示
す値を 設定する 必要があ り ま す。 具体的には、 XML プロ パテ ィ ENFORCER_ACTION の値を
ENFORCER_ACTION_ALLOW ま た は ENFORCER_ACTION_DENY に設定し ま す。 こ れら の 文字列
のプリ プロ セ ッ サの定義は、 /source/enforcer ディ レ ク ト リ の enforcer.h に記述さ れて
いま す。
74 ページの 「decide() メ ソ ッ ド 」 に、 attributelogic ク ラ ス の decide() メ ソ ッ ド を示 し て
い ます。 こ の メ ソ ッ ド は、 デフ ォ ル ト の decider_branch_path を DECIDER_BRANCH_FALSE
に設定 し ま す。 続いて、 要求を評価 し ま す。 ア イ デン テ ィ テ ィ が適切な属性を持っ てい る 場合、
decide() メ ソ ッ ド は decider_branch_path を DECIDER_BRANCH_TRUE に設定 し ま す。 要
求の評価後、 メ ソ ッ ド は CONTINUE を返 し ます。
decide() メ ソ ッ ド
次の コ ー ド 例は、 使用 さ れ る decide() メ ソ ッ ド を示 し てい ます。
Decider::Result attributelogic::decide
(
PropertyListElement *request, // the Enforcer XML request and
data from other
// evaluators.
PropertyListElement *response, // the XML response to send back
const bool trace,
// whether tracing is requested
string& decider_branch_path
// tells Validator which branch to
evaluate next
) {
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG, "Invoking
attributelogic plugin");
// default response will be to take the false branch
decider_branch_path = DECIDER_BRANCH_FALSE;
// evaluate can throw EvaluatorInternal if something is wrong
if ( evaluate(*request) ) {
decider_branch_path = DECIDER_BRANCH_TRUE;
}
return Decider::CONTINUE;
// keep processing
}
attributelogic::evaluate() は、 例外 EvaluatorInternal を ス ロ ーす る こ と が あ り ま
す。 判定ポ イ ン ト プ ラ グ イ ン の例外は、 /source/validator/evaluator.h で定義 さ れます。
定義 さ れてい る 例外は次の と お り です。
74
•
EvaluatorFatal: 深刻なエ ラ ーが発生 し てお り 、 Policy Validator を再起動す る 必要があ り
ます。
•
EvaluatorNonFatal: 一時的なエ ラ ーが発生 し ま し たが、 影響があ る のは今回の要求のみ
です。 要求は拒否 さ れます。
•
EvaluatorInternal: エバ リ ュ エー タ のモジ ュ ール内でエ ラ ーが発生 し ま し たが、 Policy
Validator は残 り の条件付 き ルールの処理を続行可能です。 処理は DECIDER_BRANCH_FALSE
パ ス を使用 し て続行 さ れ ます。 こ の メ ソ ッ ド は使用 し ないで く だ さ い。
EvaluatorFatal、 EvaluatorNonFatal、 お よ び EnforcerException ク ラ ス を 使用
す る よ う に し て く だ さ い。
第4章
LdapConnection / User / UserSource / UserCache
判定ポ イ ン ト プ ラ グ イ ン attributelogic は、 ア イ デン テ ィ テ ィ の属性を設定 さ れたセ キ ュ リ
テ ィ ポ リ シー と 比較 し ます。 ア イ デン テ ィ テ ィ の属性が設定 さ れたルール と 一致す る 場合、 判定
ポ イ ン ト プ ラ グ イ ン は true を 返 し ま す。 ア イ デン テ ィ テ ィ の属性の確認にデ ィ レ ク ト リ サー
バーを使用す る よ う に attributelogic ク ラ ス を設定す る こ と も で き ます。 ま た、 XML 要求か
ら 情報を取得す る こ と も 可能です。75 ページの 「evaluate() メ ソ ッ ド 」 に示す evaluate() メ ソ ッ
ド は、 m_useLdap フ ラ グ を確認 し て、 ア イ デン テ ィ テ ィ の属性の取得先を決定 し てい ます。
evaluate() メ ソ ッ ド
次に、 evaluate() メ ソ ッ ド の例を示 し ます。
bool attributelogic::evaluate(PropertyListElement &data) {
return m_useLdap ? evaluateUsingLdap(data) :
evaluateExpression(&m_expression, &data);
}
こ のセ ク シ ョ ン では、 2 つの主要な ク ラ ス であ る UserSource と UserCache について説明 し ま
す。 Select Access はア イ デン テ ィ テ ィ 情報をデ ィ レ ク ト リ サーバーに格納 し て取得 し ます。 設定
済 み の 任意 の ア イ デ ン テ ィ テ ィ 保 存 場 所 に ア イ デ ン テ ィ テ ィ を 配 置 す る こ と が で き ま す。
UserSource は、 LDAP 接続へのハン ド ル、 コ ン テ キ ス ト ベース、 検索ベース と い っ た、 ア イ デ
ン テ ィ テ ィ プ ロ フ ァ イ ルを特定す る ために必要な情報を格納す る オブジ ェ ク ト です。
デ ィ レ ク ト リ サーバーに配置 さ れていないア イ デン テ ィ テ ィ については、 一時ア イ デン テ ィ テ ィ
と 呼ばれ る 擬似 LDAP エ ン ト リ を使用す る よ う Select Access を設定で き ます。 こ れ ら のプ ロ フ ァ
イ ルは、 デ ィ レ ク ト リ サーバーには実際には配置 さ れ ませんが、 キ ャ ッ シ ュ 内で他のプ ロ フ ァ イ
ル と 同様に表示 さ れ ます。 認証プ ラ グ イ ン がデ ィ レ ク ト リ サーバーに配置 さ れていないア イ デン
テ ィ テ ィ の認証を行 う 場合、 Validator キ ャ ッ シ ュ に一時ア イ デン テ ィ テ ィ を作成 し ます。
75 ページの 「UserSource お よ び UserCache への参照の取得」 に、UserSource お よ び UserCache
への参照の取得方法を 示 し てい ま す。 evaluateUsingLdap() メ ソ ッ ド に よ り 、 UserSource
お よ び UserCache 内の情報が検証 さ れ ます。evaluateUsingLdap() メ ソ ッ ド は次の処理を実
行 し ます。
1
要求デー タ か ら 認証済みのア イ デン テ ィ テ ィ の DN を抽出 し ます。 なお、 要求内に こ の DN
が存在す る のは、 ア イ デン テ ィ テ ィ がすでに認証 さ れてい る 場合のみです。
2
認証済みの DN を基に、 ア イ デン テ ィ テ ィ の UserSource を取得 し ます。
3
UserSource か ら LDAP 接続を取得 し ます。
4
UserCache か ら ユーザーのオブジ ェ ク ト を取得 し ます。 UserCache は、 UserSource と
ア イ デン テ ィ テ ィ の認証済み DN を使用 し て、 キ ャ ッ シ ュ さ れたオブジ ェ ク ト を特定 し ます。
5
ア イ デン テ ィ テ ィ のグループお よ びダ イ ナ ミ ッ ク グループ メ ンバシ ッ プ を取得 し ます。 こ
れ ら は、 キ ャ ッ シ ュ さ れたユーザーのオブジ ェ ク ト に格納 さ れてい ます。
6
evaluateExpressionUsingLdap() を呼び出 し て、 ア イ デン テ ィ テ ィ の属性が設定 さ れ
たルール と 一致す る こ と を確認 し ます。
UserSource ま たは UserCache 内に無効な参照が存在す る 場合は、例外 EvaluatorInternal
が ス ロ ー さ れ、 Policy Validator は DECIDER_BRANCH_FALSE パ ス を使用 し ます。
UserSource お よび UserCache への参照の取得
次の コ ー ド 例は、 適切な参照の取得方法を示 し てい ます。
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
75
bool attributelogic::evaluateUsingLdap(const PropertyListElement &data)
{
static const char LOCATION[] =
"attributelogic::evaluateUsingLdap()";
const char *dn =
data.getChildStringValue(ENFORCER_AUTHENTICATED_DN);
if ( ! dn ) {
throw EvaluatorInternal(EnforcerException::E_INVALID_ARG,
LOCATION,
"Could not find Authenticated User dn in the query");
}
const UserSource *userSrc = UserSource::sGetByDN(dn);
if ( ! userSrc ) {
string message("Could not find User Source for User dn: ");
message += dn;
throw EvaluatorInternal(EnforcerException::E_INVALID_ARG,
LOCATION, message);
}
LdapConnection *ldapConn = userSrc->getLdapConnection();
if ( ! ldapConn ) {
throw EvaluatorInternal(EnforcerException::E_INVALID_ARG,
LOCATION,
"User source has an invalid LdapConnection");
}
User *user = UserCache::sLocateByDN(userSrc, dn);
if (! user) {
throw EvaluatorInternal(EnforcerException::E_INVALID_ARG,
LOCATION,
"User cannot be found in User Cache");
}
const UserMemberships **membership = user->getMemberships();
if ( ! membership ) {
throw EvaluatorInternal(EnforcerException::E_INVALID_ARG,
LOCATION,
"User Cache entry contains invalid membership info");
}
return (
evaluateExpressionUsingLdap(m_expression,*ldapConn,*userSrc,dn,
membership)
);
}
evaluateExpressionUsingLdap() メ ソ ッ ド が evaluateUsingLdap() に よ っ て呼び出 さ
れ ます。 evaluateExpressionUsingLdap() メ ソ ッ ド は 2 つの機能を実行 し ます。 まず、 XML
設定を基に LDAP 検索フ ィ ル タ を作成 し ます。 続いて、 フ ィ ル タ の基にな っ てい る のがア イ デン
テ ィ テ ィ の属性であ る 場合は evaluateUserSearchFilter() を、 グループ メ ンバシ ッ プであ
る 場合は evaluateGroupSearchFilter() を、 それぞれ呼び出 し ます。
76
第4章
検索 フ ィ ル タ を 作成す る 際、 evaluateExpressionUsingLdap() は自身 を 再帰的に呼び出 し
て、 フ ィ ル タ の 各 行 を 解 析 し ま す。 行 を 結 合 し て い る 論 理 的 演 算 子 が 同 一 で あ る 場 合、
attributeLogicPanel の Configuration Editor が異な る フ ィ ル タ の行を同 じ XML 分岐に格納 し
ま す。 こ の ため、 evaluateExpressionUsingLdap() メ ソ ッ ド が論理演算子 を 解析す る 場合
は、 自身を再帰的に呼び出 し て、 各 XML の子 ノ ー ド を処理 し ます。 各 XML の子 ノ ー ド は、 フ ィ
ル タ の行を表 し ます。 こ の メ ソ ッ ド ではブール式の短絡論理が使用 さ れ ます。 AND 式が false を
返 し た場合、 ま たは OR 式が true を返 し た場合は、 自動的に処理を停止 し ます。
evaluateUserSearchFilter() メ ソ ッ ド は、 式を解析す る 際に、 比較演算子、 範囲 ( ア イ デン
テ ィ テ ィ 、 グループ、 ま たはその両方 )、 属性の名前、 お よ び必要な属性の値を抽出 し 、 こ れ ら の
プ ロ パテ ィ か ら LDAP 検索フ ィ ル タ を作成 し ます。 evaluateUserSearchFilter() メ ソ ッ ド
は、 evaluateUserSearchFilter() ま たは evaluateGroupSearchFilter() を呼び出 し 、
各フ ィ ル タ を使用 し てデ ィ レ ク ト リ サーバーへの照会を行い ます。 結果は再帰呼び出 し に よ っ て
評価 さ れ ます。
式の検索
次の コ ー ド 例は、 プ ラ グ イ ン の検索フ ィ ル タ の使用方法を示 し てい ます。
式を結合する
論理演算子を
解析 し ます
bool attributelogic::evaluateExpressionUsingLdap(
const XmlTreeNode &expression,
LdapConnection &ldapConn,
const UserSource &userSrc,
const string &userDn,
const UserMemberships ** membership
) {
static const char LOCATION[] =
"attributelogic::evaluateExpressionUsingLdap()";
const char *expressionName = expression.getName();
if ( ! expressionName ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Missing attribute name in expression");
}
if ( STREQ(expressionName, attributelogic_tags::LOGICAL_OPERATOR) )
{
const char *operatorName =
expression.getAttributeValue(attributelogic_tags::OPERATOR);
if ( ! operatorName ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Missing Logical Operator in expression");
}
const char **it = find_first_of(logicalOperatorNames,
logicalOperatorNames
+ logicalOperatorSize, &operatorName, &operatorName + 1,
streq);
if ( it == logicalOperatorNames + logicalOperatorSize ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Unknown Logical Operator in expression");
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
77
XML ノ ー ド の
式を解析 し ます
再帰呼び出 し
に よ り 式を
評価 し ます
フ ィ ル タ の式を
解析 し ます
範囲を
抽出 し ます
78
}
for (int i = 0; i < expression.getNumChildren(); ++i) {
XmlTreeNode *child = expression.getChild(i);
if ( ! child ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Invalid XML");
}
bool result = evaluateExpressionUsingLdap(*child, ldapConn,
userSrc,
userDn, membership);
if ( result != logicalOperatorSigns[it logicalOperatorNames] ) {
// stop if (... AND false) or (... OR true)
return result;
}
}
return true;
}
else if ( STREQ(expressionName,
attributelogic_tags::COMPARE_OPERATOR) ) {
// get Operator
const char *operatorName =
expression.getAttributeValue(attributelogic_tags::OPERATOR);
if ( ! operatorName ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Missing Compare Operator");
}
const char **opIt = find_first_of(operatorNames, operatorNames +
operatorSize,
&operatorName, &operatorName + 1, streq);
if ( opIt == operatorNames + operatorSize ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Unknown Compare Operator");
}
int operatorIndex = opIt - operatorNames;
const char *operatorSign = operatorSigns[operatorIndex];
bool operatorIsBinary = ! operatorUnary[operatorIndex];
// get Scope
const char *scopeName =
expression.getAttributeValue(attributelogic_tags::SCOPE);
if ( ! scopeName ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Missing scope in expression");
}
第4章
属性の名前を
抽出 し ます
属性の値の
リスト を
抽出 し ます
const char **opSc = find_first_of(scopeNames, scopeNames +
scopeSize,
&scopeName, &scopeName + 1, streq);
if ( opSc == scopeNames + scopeSize ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Unknown Scope");
}
bool isUserScope = scopeUser[opSc - scopeNames];
bool isGroupScope = scopeGroup[opSc - scopeNames];
// get Attribute names (could be many)
const PropertyElementVector attrNames =
expression.getPropertyValues
(attributelogic_tags::ATTRIBUTE_NAME);
if ( attrNames.empty() ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Missing attribute name");
}
// get Attribute value (only one)
const PropertyElementVector attrValues =
expression.getPropertyValues(attributelogic_tags::ATTRIBUTE_VALUE);
const char *attrValue = NULL;
if ( operatorIsBinary &&
( attrValues.empty()
|| (attrValue = attrValues.front()->getStringValue()) == NULL
|| strlen(attrValue) < 1 ) ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Missing AttributeValue property in expression");
}
// construct search filter
// for each attribute in the CompareOperator list add the
corresponding
// condition to the search filter
検索フ ィ ル タ
を作成 し ます
string searchFilter("(");
searchFilter += operatorLogic[operatorIndex];
for (PropertyElementVector::const_iterator
nameIt(attrNames.begin());
nameIt != attrNames.end(); nameIt++) {
const char * attrName = (*nameIt)->getStringValue();
if ( !attrName || *attrName == '\0' ) {
continue;
}
string attrFilter;
attrFilter += "(";
attrFilter += attrName;
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
79
// attr!* is represented as !(attr=*), attr!=value as
!(attr=value)
attrFilter += ( *operatorSign != '!' ) ? operatorSign :
operatorSign + 1;
if ( operatorIsBinary ) {
attrFilter += attrValue;
}
attrFilter += ")";
if ( *operatorSign == '!' ) {
attrFilter = "(!" + attrFilter + ")";
}
// Make sure that attribute exists before doing relational
comparisons
const char lastChar = operatorSign[strlen(operatorSign) - 1];
if (lastChar != '*') {
string str("(&(");
str += attrName;
str += "=*)";
attrFilter = str + attrFilter + ")";
}
searchFilter += attrFilter;
プ ラ グ イ ンの
設定を
開始 し ます
80
}
searchFilter += ")";
// done with the search filter, perform the search
bool result = false;
if ( isUserScope ) {
result = evaluateUserSearchFilter(searchFilter, userDn,
ldapConn);
}
if ( isGroupScope && !result) {
return evaluateGroupSearchFilter(searchFilter, userDn,
ldapConn,
userSrc, membership);
}
return result;
}
else if ( STREQ(expressionName,
attributelogic_tags::ATTRIBUTE_LOGIC) ||
STREQ(expressionName, attributelogic_tags::EXPRESSION_ROOT)) {
if ( expression.getNumChildren() <= 0 ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Missing Logical Attribute Property list");
}
XmlTreeNode *child = expression.getChild(0);
if ( ! child ) {
throw EnforcerException(EnforcerException::E_INVALID_ARG,
LOCATION,
"Invalid Logical Attribute Property list");
第4章
}
return evaluateExpressionUsingLdap(*child, ldapConn, userSrc,
userDn, membership);
残 り の式を
処理する再帰
呼び出 し
}
throw EnforcerException(EnforcerException::E_INVALID_ARG, LOCATION,
"Unknown property in expression");
}
ア イ デン テ ィ テ ィ の検索フ ィ ル タ 内の evaluateUserSearchFilter() メ ソ ッ ド は、 デ ィ レ ク
ト リ サーバー内のプ ロ フ ァ イ ルのみを検索 し てい ます。 ア イ デン テ ィ テ ィ がすでに確認済みであ
る ため、 サーバー全体ではな く 、 特定のプ ロ フ ァ イ ルのみを対象にす る こ と に よ り 、 デ ィ レ ク ト
リ サーバーの負荷を軽減 し ます。 事前に取得済みの LdapConnection を使用 し て検索を実行 し
ます。 ア イ デン テ ィ テ ィ が検索フ ィ ル タ の要求す る 属性を所有 し てい る 場合は true が返 さ れ ま
す。 プ ロ フ ァ イ ルが検索フ ィ ル タ と 一致 し ない場合は、 false が返 さ れます。
ア イ デン テ ィ テ ィ の検索 フ ィ ル タ
次の コ ー ド 例は、 evaluateUserSearchFilter() メ ソ ッ ド の使用方法を示 し てい ます。
bool attributelogic::evaluateUserSearchFilter
(
const string &searchFilter,
const string &userDn,
LdapConnection &ldapConn
) {
auto_LDAPMessage searchResult;
int rc = ldapConn.search(userDn.c_str(), LDAP_SCOPE_BASE,
searchFilter.c_str()
LdapAttributes::sNoAttributes, 0, NULL, NULL, LDAP_NO_LIMIT,
LDAP_NO_LIMIT,
searchResult);
return ( rc == LDAP_SUCCESS &&
ldapConn.firstEntry(searchResult.get()) );
}
81 ページの 「グループの検索フ ィ ル タ 」 に示す evaluateGroupSearchFilter() メ ソ ッ ド は、
該当のア イ デン テ ィ テ ィ に関す る すべての グループ と ダ イ ナ ミ ッ ク グループ メ ン バシ ッ プ を検
索 し てい ます。 こ の メ ソ ッ ド は、 それぞれの メ ンバシ ッ プについてデ ィ レ ク ト リ サーバーの各グ
ループ エ ン ト リ を 検索 し ま す。 それぞれの グ ループは各グ ループの検索 フ ィ ル タ と 照合 さ れ ま
す。 フ ィ ル タ と 一致す る グループが存在 し た場合、 検索は成功 と な り 、 LDAP 検索はエ ン ト リ を
1 つだけ返 し ます。 一致が確認 さ れ る と 、 こ の メ ソ ッ ド は true を返 し ます。 グループの検索フ ィ
ル タ と 一致す る ア イ デン テ ィ テ ィ の メ ンバシ ッ プが存在 し ない場合は、 メ ソ ッ ド は false を返 し
ます。
グループの検索 フ ィ ル タ
次の コ ー ド 例は、 evaluateGroupSearchFilter() メ ソ ッ ド の使用方法を示 し てい ます。
bool attributelogic::evaluateGroupSearchFilter(
const string &searchFilter,
const string &userDn,
LdapConnection &ldapConn,
const UserSource &userSrc,
認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API
81
const UserMemberships ** membership
) {
for (; *membership != NULL; ++membership) {
for (UserMemberships::const_iterator it = (*membership)->begin()
; it != (*membership)->end(); ++it) {
auto_LDAPMessage searchResult;
int rc = ldapConn.search(*it, LDAP_SCOPE_BASE,
searchFilter.c_str(),
LdapAttributes::sNoAttributes, 0, NULL, NULL,
LDAP_NO_LIMIT, LDAP_NO_LIMIT, searchResult);
if ( rc == LDAP_SUCCESS &&
ldapConn.firstEntry(searchResult.get()) ) {
return true;
}
}
}
return false;
}
サン プル attributelogic の作成
サ ン プ ル attributelogic を 作 成 す る に は、 GNU make を イ ン ス ト ー ル し 、 /source/
validator/plugins デ ィ レ ク ト リ か ら gmake コ マ ン ド を実行 し ます。. gmake コ マ ン ド の詳細
については、 23 ページの 「SDK でのサン プルの作成」 を参照 し て く だ さ い。
gmake コ マ ン ド に よ り 、 82 ページの 「Makefile の出力」 に示す出力が生成 さ れ ます。 異な る コ ン
パ イ ラ を使用 し てい る 場合は、 次に示すオプシ ョ ン が再現 さ れ る よ う に コ ンパ イ ラ を設定す る 必
要があ り ます。 Makefile を修正す る 際は、 イ ン ク ルー ド お よ び ラ イ ブ ラ リ デ ィ レ ク ト リ のパ ス
にお使いのオペレーテ ィ ン グ シ ス テ ム を指定 し て く だ さ い。
Makefile の出力
次に、 判定ポ イ ン ト プ ラ グ イ ンに対す る 出力サン プルを示 し ます。
g++ -g -O2 -pipe -DUSE_SSL
-D_PTHREADS -D_REENTRANT -DPOSIX_THREADS
-DFD_SETSIZE=8192 -Wall -D_POSIX_THREAD_SAFE_FUNCTIONS -DACE_HAS_SSL
-I../../solaris/include -I../../include -I.. -I../../enforcer -I../
../radius
-DACE_HAS_EXCEPTIONS attributelogic.cpp -g -O2 -pipe -L../../
<platform?/lib
-lenforcer -lopenssl -licuuc -licudata -lACE_SSL -lldap50 -laceclnt
-lradlib
-lcurl -lsocket -lnsl -ldl -lthread -o attributelogic
82
第4章
5 セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ :
Enforcer API
Enforcer API に よ っ て、 Select Access のセ キ ュ リ テ ィ サービ ス を ほ と ん ど の製品お よ びカ ス タ ム
コ ン ポーネ ン ト と 統合で き ま す。 こ の章では、 Enforcer API を 使用 し て、 Java、 C/C++、 お よ び
COM オブジ ェ ク ト のセキ ュ リ テ ィ サービ ス を提供す る 方法について説明 し ます。
こ の章の概要
こ の章では、 Enforcer プ ラ グ イ ン と その API、 お よ び Enforcer プ ラ グ イ ン の動作を カ ス タ マ イ ズ
す る ために Enforcer API で作成で き る 各種プ ラ グ イ ンについて説明 し ます。
•
83 ページの 「Enforcer プ ラ グ イ ン」
•
84 ページの 「Enforcer API」
•
89 ページの 「Java Enforcer API を使用 し た Enforcer プ ラ グ イ ンの作成」
•
107 ページの 「C/C++ Enforcer API を使用 し た Enforcer プ ラ グ イ ンの作成」
•
126 ページの 「COM Enforcer API を使用 し た Enforcer プ ラ グ イ ンの作成」
•
146 ページの 「サ イ ト 固有デー タ の組み込み」
Enforcer プ ラ グ イ ン
図 13 は、 Enforcer プ ラ グ イ ン を Policy Builder お よ び Policy Validator と 一緒に使用 し て、 セ キ ュ
リ テ ィ サービ ス を拡張す る 方法を示 し てい ます。 Enforcer プ ラ グ イ ン は、 ネ ッ ト ワー ク リ ソ ース
へのア ク セ ス を制御 し ます。Enforcer プ ラ グ イ ン は リ ソ ース の要求を受け取 り 、Policy Validator に
承認の判定を委任 し ます。 Enforcer は、 Policy Validator の判定結果を実行 し ます。 Enforcer プ ラ グ
イ ン お よ び Policy Validator は XML を使用 し て、 要求や実行の指示を伝達 し ます。 XML に よ り 、
Enforcer プ ラ グ イ ン では、 ア ク セ ス制御の決定に必要 と さ れ る すべての情報を Policy Validator に
送信で き ま す。 ま た、 Policy Validator では、 ア イ デン テ ィ テ ィ 認証の要求、 許可す る 認証の種類
の決定、 ロ グ イ ン フ ォ ーム の表示 と い っ た動作の実行を Enforcer プ ラ グ イ ン に指示で き ます。
通常、 Enforcer プ ラ グ イ ン は、 サーバーの API を使用 し て、 製品か ら リ ソ ース の要求を受け取 り
ます。 た と えば、 Sun ONE Web Server Enforcer プ ラ グ イ ン は、 NSAPI を使用 し て HTTP 要求を受
け取 り 、 承認 し ます。
83
図 13
Enforcer プ ラ グ イ ン と Select Access コ ン ポーネ ン ト の連携
Enforcer API
Enforcer プ ラ グ イ ン の主な機能は、 認証お よ び承認の要求を Policy Validator に送信 し 、 応答の結
果を実行す る こ と です。Enforcer API は、Policy Validator と の通信を簡素化す る イ ン タ ーフ ェ イ ス、
ク ラ ス、 お よ びユーテ ィ リ テ ィ の集合です。 Select Access では、 C/C++、 Java、 お よ び COM コ ン
ポーネ ン ト を作成す る ための Enforcer API イ ン タ ーフ ェ イ ス が提供 さ れてい ます。Enforcer API を
使用 し て、 次の よ う なセ キ ュ リ テ ィ サービ ス を簡単に追加す る こ と がで き ます。
•
ア イ デン テ ィ テ ィ の認証
•
シ ン グル サ イ ン オ ン
•
承認
•
セキ ュ リ テ ィ で保護 さ れた リ モー ト ロ グ
•
個別化の属性
個別化の各属性の処理については、 第 6 章、 「個別化属性の使用 : Personalization API」
を参照 し て く だ さ い。
開発者が Select Access のセキ ュ リ テ ィ サービ ス を さ ま ざ ま な製品 と 統合で き る よ う 、Enforcer API
で は Java、 C/C++、 お よ び COM の イ ン タ ー フ ェ イ ス を サ ポ ー ト し て い ま す。 こ の章で は、 各
Enforcer API イ ン タ ーフ ェ イ ス に対応す る 、 次の 3 つの Enforcer プ ラ グ イ ン について説明 し ます。
84
•
サーブ レ ッ ト Enforcer プ ラ グ イ ン : こ の Enforcer プ ラ グ イ ン は Java の Enforcer API で、Servlet
API を Enforcer API に接続 し ます。 サーブ レ ッ ト は、 Select Access で Web リ ソ ースへのア ク セ
ス を制御す る セキ ュ リ テ ィ フ ィ ル タ と し て機能 し ます。
•
Apache 2 Enforcer プ ラ グ イ ン : こ の Enforcer プ ラ グ イ ン は C/C++ の Enforcer API で、 Apache
API を Enforcer API に接続 し ます。 こ のプ ラ グ イ ンは、 Apache サーバーに Select Access のセ
キ ュ リ テ ィ サービ ス を提供 し ます。
第5章
•
WSE Enforcer プ ラ グ イ ン : こ の Enforcer プ ラ グ イ ン は COM の Enforcer API で、 .Net SOAP イ
ン タ ー フ ェ イ ス を Enforcer API に接続 し ま す。 こ の プ ラ グ イ ン は、 .Net リ ソ ー ス に Select
Access のセキ ュ リ テ ィ サービ ス を提供 し ます。
Enforcer API の仕組み
Enforcer API は、 セキ ュ リ テ ィ で保護 さ れた信頼性の高い Policy Validator お よ び Select Audit と の
通信を カプセル化 し ます。 こ の API は、 Policy Validator に要求を送信 し 、 応答を受け取 る イ ン タ ー
フ ェ イ ス を 提供 し ま す。 Enforcer API は、 Policy Validator と のセ キ ュ リ テ ィ で保護 さ れた接続 を
バ ッ ク グ ラ ウ ン ド で管理 し ます。こ の API はチ ャ ネルのセキ ュ リ テ ィ 、フ ェールオーバーのサポー
ト 、 セ ッ シ ョ ン タ イ ム ア ウ ト 、 応答 と 要求 と の関連付け を カプセル化 し ます。
Enforcer プ ラ グ イ ン の作成
1
Enforcer オブジ ェ ク ト を作成 し ます。 通常、 こ の手順を実行す る のは Enforcer プ ラ グ イ ン が
初期化 さ れた場合のみです。 Enforcer オブジ ェ ク ト は Policy Validator と の通信に使用 さ れま
す。 Enforcer オブジ ェ ク ト を作成す る 際、 Enforcer API は ポ リ シー ス ト ア にあ る Enforcer プ
ラ グ イ ン 設定の場所を確認 し ます。 ロ ーカルのブー ト ス ト ラ ッ プ設定フ ァ イ ル、
enforcer.xml を使用 し て、 ポ リ シー ス ト ア 内の Enforcer プ ラ グ イ ン の設定のエ ン ト リ が
検索 さ れ ます。
2
必要なデー タ を抽出 し ます。 具体的には、 フ ォ ーム を処理 し て ID と パ ス ワー ド を取得す る 、
サーバーの API 変数にア ク セ ス し て要求 さ れた リ ソ ース の URL を取得す る 、 環境変数を読
み取 り SSL パ ラ メ ー タ を取得す る と いっ た作業が行われ ます。
3
Policy Validator に送信す る XML 要求を作成 し ます。 Policy Validator が評価す る 認証ルールお
よ び承認ルールを確認で き る よ う 、 作成す る 要求には要求 さ れた URL を含め る 必要があ り
ます。 一般的な XML 要求には、 ID、 パ ス ワ ー ド 、 送信元の IP やホ ス ト 名、 SSL プ ロ パ
テ ィ 、 シ ン グル サ イ ン オ ン の nonce と い っ たプ ロ パテ ィ が含ま れ ます。
4
Enforcer オブジ ェ ク ト を使用 し て、 要求を Policy Validator に送信 し ます。
5
応答を評価 し ます。 Enforcer プ ラ グ イ ン は、 Policy Validator の応答に基づいて、 異な る 動作
を実行す る 必要があ り ます。 一般的な動作 と し ては、 ア イ デン テ ィ テ ィ に認証情報の入力を
要求す る メ ッ セージの表示、 リ ソ ースへのア ク セ ス の提供、 ア ク セ ス拒否ページの表示、
nonce と セ ッ シ ョ ン と の関連付け (Web ブ ラ ウ ザ Cookie への nonce の追加な ど )、 アプ リ ケー
シ ョ ンへの個別化デー タ の提供な ど があ り ます。
6
後続の要求を処理 し ます。
Enforcer API は、 XML を使用 し て Policy Validator と 通信 し ます。 サン プルの XML 要求を 単純な
Policy Validator 要求の例 に示 し ます。service お よ び path のプ ロ パテ ィ は必須です。必要に応 じ て、
XML のあ ら ゆ る プ ロ パテ ィ を要求に追加で き ます。
単純な Policy Validator 要求の例
<PolicyValidatorQuery>
<PROPERTY NAME="service">http://mycompany.com:8080</PROPERTY>
<PROPERTY NAME="path">/secure/form</PROPERTY>
<PROPERTY NAME="srcIP">10.10.10.6</PROPERTY>
<PROPERTY NAME="srcPort">1107</PROPERTY>
<PROPERTY NAME="dstIP">10.10.10.7</PROPERTY>
<PROPERTY NAME="dstPort">8080</PROPERTY>
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
85
<PROPERTY NAME="native_auth">native_password</PROPERTY>
<PROPERTY NAME="native_auth">native_register</PROPERTY>
<PROPERTY NAME="site_data">time: Tue Jul 10 13:14:40 2001</PROPERTY>
<PROPERTY NAME="owner">gandalf</PROPERTY>
<PROPERTY NAME="size">268</PROPERTY>
<PROPERTY NAME="method">GET</PROPERTY>
<PROPERTY NAME="queryID">1</PROPERTY>
</PolicyValidatorQuery>
単純な Policy Validator 応答の例 は、 Policy Validator ク エ リ のサン プル応答を示 し てい ます。 Policy
Validator は、 あ ら ゆ る 種類の XML デー タ を Enforcer プ ラ グ イ ン に返す こ と がで き ます。 サ ン プ
ル応答では、 要求 さ れた リ ソ ースへのア ク セ ス が許可 さ れてい ます。
単純な Policy Validator 応答の例
次に、 単純な Policy Validator 応答の例を示 し ます。
<PolicyValidatorReply>
<PROPERTY NAME="queryID">1</PROPERTY>
<PROPERTY NAME="authenticated_dn">uid=ssmith,ou=users,o=ca.hp.com
</PROPERTY>
<PROPERTY NAME="devo_groups">users</PROPERTY>
<PROPERTY NAME="nonce">bWFub3dhci5jYS5iYWx0aW1vcmUuY29tOjk5ODh8dWlkPW
dhbmRhbGYsb3U9dXNlcnMsb3U9c3RldmUsbz1jYS5iYWx0aW1vcmUuY29tfEx8
cGFzc192YWxpZGF0b3J8O0zd4DuLSR2cw0K7Yp5pTb04TSWWxJJqqc7rUszF16
atYOqTLnVqt+O4a6OFrWQegqu89L17Kwzv4n3XWIwFpsP+wJ8V1eEw4KG9c+REkJFs67
bLKZuWZ6xNz2Xpgs7FLb5s2O3iwswvuDvcBNOZqF2pbOproktsiuaC36SqxmKLSzY/
</PROPERTY>
<PROPERTY NAME="action">ALLOW</PROPERTY>
</PolicyValidatorReply>
あ ら か じ め定義 さ れた XML プ ロ パテ ィ タ グの完全な一覧は、 『HP OpenView Select Access 6.2 開
発者向け リ フ ァ レ ン ス ガ イ ド 』 を参照 し て く だ さ い。
Enforcer API のク ラ ス と ユーテ ィ リ テ ィ
Select Access には、 XML ド キ ュ メ ン ト 、 プ ロ パテ ィ リ ス ト 、 プ ロ パテ ィ を格納 し 処理す る ため
の ク ラ ス が組み込 ま れ て い ま す。 Policy Validator の要求 を 作成 し 、 応答 を 処理す る には、 Select
Access の ク ラ ス を使用す る 必要があ り ます。 ま た、 Select Access には、 Policy Validator と の通信を
カプセル化す る Enforcer プ ラ グ イ ン の ク ラ ス も 同様に組み込ま れてい ます。 Select Access は、 C/
C++、 Java、 お よ び COM のオブジ ェ ク ト モデルの実装をサポー ト し ます。
Enforcer API の イ ン タ ー フ ェ イ ス は、 使用す る オ ブ ジ ェ ク ト モ デル に よ っ て 異 な り ま す。 各
Enforcer API の ク ラ スお よ びユーテ ィ リ テ ィ に関す る 詳細は、次に示すセ ク シ ョ ン を参照 し て く だ
さ い。
86
•
Java の ク ラ スお よ びユーテ ィ リ テ ィ については、 90 ページの 「Java Enforcer API の ク ラ ス と
ユーテ ィ リ テ ィ 」 を参照 し て く だ さ い。
•
C/C++ の ク ラ スお よ びユーテ ィ リ テ ィ については、 108 ページの 「C/C++ Enforcer API の ク ラ
ス と ユーテ ィ リ テ ィ 」 を参照 し て く だ さ い。
•
COM の ク ラ スお よ びユーテ ィ リ テ ィ については、 129 ページの 「COM Enforcer API の ク ラ ス
と ユーテ ィ リ テ ィ 」 を参照 し て く だ さ い。
第5章
Enforcer API の設定
すべての Enforcer プ ラ グ イ ン に対 し て設定 を行 う 必要が あ り ま す。 通信対象の Policy Validator、
承認を必要 と し ない フ ァ イ ル、 シ ン グル サ イ ン オ ンお よ び複数 ド メ イ ン シ ン グル サ イ ン オ ン の
処理方法な ど を指定 し ます。 ロ ーカルの Enforcer プ ラ グ イ ン では、 Select Access の Setup Tool を
使用 し て、 各プ ロ パテ ィ を設定す る こ と がで き ます。 Setup Tool で、 設定す る Enforcer プ ラ グ イ ン
の種類 (Apache 2 Enforcer プ ラ グ イ ン な ど ) に対応す る [ 設定 ] ボ タ ン を選択 し ま す。 カ ス タ ム
Enforcer プ ラ グ イ ン を設定す る 場合は、 [Generic Enforcer] を選択 し て く だ さ い。
Enforcer オブジ ェ ク ト を作成す る 際は、 Enforcer プ ラ グ イ ン の名前を指定 し ます。 Enforcer API は
検索 を 実行 し、 ブー ト ス ト ラ ッ プ
フ ァ イル
<SA_Install>/bin/
enforcer_<enforcerName>.xml を 確認 し ま す。 サ ン プルのブー ト ス ト ラ ッ プ XML フ ァ イ ル を
Code example<$paratext> に示 し ます。 ブー ト ス ト ラ ッ プ フ ァ イ ルは、 ポ リ シー ス ト ア で Enforcer
プ ラ グ イ ン 設定 を 検索す る 際に使用す る Policy Validator を Enforcer API に対 し て 通知 し ま す。
ブー ト ス ト ラ ッ プ フ ァ イ ル を 使用 し た Enforcer API の初期化に関す る 詳細は、 次に示す各セ ク
シ ョ ン を参照 し て く だ さ い。
•
Java Enforcer オブジ ェ ク ト を作成す る 場合は、 93 ページの 「Enforcer オブジ ェ ク ト の作成」 を
参照 し て く だ さ い。
•
C/C++ Enforcer オブジ ェ ク ト を作成す る 場合は、 110 ページの 「Enforcer オブジ ェ ク ト の作成」
を参照 し て く だ さ い。
•
COM Enforcer オブジ ェ ク ト を作成す る 場合は、 130 ページの 「Enforcer オブジ ェ ク ト の作成」
を参照 し て く だ さ い。
enforcer_<enforcerName>.xml フ ァ イルのサン プル
次に、 Enforcer プ ラ グ イ ン のブー ト ス ト ラ ッ プ XML フ ァ イ ルの一例を示 し ます。
<?xml version="1.0" encoding="UTF-8"?>
<enforcerBootConfig>
SSL 接続に使用
<clientSSLCert>
さ れる証明書の
デー タ
-----BEGIN CERTIFICATE----... Base64 形式の証明書 ...
-----END CERTIFICATE----</clientSSLCert>
<clientSSLKey>
-----BEGIN RSA PRIVATE KEY-----
Enforcer 設定の
検索で使用する
Enforcer の ID
設定の取得に
使用する Policy
Validator の
ホス ト と ポー ト
... Base64 形式の秘密鍵 ...
-----END RSA PRIVATE KEY----</clientSSLKey>
<enforcerID>chat.myHost.com:ChatEnforcer</enforcerID>
<serverCertAllowSelfsigned>false</serverCertAllowSelfsigned>
<serverCertAllowUnknownCA>false</serverCertAllowUnknownCA>
<serverCertCA>
-----BEGIN CERTIFICATE----... Base64 形式の証明書 ...
-----END CERTIFICATE----</serverCertCA>
<serverCertOcspUrl />
<serverHost>validator.myHost.com:9988</serverHost>
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
87
<serverPort>9988</serverPort>
<serverUseSSL>true</serverUseSSL>
</enforcerBootConfig>
Enforcer プ ラ グ イ ン の設定後、 Policy Builder を使用 し て、 プ ラ グ イ ン を リ モー ト で管理で き る よ
う にな り ます。 Policy Builder か ら Enforcer プ ラ グ イ ン を管理す る には、 [ ツール ] → [ コ ンポーネ ン
ト 設定 ] の順に選択 し ます。 次に、 設定す る Enforcer プ ラ グ イ ン の ID を選択 し ます。
作成時の考慮事項
保護対象 と な る サーバーや コ ン ポーネ ン ト に よ っ て、 プ ラ グ イ ンは異な り ます。 こ の章では、 Web
ベー ス の Enforcer プ ラ グ イ ン の例を中心に取 り 上げてい ます。 Enforcer API は、 さ ま ざ ま なプ ロ
ト コ ルお よ びサービ ス のセ キ ュ リ テ ィ 保護に使用 さ れ ま す。 こ のセ ク シ ョ ン では、 Enforcer プ ラ
グ イ ン で実行 さ れ る 標準的な タ ス ク について、 詳 し く 説明 し ます。
承認の必要性の判断
Setup Tool と Policy Builder を使用 し て、 承認処理を行わない フ ァ イ ルお よ び ド メ イ ン を指定す る
こ と がで き ます。 Enforcer プ ラ グ イ ン は、 実行 さ れた Enforcer API への呼び出 し に よ っ て、 要求
の承認が必要で あ る こ と を確認 し ます。 コ ー ド 例には、 こ れ ら の Enforcer API 呼び出 し が示 さ れ
てい ます。
ログ イ ン画面の表示
ア イ デン テ ィ テ ィ が、 認証 さ れ る 前に何度 も リ ソ ー ス へのア ク セ ス を試行す る 場合が あ り ま す。
こ の よ う な ケース では、 Policy Validator は Enforcer プ ラ グ イ ン に DENY コ ー ド を返 し ます。 Policy
Validator の応答には、 認証の必要性の有無、 許可 さ れ る 認証の種類、 ロ グ イ ン画面の表示場所な
ど を示すプ ロ パテ ィ が含まれてい ます。
実際にア イ デン テ ィ テ ィ に対 し て ロ グ イ ン画面を表示す る のは、Enforcer プ ラ グ イ ン の役割です。
こ の章の例では、 HTTP 応答の出力ス ト リ ーム を使用 し て、 HTML ロ グ イ ン フ ォ ーム を表示 し ま
す。 ア イ デン テ ィ テ ィ に対 し て認証情報の入力を要求す る 画面を表示す る 設定を Enforcer プ ラ グ
イ ン に組み込みます。
セ ッ シ ョ ンの状態の保持
ア イ デン テ ィ テ ィ に認証を要求す る メ ッ セージ を表示す る 場合、 処理を開始す る 前にセ ッ シ ョ ン
の状態を保存す る こ と が重要です。 認証の実行に よ っ て ア イ デン テ ィ テ ィ の元の要求デー タ が失
われ る 危険性を防ぎ ます。 こ れは、 HTTP の よ う な ス テー ト レ ス プ ロ ト コ ルでは特に重要です。
例に示 さ れ る Enforcer プ ラ グ イ ン は、 Web ブ ラ ウ ザを ロ グ イ ン ページに リ ダ イ レ ク ト す る 前に、
元の HTTP 要求デー タ を専用のプ ロ パテ ィ に保存 し ます。 ア イ デン テ ィ テ ィ が ロ グ イ ン処理を完
了す る と 、 元の要求デー タ が復元 さ れ ます。
シ ングル サイ ン オ ンの nonce の処理
シ ン グル サ イ ン オ ン を簡略化す る には、 ク ラ イ ア ン ト が nonce ( ト ー ク ン ) を安全にサーバーに送
信で き る メ カ ニ ズ ムが必要です。 nonce には、 認証 さ れた ア イ デン テ ィ テ ィ を識別す る 暗号化 さ れ
た情報が含 ま れて い ま す。 nonce を 安全に送受信す る こ と が重要です。 nonce が適切な セ キ ュ リ
テ ィ に よ っ て保護 さ れていない場合、 ハ ッ カーが nonce を傍受 し 、 ア イ デン テ ィ テ ィ が推測 さ れ
る 可能性があ り ます。
88
第5章
こ の章の Enforcer プ ラ グ イ ン の例では、 Web の Cookie を使用 し て nonce が送信 さ れてい ます。 ア
イ デン テ ィ テ ィ の認証後、 Enforcer プ ラ グ イ ン は Web の Cookie に nonce を組み込み ま す。 続い
て、ブ ラ ウ ザが同一 ド メ イ ン内のすべてのサーバーにその Cookie を送信 し ます。 こ れに よ り 、Web
ト ラ ンザ ク シ ョ ン の ド メ イ ン内でのシ ン グル サ イ ン オ ン が可能にな り ます。
複数 ド メ イ ン シ ングル サイ ン オ ンの実行
Cookie を使用 し たセキ ュ リ テ ィ モデルでは、Cookie が生成 さ れた名前空間の外部に存在す る ド メ
イ ンのサーバーに対 し て、 ブ ラ ウ ザが Cookie を送信す る こ と が禁止 さ れます。 こ のため、 異な る
ド メ イ ン間でシ ン グル サ イ ン オ ン が行われ る こ と はあ り ま せん。 複数 ド メ イ ン シ ン グル サ イ ン
オ ン を行 う 場合、 Web ベース の Enforcer プ ラ グ イ ン で追加の手順を実行す る 必要があ り ます。 例
に示 さ れ る Enforcer プ ラ グ イ ン では、 次の手順に よ り 、 複数 ド メ イ ン シ ン グル サ イ ン オ ン を実
行 し ます。
1
Enforcer プ ラ グ イ ン が、 参照元ホ ス ト での複数 ド メ イ ン シ ン グル サ イ ン オ ン を許可す る よ う
に設定 さ れてい る こ と を確認 し ます。
2
ブ ラ ウ ザを参照元ホ ス ト の認証 URL に リ ダ イ レ ク ト し ます。 セ ッ シ ョ ン の状態 と 元の URL
を要求の変数内に保存 し ます。
3
参照元サーバーがア イ デン テ ィ テ ィ を認証 し 、 ク ラ イ ア ン ト のブ ラ ウ ザを元のサーバーに リ
ダ イ レ ク ト し ます。 nonce が リ ダ イ レ ク ト URL に組み込まれ ます。
4
元のサーバーは nonce を抽出 し 、 Policy Validator に照会を行い ます。 続いて新 し い ド メ イ ン
の Cookie を生成 し た後、 ア イ デン テ ィ テ ィ を元の URL に リ ダ イ レ ク ト し ます。
参照元 ホ ス ト で の 複数 ド メ イ ン シ ン グ ル サ イ ン オ ン が 可能 に な る よ う に 設定 を 行 う 場合、
Enforcer API では複数の方法があ り ます。 Enforcer プ ラ グ イ ン の設定ツールを使用 し て、 複数 ド メ
イ ン シ ン グル サ イ ン オ ン が可能にな る よ う に Enforcer プ ラ グ イ ン を設定す る こ と がで き ます。こ
の場合、 Setup Tool ま たは Policy Builder を使用 し て、 Enforcer プ ラ グ イ ン を設定 し ます。 シ ン グ
ル サ イ ン オ ン で複数の ド メ イ ン を サポー ト す る 方法については、 122 ページの 「複数 ド メ イ ン シ
ン グル サ イ ン オ ン」 で説明 し てい ます。 Enforcer プ ラ グ イ ン の [ 複数 DNS ド メ イ ンの SSO] パネ
ルを設定 し て、 異な る ド メ イ ン に存在す る Enforcer プ ラ グ イ ン の ロ グ イ ン URL が反映 さ れ る よ
う に し ます。
Java Enforcer API を使用 し た Enforcer プ ラ グ イ ンの作成
こ のセ ク シ ョ ン では、 Java Enforcer プ ラ グ イ ン の作成方法を説明 し ます。 次の各項目について説
明 し ます。
•
Enforcer オブジ ェ ク ト の初期化
•
承認デー タ の抽出
•
Policy Validator 要求の作成
•
Policy Validator への ク エ リ
•
Policy Validator の判定結果の実行
•
複数 ド メ イ ン シ ン グル サ イ ン オ ン の実行
•
サン プル アプ リ ケーシ ョ ン の展開
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
89
ServletFilter の例
ServletFilter ク ラ ス は、 Select Access でポ リ シーを実行す る サーブ レ ッ ト フ ィ ル タ の実装を
サポー ト し ます。 サーブ レ ッ ト フ ィ ル タ は、 サーブ レ ッ ト の HTTP 要求 / 応答の フ ィ ル タ リ ン グ
や変換を行 う 標準的な方法です。 サーブ レ ッ ト フ ィ ル タ を使用 し て、 要求 さ れたサーブ レ ッ ト を
呼び出す前に承認を実行す る こ と がで き ます。
サーブ レ ッ ト Enforcer プ ラ グ イ ン を 作成す る 場合は、 Sun の Web サ イ ト か ら jce1_2_2.jar
フ ァ イ ルを ダ ウ ン ロ ー ド し て く だ さ い。 法的な制約に よ り 、 Select Access の イ ン ス ト ー ラ で こ の
フ ァ イ ルを配布す る こ と はで き ません。
ServletFilter ク ラ ス は、 サーブ レ ッ ト フ ィ ル タ の イ ン タ ーフ ェ イ ス を Java Enforcer API に接
続 し ます。 次に、 HTTP 要求変数を使用 し て、 Policy Validator への ク エ リ を実行 し ます。 応答結果
に基づ き 、 ServletFilter は、 エ ラ ー ページ、 ロ グ イ ン ページ、 ア ク セ ス拒否ページのいずれ
か を表示す る か、 要求 さ れた リ ソ ース に対 し て出力の生成を許可 し ます。
ま た、 ServletFilter ク ラ ス は、 今後予想 さ れ る ア ク セ ス に対応す る ために Cookie へシ ン グル
サ イ ン オ ンの nonce を組み込み、 複数 ド メ イ ン シ ン グル サ イ ン オ ン を処理 し ます。 例を使用す る
には、 Java、 サーブ レ ッ ト 、 お よ び HTTP に習熟 し てい る 必要があ り ます。
Java Enforcer API のク ラ ス と ユーテ ィ リ テ ィ
Java Enforcer API の ク ラ ス は、 /shared/EnforcerAPI.jar アーカ イ ブに格納 さ れてい ます。 ま
た、 Enforcer プ ラ グ イ ン は、 /shared/shared.jar に格納 さ れてい る 、 標準的な XML お よ び
ロ グ ク ラ ス を使用す る 必要があ り ます。 CLASSPATH に こ れ ら のアーカ イ ブが含 ま れてい る こ と
を確認 し て く だ さ い。
Java Enforcer API は Enforcer ク ラ ス で構成 さ れてい ます。 Enforcer ク ラ ス は、 Enforcer API の
中心的要素です。Enforcer ク ラ ス は、Java の Enforcer オブジ ェ ク ト を表 し てお り 、Policy Validator
ク エ リ を作成 し 送信す る 方法を提供 し ま す。 ま た、 Policy Validator の応答にア ク セ ス す る 方法 も
提供 し ます。
shared.jar アーカ イ ブには、 次に示す標準的な ク ラ ス が格納 さ れてい ます。
•
Logger: Logger は、 Select Audit をは じ め と す る 、 複数の宛先への メ ッ セージ を記録す る イ
ン タ ーフ ェ イ ス を提供 し ます。
•
XmlElement: XmlElement ク ラ ス は、 汎用の XML ノ ー ド を格納 し ます。
•
Property: Property イ ン タ ーフ ェ イ ス は、 PropertyElement お よ び
PropertyListElement に よ っ て実装 さ れます。
•
PropertyElement: PropertyElement ク ラ ス は、 名前 と 値のペア を格納す る XML 要素を
表 し ます。 値にはあ ら ゆ る タ イ プのデー タ が使用で き ます。
•
PropertyListElement: PropertyListElement ク ラ ス は、PropertyElement と ネ ス ト
さ れた PropertyListElement の リ ス ト を表 し ます。
Enforcer のク ラ スのイ ンポー ト
次の コ ー ド 例は、 イ ン ポー ト す る 必要のあ る Enforcer API の ク ラ ス を示 し てい ま す。 こ れ ら の ク
ラ ス は EnforcerAPI.jar お よ び shared.jar アーカ イ ブに格納 さ れてい ます。
import com.hp.selectaccess.enforcer.*;
90
第5章
import
import
import
import
import
com.hp.selectaccess.util.Logger;
com.hp.selectaccess.util.XmlElement;
com.hp.selectaccess.util.PropertyElement;
com.hp.selectaccess.util.PropertyListElement;
com.hp.selectaccess.util.Property;
ServletFilter ク ラ スおよび ServletTransaction ク ラ ス
次の コ ー ド 例に示す よ う に、 ServletFilter ク ラ ス には、 init() と doFilter() の 2 つの重
要な メ ソ ッ ド があ り ま す。 サーブ レ ッ ト フ レーム ワ ー ク は、 フ ィ ル タ の初回使用時に、 init()
メ ソ ッ ド を呼び出 し て初期化を行い ます。 こ の メ ソ ッ ド は、 設定済み Enforcer プ ラ グ イ ン のオブ
ジ ェ ク ト を作成 し 、 m_enforcer フ ィ ール ド に格納 し ます。 doFilter() メ ソ ッ ド は、 初期化後
に呼び出 さ れ、 各 HTTP 要求を処理 し ます。 次に、 ServletFilter ク ラ ス の基本的な構造を示
し てい ます。
public class ServletFilter implements Filter {
public static final String SERVLET_FILTER_NAME = "ServletFilter";
public static final String ENFORCER_CONF_FILE = "enforcer_conf";
public static final String ENFORCER_DEBUG_LEVEL = "debug_level";
public static final String VIRTUAL_HOSTNAME = "virtual_hostname";
public static final String ENFORCER_HANDLE = "enforcer_handle";
private FilterConfig m_config = null;
private Enforcer m_enforcer = null;
private String m_virtual_hostname = null;
private String m_server_software = null;
public void init(FilterConfig config) throws ServletException { ... }
public void doFilter
(
ServletRequest request,
ServletResponse response,
FilterChain chain
) throws IOException, ServletException { ... }
public void destroy() {m_config = null; m_enforcer = null;}
}
サーブ レ ッ ト の要求のフ ィ ル タ リ ング
doFilter() メ ソ ッ ド は、 ServletTransaction ク ラ ス を使用 し て、 HTTP 要求を処理 し ます。
次の コ ー ド 例は、doFilter() メ ソ ッ ド が ServletTransaction オブジ ェ ク ト に HTTP 要求 と
応答を受け渡 し 、 要求 さ れた リ ソ ー ス へのア ク セ ス の要否を判定す る ために isAuthorized()
メ ソ ッ ド を呼び出す方法を示 し てい ます。 ア ク セ ス が許可 さ れた場合、 フ ィ ル タ チ ェ ーン内の後
続の フ ィ ル タ が実行 さ れ、 要求 さ れたサーブ レ ッ ト に よ っ て HTTP 応答が作成 さ れ ます。 ア ク セ
ス が拒否 さ れ た場合、 ま た は認証 を 必要 と す る 場合は、 isAuthorized() メ ソ ッ ド に よ っ て
HTTP 応答が作成 さ れ ます。
/**
* Filter an HTTP request by creating a servlet transaction,
* and then having it check with the validator to see whether
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
91
* the operation is allowed.
*
*
request
The incoming HTTP request.
*
response
The response being generated.
*
chain
Downstream filters and servlets.
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpReq = (HttpServletRequest) request;
HttpServletResponse httpRes = (HttpServletResponse) response;
try {
ServletTransaction servletTransaction =
new ServletTransaction(httpReq, httpRes, m_virtual_hostname,
m_enforcer);
servletTransaction.setServerSoftware(m_server_software);
承認を
if (servletTransaction.isAuthorized()) {
確認 し ます
chain.doFilter(request, response);
}
}
catch (Exception e) {
m_enforcer.log(Logger.LOG_LEVEL_ERROR,
"ServletFilter error in ServletTransaction: " + e);
}
}
ServletTransaction ク ラ ス
ServletTransaction ク ラ ス は、 WebTransaction ク ラ ス を 拡張し ま す。 WebTransaction
ク ラ ス には、 isAuthorized() と いう 重要なメ ソ ッ ド があ り ま す。 こ のメ ソ ッ ド は承認の要否を
判断し ま す。 承認が必要な 場合、 isAuthorized() は HTTP 要求の値から XML 要求を 作成し 、
Policy Validator に ク エ リ を 行い、 応答を 実行し ま す。 Policy Validator の 応答の 内容に 応じ て、
isAuthorized() メ ソ ッ ド は、allow()、deny()、sendRedirect()、sendBasicAuthPage()
な ど の抽象メ ソ ッ ド を 呼び出し ま す。 ServletTransaction ク ラ ス は、 各メ ソ ッ ド を オーバー
ラ イ ド し て、 サーブレ ッ ト 固有の処理を 実行し ま す。 各メ ソ ッ ド は、 HTTP 応答の出力ス ト リ ーム
を 使用し て、 ロ グ イ ン フ ォ ーム やエラ ー ページを 表示し ま す。 次のコ ード 例は、
ServletTransaction ク ラ ス の基本的な構造と 継承さ れる メ ソ ッ ド を 示し ていま す。
public class ServletTransaction extends WebTransaction {
protected XmlElement
m_query;
protected ValidatorResponse
m_val_response;
... その他の フ ィ ール ド 宣言 ...
public ServletTransaction
(
HttpServletRequest request,
HttpServletResponse response,
92
第5章
String serverName,
Enforcer enforcer
) throws EnforcerException { ... }
public boolean isAuthorized() { ... }
protected
protected
protected
protected
boolean
boolean
boolean
boolean
allow() { ... }
deny() { ... }
sendRedirect(String url) { ... }
sendBasicAuthPage(String realm) { ... }
... その他の内部 メ ソ ッ ド ...
}
Enforcer オブ ジ ェ ク ト の作成
ServletFilter は、 初期化 さ れ る 際に Enforcer オブジ ェ ク ト を作成 し 、 m_enforcer フ ィ ール
ド に格納 し ます。 Enforcer オブジ ェ ク ト は、 URL に危険な文字が含まれていないか ど う かの解析、
承認の要否の判断、 Policy Validator への ク エ リ 、 応答の取得な ど に使用 さ れ ま す。 Enforcer オブ
ジ ェ ク ト は複数の承認要求 を 処理で き る た め、 マルチ ス レ ッ ド 環境で も 安全に使用で き ま す。
ServletFilter ク ラ ス は、 各 HTTP 要求を承認す る 場合に単一の Enforcer オブジ ェ ク ト を使用
し ます。
Enforcer オブ ジ ェ ク ト の新 し い イ ン ス タ ン スのイ ン ス タ ン ス化
新 し い Enforcer オブジ ェ ク ト を イ ン ス タ ン ス化す る 際は、 次の属性を使用す る 必要があ り ます。
•
String saConfigFileName: Select Access 設定フ ァ イ ルの名前。null の場合、 コ ン ス ト ラ ク
タ は デ フ ォ ル ト の 設 定 フ ァ イ ル で あ る <SA_install_path>/selectaccess.conf を
ロ ー ド し ます。
•
String enforcerConfigFileName: Enforcer の設定フ ァ イ ルの名前。 null の場合、 コ ン ス
ト ラ ク タ は <SA_install_path>/bin/enforcer.xml か ら デ フ ォ ル ト の Enforcer XML
フ ァ イ ルを ロ ー ド し ます。
フ ァ イ ル名 を null に設定 し た場合、 管理者は Setup Tool を 実行 し て、 デ フ ォ ル ト の
XML 設定 フ ァ イ ルにパ ラ メ ー タ を 設定で き ま す。 詳細につい て は、 『HP OpenView
Select Access 6.2 イ ン ス ト ール ガ イ ド 』 を参照 し て く だ さ い。
•
String loggingName: ロ グ出力に使用 さ れ る Enforcer のカ ス タ マ イ ズが可能な名前。
•
String enforcerTypeName: Enforcer の種類を識別す る ための、 カ ス タ マ イ ズが可能な文
字列。
•
boolean initLogging: Enforcer の ロ グオ ン / ロ グオ フ を切 り 替え る パ ラ メ ー タ 。
•
int debug_level: デバ ッ グ レベルを設定す る 数値。
各パ ラ メ ー タ の詳細については、 『HP OpenView Select Access 6.2 開発者向け リ フ ァ レ ン ス ガ イ
ド 』 の 第 10 章、 Java Enforcer API を参照 し て く だ さ い。
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
93
サーブ レ ッ ト の初期化
Enforcer オブジ ェ ク ト を作成す る には、 コ ン ス ト ラ ク タ に Enforcer プ ラ グ イ ン 設定フ ァ イ ルを提
供す る 必要があ り ます。 こ の フ ァ イ ルに よ り 、 ポ リ シー ス ト ア 内にあ る Enforcer オブジ ェ ク ト 設
定の場所を特定で き ます。 次の コ ー ド 例に示す よ う に、 ServletFilter の init() メ ソ ッ ド は、
Enforcer プ ラ グ イ ン 設定フ ァ イ ルを サーブ レ ッ ト 設定か ら 抽出 し ます。 enforcer.xml フ ァ イ ル
の詳細は、 87 ページの 「Enforcer API の設定」 を参照 し て く だ さ い。
Enforcer
プ ラ グ イ ン設定
フ ァ イルの名前
新しい
Enforcer を
作成 し ます
public void init(FilterConfig config) throws ServletException {
m_config = config;
ServletContext context = m_config.getServletContext();
m_server_software = context.getServerInfo();
m_virtual_hostname = config.getInitParameter(VIRTUAL_HOSTNAME);
// Try to configure an enforcer handle for this servlet filter.
String enforcerConf = config.getInitParameter(ENFORCER_CONF_FILE);
if (enforcerConf != null) {
int dbg = 0;
String debugLevel =
config.getInitParameter(ENFORCER_DEBUG_LEVEL);
if (debugLevel != null) {
dbg = Integer.parseInt(debugLevel);
}
m_enforcer = new Enforcer(null, enforcerConf,
SERVLET_FILTER_NAME,
"servlet", true, dbg);
}
// If configuration for this filter was not specified, try to inherit
// a handle from the servlet container.
else {
m_enforcer = (Enforcer)context.getAttribute(ENFORCER_HANDLE);
if (m_enforcer == null) {
throw new ServletException("Unable to find/construct enforcer
handle");
}
}
// Clear the enforcer handle's user data character set, since the
// servlet container will be handling character set conversion
m_enforcer.clearUserDataCharacterSet();
}
承認デー タ の抽出
Enforcer オブ ジ ェ ク ト が作成 さ れ る と 、 ServletFilter で要求 を 処理で き る よ う に な り ま す。
doFilter() メ ソ ッ ド は、 ServletTransaction オブジ ェ ク ト を作成 し て、 各 HTTP 要求を処
理 し ま す。 ServletTransaction コ ン ス ト ラ ク タ は、 HTTP 要求を使用 し て、 ポ リ シーの評価
に利用 さ れ る 可能性のあ る すべてのデー タ を抽出 し ま す。 HTTP 要求には、 要求 さ れた リ ソ ー ス
の名前、 HTTP メ ソ ッ ド 、 SSL パ ラ メ ー タ 、 HTTP ヘ ッ ダー、 ブ ラ ウ ザの Cookie な ど が含 ま れ ま
す。 こ の情報を使用 し て、 Policy Validator ク エ リ が作成 さ れ ます。
94
第5章
HTTP 要求の
デー タ を抽出
し ます
SSO Cookie
をチ ェ ッ ク
し ます
public ServletTransaction(HttpServletRequest request,
HttpServletResponse response,
String serverName, Enforcer enforcer) throws EnforcerException
{
super(enforcer, request.getScheme(),
serverName != null ? serverName : request.getServerName(),
request.getServerPort(), UnescapeUrl(request.getRequestURI()),
request.getQueryString(), request.getMethod(),
request.getRemoteAddr());
m_request = request;
m_response = response;
m_app_name = "ServletTransaction";
m_referer = m_request.getHeader(REFERER_HEADER);
m_host_header = m_request.getHeader(HOST_HEADER);
if (m_host_header == null)
m_host_header = m_server_name;
Cookie[] cookies = m_request.getCookies();
if (cookies != null) {
for (int i=0;i<cookies.length;i++) {
if
(cookies[i].getName().equals(DataStrings.AUTH_COOKIE_NAME))
m_auth_cookie = cookies[i].getValue();
if
(cookies[i].getName().equals(DataStrings.REGISTER_COOKIE_NAME))
m_reg_cookie = cookies[i].getValue();
}
}
... 個別化デー タ の初期化 ...
}
承認の必要性の判断
ServletTransaction ク ラ ス の isAuthorized() メ ソ ッ ド に よ っ て、 ア ク セ ス の要否が判定
さ れ ます。 isAuthorized() メ ソ ッ ド は、 Policy Validator への ク エ リ を行 う 前に、 m_enforcer
オブジ ェ ク ト を使用 し て、 承認の必要性を判断 し ます。 次の よ う な ケース では、 承認は行われ ま
せん。
•
Enforcer プ ラ グ イ ン を設定す る こ と がで き ない場合。Policy Validator への接続が行われないた
め、 ア ク セ ス は拒否 さ れ ます。
•
URL に無効な文字が含まれてい る 場合。 無効な文字を含む URL は処理 さ れないため、 要求は
拒否 さ れ ます。 注意すべ き 文字 と し ては、 デ ィ レ ク ト リ 演算子 「.」 な ど があ り ます。
•
Enforcer プ ラ グ イ ン が、 ド メ イ ンへの無制限ア ク セ ス を許可す る よ う に設定 さ れてい る 場合。
•
Enforcer プ ラ グ イ ン が、 フ ァ イ ルへの無制限ア ク セ ス を許可す る よ う に設定 さ れてい る 場合。
•
要求が、 複数 ド メ イ ン シ ン グル サ イ ン オ ンの リ ダ イ レ ク ト の一環 と し て行われてい る 場合。
次の コ ー ド 例では、 こ う し た条件の確認が行われてい ます。
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
95
public boolean isAuthorized() {
if (!m_enforcer.isConfigured()) {
m_enforcer.configure();
// bail out early if we could not configure
if (!m_enforcer.isConfigured())
return deny();
}
不審な URL
if (m_enforcer.isEvilURL(m_path)) {
log(Logger.LOG_LEVEL_WARNING, "rejecting suspicious url '" +
m_path + "'");
disableCaching();
return deny();
}
String full_url = m_protocol + "://" + m_host_header + m_path;
if (m_http_query != null && m_http_query.length() > 1)
full_url = full_url + "?" + m_http_query;
StringBuffer orig_url = new StringBuffer("");
複数 ド メ イ ン
if (isSSORedirectURL(m_http_query, orig_url)) {
SSO
// MD-SSO redirect 2
String r2 = constructSSOAuthURL(m_auth_cookie,
orig_url.toString());
return ssoRedirect(r2);
}
if (m_enforcer.isPassthroughDomain(m_server_name))
return allow();
if (m_enforcer.isIgnoredFile(m_path))
return allow();
... XML ク エ リ の作成 ...
... Policy Validator への ク エ リ ...
... 応答結果の実行 ...
}
複数 ド メ イ ン シ ン グル サ イ ン オ ン の リ ダ イ レ ク ト では、 既存の SSO Cookie か ら 現在の ド メ イ ン
の nonce が抽出 さ れ ます。既存の Cookie か ら 抽出 さ れた nonce は リ ダ イ レ ク ト の URL に追加 さ れ
ます。 こ れに よ り 、 URL を使用 し て nonce を元のサーバーに適切に受け渡 し 、 格納す る こ と がで
き ます。 複数 ド メ イ ン シ ン グル サ イ ン オ ン の詳細は、 89 ページの 「複数 ド メ イ ン シ ン グル サ イ
ン オ ンの実行」 を参照 し て く だ さ い。
Policy Validator 要求の作成
isAuthorized() メ ソ ッ ド は、 承認が必要であ る と 判断 し た場合に、 Policy Validator 要求を作成
し ます。 XML ク エ リ が XmlQueryInit() メ ソ ッ ド に よ っ て初期化 さ れ ます。 こ の結果、 Policy
Validator ク エ リ の要素が作成 さ れ、 サービ ス、 パ ス、 お よ び ク エ リ ID のプ ロ パテ ィ が追加 さ れま
す。 サービ スお よ びパ ス のプ ロ パテ ィ は、 Policy Validator が リ ソ ー ス のセ キ ュ リ テ ィ ポ リ シーを
96
第5章
特定す る 際に使用 さ れ ます。 ク エ リ ID は、 複数の監査 ロ グ を識別す る 場合に有効です。 その他の
プ ロ パテ ィ は、 次の コ ー ド 例に示す よ う に、 appendPropertyValue() メ ソ ッ ド に よ っ て追加
さ れ ます。Policy Validator 要求には、 あ ら ゆ る プ ロ パテ ィ を追加す る こ と がで き ます。Enforcer API
は、 標準的なプ ロ パテ ィ の定数を提供 し てい ます。
public boolean isAuthorized() {
... 承認の必要性の判断 ...
m_query = Enforcer.XmlQueryInit(m_service, m_path);
if (m_enforcer.isEnableCookies()) {
m_query.appendPropertyValue(DataStrings.ENFORCER_NATIVE_NONCE,
DataStrings.ENFORCER_ENABLE);
}
m_query.appendPropertyValue(DataStrings.ENFORCER_PROTOCOL,
m_protocol);
m_query.appendPropertyValue(DataStrings.ENFORCER_SRCIP,
m_client_addr);
if (m_auth_cookie != null && !m_auth_cookie.equals("logout"))
m_query.appendPropertyValue(DataStrings.ENFORCER_NONCE,
m_auth_cookie);
if (m_reg_cookie != null)
m_query.appendPropertyValue(DataStrings.ENFORCER_REGISTER_NONCE,
m_reg_cookie);
if (!m_enforcer.getQueryLevel().equals(DataStrings.QUERY_MINIMAL)) {
if (m_http_query != null && m_http_query.length() > 1) {
try {
m_query.appendPropertyValue(DataStrings.ENFORCER_HTTP_QUERY,
m_http_query);
addUrlEncoded(DataStrings.ENFORCER_HTTP_QUERY_LIST,
m_http_query);
} catch (EnforcerException e) { }
}
m_query.appendPropertyValue(DataStrings.ENFORCER_METHOD,
m_method);
}
if (m_enforcer.getQueryLevel().equals(DataStrings.QUERY_MAXIMAL)) {
if (m_server_software != null && m_server_software.length() > 1)
要求の
プ ロパテ ィ を
追加 し ます
{
m_query.appendPropertyValue(DataStrings.ENFORCER_SERVER,
m_server_software);
SSO の nonce
を追加 し ます
}
}
StringBuffer sso_nonce = new StringBuffer("");
if (isSSOAuthURL(full_url, sso_nonce)) {
// set SSO nonce in query before sending query to validator
m_query.setChildStringValue(DataStrings.ENFORCER_NONCE,
sso_nonce.toString());
}
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
97
... その他のプ ロ パテ ィ の追加 ...
... Policy Validator への ク エ リ ...
... 応答結果の実行 ...
}
ア イ デ ン テ ィ テ ィ がすで に認証 さ れ て い る 場合は、 シ ン グ ル サ イ ン オ ン の nonce を 含む認証
Cookie が存在 し ます。 使用可能な nonce が存在す る 場合、 要求に組み込む必要があ り ます。 Policy
Validator は nonce を使用 し て、 すでに認証 さ れてい る ア イ デン テ ィ テ ィ を識別 し ま す。 シ ン グル
サ イ ン オ ンのサポー ト については、 88 ページの 「シ ン グル サ イ ン オ ン の nonce の処理」 を参照 し
て く だ さ い。
Policy Validator へのク エ リ
Policy Validator への ク エ リ の作成後、 XmlQuerySend() メ ソ ッ ド を 使用 し て、 ク エ リ を Policy
Validator に送信 し ます。 こ の メ ソ ッ ド は、 Policy Validator の応答を受け取 る ま で、 通信を遮断 し ま
す。 XML 応答お よ び リ タ ーン コ ー ド は ValidatorResponse に格納 さ れ ます。
m_val_response = m_enforcer.XmlQuerySend(m_query);
Policy Validator の応答結果の実行
Policy Validator に ク エ リ を行っ た後、 応答を処理 し て判定結果を実行す る 必要があ り ます。
getRetVal() メ ソ ッ ド に よ っ て、 要求の許可ま たは拒否、 エ ラ ーの有無 と い っ た結果の確認が
行われ ます。 getXmlElement() メ ソ ッ ド に よ っ て、 Policy Validator の応答を含んだ XML 要素
が返 さ れ ます。 98 ページの 「Policy Validator 応答の処理」 には、 getRetVal() お よ び
getXmlElement() メ ソ ッ ド の使用方法が示 さ れてい ます。
allowedByValidator() メ ソ ッ ド は、 getRetVal() メ ソ ッ ド を 使用し て、 要求の可否を 判定
し ま す。 要求が許可さ れた場合、 allowedByValidator() メ ソ ッ ド は、 シン グ ル サイ ン オン お
よ び登録の nonce を チェ ッ ク し ま す。 こ れら は、 getXmlElement() メ ソ ッ ド によ っ て 返さ れる
XML 応答から 取得さ れま す。 nonce が存在する 場合は、 HTTP Cookie に追加さ れま す。 それ以降の
ト ラ ン ザク ショ ン では、 Cookie を 使用し てア イ デン ティ ティ を 識別し ま す。 シン グ ル サイ ン オン
のサポート については、 88 ページの「 シ ン グル サ イ ン オ ン の nonce の処理」 を 参照し てく ださ い。
要求が拒否 さ れた場合、 allowedByValidator() メ ソ ッ ド は、 XML 応答に認証 ヒ ン ト が記載
さ れていないか ど う か を確認 し ます。 認証 ヒ ン ト はア イ デン テ ィ テ ィ の認証方式を Enforcer プ ラ
グ イ ン に指示 し ます。 Enforcer プ ラ グ イ ン は、 そのプ ロ パテ ィ を使用 し て、 ア イ デン テ ィ テ ィ に
送信す る ロ グ イ ン フ ォ ーム の種類を決定 し ます。
Policy Validator 応答の処理
次の コ ー ド 例には、 Policy Validator 応答を処理す る ための getRetVal() お よ び
getXmlElement() メ ソ ッ ド の使用方法が示 さ れてい ます。
public boolean allowedByValidator() {
... Policy Validator への ク エ リ ...
98
第5章
Validator の
リ タ ーン
コ ー ド を確認
if (m_val_response.getRetVal() == Enforcer.ENFORCER_ERROR_ACTION) {
return false;
}
... 個別化の設定 ...
XML 応答全体
を取得 し ます
m_reply = m_val_response.getXmlElement();
String nonce = m_reply.getChildStringValue
(DataStrings.ENFORCER_NONCE)
if (nonce != null) {
setCookie(DataStrings.AUTH_COOKIE_NAME, nonce, "/",
m_enforcer.getCookieDomainName(), -1);
}
String registrationCookie =
m_reply.getChildStringValue(DataStrings.ENFORCER_REGISTER_NONCE)
if (registrationCookie != null) {
String lifetime = getStringFromReply
(DataStrings.ENFORCER_REGISTER_LIFE);
int expiry = -1;
// by default, make it a session cookie
if (lifetime != null && lifetime.length() > 0) {
expiry = Integer.parseInt(lifetime);
}
setCookie(DataStrings.REGISTER_COOKIE_NAME, registrationCookie,
nonce を
確認 し ます
"/",
m_enforcer.getCookieDomainName(), expiry);
}
if (m_val_response.getRetVal() == Enforcer.ENFORCER_ALLOW_ACTION) {
return true;
}
m_auth_hint = m_enforcer.getAuthHint(m_reply, m_pass_hint);
if (m_auth_hint != null) {
m_form = m_enforcer.getTransformedForm(m_auth_hint, null);
}
else {
// zero auth_hints, so check for generic form data
m_form_hint = m_reply.getChild(DataStrings.ENFORCER_FORM_DATA);
if (m_form_hint != null) {
m_form = m_enforcer.getTransformedForm(m_form_hint, null);
}
}
return false;
ログ イ ン要求を
確認 し ます
}
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
99
HTTP 応答への Web Cookie の設定
Policy Validator の応答にシ ン グル サ イ ン オ ン nonce が含ま れてい る 場合、 Web Cookie に nonce が
組み込まれ、 後続の Web ト ラ ンザ ク シ ョ ン でのア イ デン テ ィ テ ィ の再認証が不要にな り ます。 次
の コ ー ド 例は、 フ ィ ル タ やサーブ レ ッ ト を使用 し た Web Cookie の設定方法を示 し てい ます。 こ の
コ ー ド は、 あ ら ゆ る 種類の Cookie の作成で使用 さ れ ます。
/**
* formats a cookie in accordance with rfc 2109, and sends a Set-cookie
* header to the Web client
*
* param
name
the cookie name
* param
value
the cookie value
* param
path
the cookie path, typically "/"
* param
domain
the cookie domain, null to disable
* param
duration
the cookie lifetime in seconds, -1 for session
cookies, 0 for delete now
*/
protected void setCookie(String name, String value, String path,
String domain, int duration)
{
Cookie cookie = new Cookie(name, value);
if (path != null) {
cookie.setPath(path);
}
if (domain != null && domain.length() > 0) {
cookie.setDomain(domain);
}
cookie.setMaxAge(duration);
m_response.addCookie(cookie);
}
許可 / 拒否 / ロ グ イ ンの メ ッ セージの表示
allowedByValidator() メ ソ ッ ド が true を返 し た場合、 WebTransaction フ レーム ワ ー ク は
抽象 メ ソ ッ ド allow() を呼び出 し ます。 ア イ デン テ ィ テ ィ の認証が必要な場合は、
WebTransaction は ロ グ イ ン フ ォ ーム の名前を抽出 し 、抽象 メ ソ ッ ド sendDynamicForm() を
呼び出 し て、 ロ グ イ ン ページ を表示 し ます。 ア ク セ ス が拒否 さ れ、 認証 ヒ ン ト が提示 さ れなか っ
た場合は、 WebTransaction フ レ ーム ワ ー ク は抽象 メ ソ ッ ド deny() を呼び出 し ま す。 次に示
す よ う に、 こ れ ら は ServletTransaction で定義 さ れます。
/**
* Send a dynamic form to the Web client
*
* param
url
an optional redirect or refresh URL to send in the form
* return
false
*/
動的な ログ イ ン
フ ォ ームを送信 protected boolean sendDynamicForm(String url) {
し ます
if (url != null) {
String header = "1; URL=" + url;
100
第5章
m_response.addHeader(REFRESH_HEADER, header);
}
try {
java.io.PrintWriter out = m_response.getWriter();
m_response.setContentType(HTML_CONTENT_TYPE);
if (m_form == null) {
m_form = FORM_ERROR;
}
out.println(m_form);
out.close();
}
catch (java.io.IOException e) {
logError("sendDynamicForm failed: " + m_form);
sendError(HttpServletResponse.SC_FORBIDDEN);
}
return false;
}
/**
* Send an http-basic-auth page to the Web client
*
* param
realm
the authentication realm
* return
false
HTTP 基本認証を
*/
使用 し て ログ イ ン
protected
boolean sendBasicAuthPage(String realm) {
要求を送信 し ます
String header = "Basic realm=\"" + realm + "\"";
m_response.addHeader(AUTHENTICATE_HEADER, header);
sendError(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
要求 さ れた
リ ソ ース を
送信 し 、 保存 さ れ
た状態情報を
追加 し ます
/**
* tell the Web server framework we got "access allowed" for this request
*
* return
true
*/
protected boolean allow() {
if (EXPORT_POST_DATA) {
String data = getPostDataBuffer();
if (data.length() > 0) {
Map postDataMap = new HashMap();
m_request.setAttribute(SA_POSTDATA, postDataMap);
postDataMap.put("posted", getPostDataBuffer());
}
}
return true;
}
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
101
/**
* Send the Web client an "access denied" reply.
*
* return
false
*/
ア ク セス拒否
ページ を protected boolean deny() {
送信 し ます
if (setDenyViaForm()) {
sendDynamicForm(null);
}
else {
sendError(HttpServletResponse.SC_FORBIDDEN);
}
return false;
}
複数 ド メ イ ン シ ングル サイ ン オ ン
認証に成功 し た後は、 Policy Validator 応答内の nonce に よ り 、 シ ン グル サ イ ン オ ン が維持 さ れ ま
す。 nonce は暗号化 さ れた ト ー ク ン です。 Web ブ ラ ウ ザの Cookie に nonce を組み込む こ と に よ り 、
ブ ラ ウ ザはそれ以降のすべての要求に nonce を含め ます。 Web Cookie は特定の ド メ イ ンに関連付
け ら れ る ため、 シ ン グル サ イ ン オ ンは 1 つの ド メ イ ン内でのみ行われ ます。
複数の ド メ イ ン に ま たが る シ ン グル サ イ ン オ ン を行 う 場合、 Enforcer プ ラ グ イ ン は次の手順を実
行す る 必要があ り ます。
1
参照元サイ ト が複数ド メ イ ン シン グ ル サイ ン オン のリ ス ト に含ま れている こ と を 確認し ま す。
2
ブ ラ ウ ザを参照元サ イ ト に リ ダ イ レ ク ト し 、 nonce を要求 し ます。
3
参照元サ イ ト は nonce を URL に含め、 元のサ イ ト にブ ラ ウ ザを リ ダ イ レ ク ト し ます。
4
こ の ド メ イ ンの Cookie に nonce を組み込みます。
5
ア イ デン テ ィ テ ィ を元の URL に リ ダ イ レ ク ト し ます。
103 ページの 「複数 ド メ イ ン シ ン グル サ イ ン オ ン の実行」 は、 複数 ド メ イ ン シ ン グル サ イ ン オ
ン の実行方法の例を示 し てい ます。 Policy Validator 要求が拒否 さ れた場合、 isAuthorized() メ
ソ ッ ド は、ア イ デン テ ィ テ ィ の識別に複数 ド メ イ ン シ ン グル サ イ ン オ ンが使用可能か ど う か を確
認 し ます。 使用可能であ る 場合、 メ ソ ッ ド はア イ デン テ ィ テ ィ を参照元サ イ ト に リ ダ イ レ ク ト し 、
シ ン グル サ イ ン オ ン の nonce を要求 し ます。
初めて要求を受け取っ た場合、 isAuthorized() メ ソ ッ ド は、 その要求が複数 ド メ イ ン シ ン グ
ル サ イ ン オ ン の nonce に関す る も のか ど う か を確認 し ます。 該当す る 場合は、 nonce を含む URL
を作成 し 、 ク ラ イ ア ン ト を元のサ イ ト に リ ダ イ レ ク ト し ます。
要求が Policy Validator に よ っ て許可 さ れた場合、isAuthorized() メ ソ ッ ド は、要求 さ れた URL
に複数 ド メ イ ン シ ン グル サ イ ン オ ンの nonce が含まれてい る か ど う か を確認 し ます。 該当す る 場
合、 メ ソ ッ ド はその nonce の新 し い Cookie を作成 し 、 要求 さ れた リ ソ ースへのア ク セ ス を提供 し
ます。
102
第5章
複数 ド メ イ ン シ ン グル サイ ン オ ンの実行
次の コ ー ド 例は、Enforcer プ ラ グ イ ン の複数 ド メ イ ン シ ン グル サ イ ン オ ン の一般的な実行方法を
示 し てい ます。
public boolean isAuthorized() {
... 承認の必要性の判断 ...
ド メ イ ンか ら
nonce を送 り ます
if (isSSORedirectURL(m_http_query, orig_url)) {
String r2 = constructSSOAuthURL(m_auth_cookie,
orig_url.toString());
return ssoRedirect(r2); // MD-SSO redirect 2
}
... Policy Validator ク エ リ の作成 ...
... Policy Validator への ク エ リ ...
boolean isAllowed = allowedByValidator();
if (isAllowed) {
sso_nonce = new StringBuffer("");
if (isSSOAuthURL(full_url, sso_nonce)) {
String r3 = constructSSOOrigURL(m_path, m_http_query);
setCookie(DataStrings.AUTH_COOKIE_NAME, sso_nonce.toString(),
"/",
m_enforcer.getCookieDomainName(), -1);
return sendAcceptedPage(r3);
// MD-SSO redirect 3
}
return allow();
}
if (couldSSOHelp(m_reply, m_referer, full_url)) {
String r1 = constructSSORedirectURL(m_referer, full_url);
return ssoRedirect(r1);
// MD-SSO redirect 1
}
元の URL に
リ ダイレ ク ト
し ます
参照元から
nonce が提供
可能かど う かを
確認 し ます
... ロ グ イ ン ページの表示 ...
return deny();
// sends deny.html or 403 error
}
複数 ド メ イ ン シ ン グル サイ ン オ ンの メ ソ ッ ド
次に示す メ ソ ッ ド は、 複数 ド メ イ ン シ ン グル サ イ ン オ ン機能のヘルパー メ ソ ッ ド です。 こ こ で
は、 参考 と し て記載 し てい ます。
/**
* tests if the referring site is in our multi domain SSO protected sites
list
*
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
103
* referer
the referring URL
* return
true if the site is SSO-protected, false otherwise
*/
public boolean isDomainProtected(String referer) {
boolean result = m_enforcer.isDomainProtected(referer);
return result;
}
/**
* create the SSO redirect 1 URL, which requests that the next server
* sends back a nonce
*
* referer
the referring URL
* currentURL
the current URL
* return
the redirect URL
*/
public String constructSSORedirectURL(String referer, String currentURL)
{
StringBuffer buf = new StringBuffer("");
String url = currentURL.replaceFirst("\\?", "&");
// new url has referer URL prepended and the current URL appended to
the SSO tag
buf.append(referer);
buf.append("?");
buf.append(SSO);
buf.append("=");
buf.append(url);
return buf.toString();
}
/**
* create the SSO redirect 2 URL, which contains nonce
*
* nonce
the current cookie
* currentURL
the current URL
* return
the redirect URL
*/
public String constructSSOAuthURL(String nonce, String currentURL) {
StringBuffer buf = new StringBuffer("");
String delimiter = "?";
String url = currentURL.replaceFirst("\\&", "?");
if (!url.equals(currentURL))
delimiter = "&";
String value = NO_NONCE;
if (nonce != null && isDomainProtected(currentURL))
value = nonce;
// new url has referer URL prepended and the current URL appended to
the SSO tag
104
第5章
buf.append(url);
buf.append(delimiter);
buf.append(SSO_AUTH_COOKIE_NAME);
buf.append("=");
buf.append(value);
return buf.toString();
}
/**
* create the SSO redirect 3 URL, which sends browser back to the
original URL
*
* currentPath
the filename component of the current URL
* http_query
the current http_query
* return
the redirect URL
*/
public String constructSSOOrigURL(String currentPath, String http_query)
{
StringBuffer buf = new StringBuffer("");
buf.append(currentPath);
int index = http_query.indexOf(SSO_AUTH_COOKIE_NAME);
if (index > 0) {
buf.append("?");
buf.append(http_query.substring(0, index-1));
}
return buf.toString();
}
/**
* tests if this request contains an SSO redirect desiring a nonce
*
* url
the current URL
* orig_url
the original url
* return
true if we are currently at a RedirectURL,
*
and need to do MD-SSO redirect 2
*/
public boolean isSSORedirectURL(String url, StringBuffer orig_url) {
if (url == null)
return false;
int index = url.indexOf(SSO);
if (index >= 0) {
if (orig_url != null)
orig_url.append(url.substring(index + SSO.length() + 1));
return true;
}
return false;
}
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
105
/**
* tests if this request contains an SSO nonce
*
* url
the current URL
* nonce
the current cookie
* return
true if we are currently at an AuthURL,
*
and need to do MD-SSO redirect 3
*/
public boolean isSSOAuthURL(String url, StringBuffer nonce) {
int index = url.indexOf(SSO_AUTH_COOKIE_NAME);
if (index > 0) {
if (nonce != null)
nonce.append(url.substring(index +
SSO_AUTH_COOKIE_NAME.length() + 1));
return true;
}
return false;
}
/**
* tests if multi-domain SSO should be attempted for this request
*
* reply
the validator's XML reply
* referer
the referring URL
* url
the current URL
* return
true if validator denied because it needs auth and
MD-SSO
*
could help, so do MD-SSO redirect 1
*/
public boolean couldSSOHelp(XmlElement reply, String referer, String
url) {
if (referer == null || ! isDomainProtected(referer))
return false;
// referer is not a protected domain
if (isSSOAuthURL(url, null))
return false;
// prevent loops due to failed auth
if (isSSORedirectURL(referer, null))
return false;
// prevent double-redirect
final String SKIP_STRING
= "https://";
int slash = referer.indexOf('/', SKIP_STRING.length());
String Website = referer.substring(0, slash + 1).toLowerCase();
String url2 = url.toLowerCase();
if (url2.startsWith(Website))
return false;
// referral came from within same site
if (m_enforcer.replyNeedsAuth(reply))
return true;
// SSO could provide the auth we need
return false;
}
106
第5章
サン プル Web ア プ リ ケーシ ョ ンへの Servlet Filter の配置
ServletFilter を使用す る には、 Web サーバーま たはアプ リ ケーシ ョ ン サーバーに フ ィ ル タ を
配置す る 必要があ り ま す。 こ の配置方法については、 『HP OpenView Select Access 6.2 ネ ッ ト ワ ー
ク 統合ガ イ ド 』 の 第 6 章、 「Servlet Engine の統合」 を参照 し て く だ さ い。
C/C++ Enforcer API を使用 し た Enforcer プ ラ グ イ ンの作成
こ のセ ク シ ョ ン では、 C/C++ Enforcer プ ラ グ イ ン の作成方法を説明 し ます。 次の各項目について
説明 し ます。
•
Enforcer オブジ ェ ク ト の初期化
•
承認デー タ の抽出
•
Policy Validator 要求の作成
•
Policy Validator への ク エ リ
•
Policy Validator の判定結果の実行
•
複数 ド メ イ ン シ ン グル サ イ ン オ ン の実行
•
Apache プ ラ グ イ ン の イ ン ス ト ール
Apache Enforcer プ ラ グ イ ンの例
Apache 2 Enforcer プ ラ グ イ ン は Apache Web サーバーのプ ラ グ イ ン です。Apache 2 Enforcer プ ラ グ
イ ン は、 Apache API を使用 し て、 Web サーバーへのア ク セ ス を制御 し ます。 こ の Enforcer プ ラ グ
イ ン は、 Apache API を Enforcer API に接続 し ます。 Apache 2 Enforcer プ ラ グ イ ン は、 Enforcer API
を使用 し て Policy Validator への ク エ リ を行い、 要求の可否を判定 し ます。 ま た、 応答結果に基づ
き 、 エ ラ ー ページ、 ロ グ イ ン ページ、 ア ク セ ス拒否ページ、 要求 さ れた URL のいずれか を表示
し ます。 Apache 2 Enforcer プ ラ グ イ ン は、 Web Cookie に nonce を組み込む こ と に よ り 、 シ ン グル
サ イ ン オ ン を サポー ト し ます。 ま た、 複数 ド メ イ ン シ ン グル サ イ ン オ ン も サポー ト し ます。
例を使用す る には、 C、 Apache API、 お よ び HTTP 要求に習熟 し てい る 必要があ り ます。
Apache API が実行す る タ ス ク
1
起動時に、 httpd.conf 設定フ ァ イ ルで指定 さ れたモジ ュ ールを ロ ー ド し ます。
2
各モジ ュ ールを ロ ー ド す る 際、 登録情報を サーバーに受け渡 し ます。 情報には次の よ う な も
のがあ り ます。
3
a
モジ ュ ールの初期化 と ク リ ーン ア ッ プのハン ド ラ を指定す る 情報。
b
対象 と な る 各 HTTP ト ラ ンザ ク シ ョ ンの フ ェーズお よ び コ ン テ ン ツ の種類を示す情報。
Apache 2 Enforcer プ ラ グ イ ン の場合、 こ の情報には、 ア ク セ ス制御フ ェーズで処理内容
が収集 さ れ る こ と が明記 さ れ ます。 こ の フ ェーズで、 プ ラ グ イ ンは Plicy Validator への ク
エ リ を行い、 要求の可否を確認 し ます。
Apache 2 Enforcer プ ラ グ イ ン が ロ ー ド さ れ る と 、 次の 4 つの メ ソ ッ ド をサーバーに受け渡 し
ます。
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
107
a
ア ク セ ス制御ハン ド ラ : こ のハン ド ラ が呼び出 さ れ る と 、 Apache Web サーバーは、 要求
お よ び環境に関 し てサーバーが所有す る すべての情報を含んだ構造をハン ド ラ に受け渡
し ます。 ハン ド ラ は、 サーバーの動作お よ び後続の処理を制御す る ため、 こ の構造を確
認 し 、 必要に応 じ て修正を行い ます。 こ のモジ ュ ールは Policy Validator 要求を作成 し て、
Policy Validator に ク エ リ を行い ます。 続いて応答結果を処理 し 、 ポ リ シーの判定結果を
実行 し ます。
b
モジ ュ ール初期化指定子 : モジ ュ ール全体を セ ッ ト ア ッ プす る 際に 1 度だけ呼び出 さ れ
ます。 Apache 2 Enforcer プ ラ グ イ ン は、 共有 Enforcer オブジ ェ ク ト を作成 し て、 Policy
Validator と の長時間にわた る ソ ケ ッ ト 接続を確立 し ます。 こ れに よ り 、 SelectAccess での
遅延を最小限に抑え ます。
c
子プ ロ セ ス初期化指定子 : 要求を処理す る ために Apache Web サーバーが実行す る 、 すべ
ての子プ ロ セ ス のモジ ュ ールを初期化す る 際に呼び出 さ れ ます。
d
ク リ ーン ア ッ プ メ ソ ッ ド : 各プ ロ セ ス を終了す る 際、 ク リ ーン ア ッ プのために呼び出 さ
れます。
複数のセキ ュ リ テ ィ メ カ ニズ ム ( ネ イ テ ィ ブな HTTP 認証な ど ) を使用す る よ う に Apache サー
バーを設定す る こ と も で き ます。 た と えば、 あ る メ カ ニズ ム で、 Select Access が ロ グ イ ン ページ
やエ ラ ー ページ を表示 し ない よ う に指定 さ れてい る ケース を考え てみます。 こ れを回避す る ため
に、 Apache 2 Enforcer プ ラ グ イ ン では動的な コ ン テ ン ツ を使用 し て、 ロ グ イ ンやチ ャ レ ン ジ用の
フ ォ ーム、 ア ク セ ス拒否ページな ど を表示 し ます。
C/C++ Enforcer API のク ラ ス と ユーテ ィ リ テ ィ
C/C++ Enforcer API の 中 心 に な る の は EnforcerHandle ク ラ ス で す。 こ の ク ラ ス は、 Policy
Validator と の通信で使用 さ れ る Enforcer オブジ ェ ク ト を表 し ます。EnforcerHandle へのポ イ ン
タ は EnforcerInit() メ ソ ッ ド の呼び出 し に よ っ て返 さ れ ます ( 詳細は後述 )。
Select Access は、 Policy Validator 要求を作成 し 、 Policy Validator 応答を処理す る 際に使用す る 次の
よ う な XML ク ラ ス を提供 し ます。
108
•
XmlParser: こ の ク ラ ス は メ モ リ ま たはフ ァ イ ルのブ ロ ッ ク を解析 し 、 XML ド キ ュ メ ン ト ツ
リ ーを作成 し ます。 Select Access はすべての設定、 要求、 お よ び応答に対 し て XML ド キ ュ メ
ン ト を作成す る ため、 通常、 こ の ク ラ ス を直接使用す る 必要はあ り ません。
•
XmlTreeNode: こ の ク ラ ス は解析 さ れた XML ド キ ュ メ ン ト の XML ノ ー ド を格納 し 、 XML
属性への容易な ア ク セ ス を提供 し ます。 一般的には、 PropertyListElement ク ラ スお よ び
PropertyElement ク ラ ス を使用 し て、 XML デー タ にア ク セ ス し ます。
•
PropertyElement: こ の ク ラ ス は名前 と 値のペア を格納 し ます。 PropertyElement は、
Select Access に よ っ て定義 さ れ る XML 要素の 1 つです。 PropertyElement タ グには、 名前
と 値のペアの名称を識別す る ための name と 呼ばれ る 属性が必要です。値は開始 タ グ と 終了 タ
グ の間のデー タ と し て格納 さ れ ま す。 た と えば、 赤色に対す る 名前 と 値のペ ア を 格納す る
PropertyElement は、 <PROPERTY NAME="color">red</PROPERTY> と な り ます。
•
PropertyListElement: こ の ク ラ ス は 0 以上の PropertyElement タ グ を含む XML ノ ー
ド を格納 し ます。 PropertyListElement にプ ロ パテ ィ リ ス ト が格納 さ れ る 場合、 プ ロ パ
テ ィ リ ス ト はネ ス ト す る こ と がで き ます。 PropertyListElement の例 と し ては、
<PROPERTYLIST NAME="colorSet"> <PROPERTY NAME="color">red</
PROPERTY></PROPERTYLIST> な ど があ り ます。
第5章
Enforcer プ ラ グ イ ン は、 ロ グ を サポー ト し 、 例外を処理 し 、 Select Access の文字列お よ び メ モ リ
ユーテ ィ リ テ ィ を活用す る 必要があ り ます。 ほ と ん ど のプ ラ グ イ ンは、 次に示す Select Access の
ク ラ スお よ びユーテ ィ リ テ ィ と 通信を行い ます。
•
Logger: Logger ク ラ ス は Select Audit に対す る イ ン タ ーフ ェ イ ス を提供 し ます。 こ の ク ラ ス
は複数レベルの ロ グ、 すなわち DEBUG、 INFO、 WARNING、 ERROR、 お よ び FATAL をサポー
ト し ます。
•
EnforcerException: こ の ク ラ ス は Enforcer プ ラ グ イ ン のすべての例外に対す る 基本 ク ラ
ス です。
•
enforcer_sys.h: こ のヘ ッ ダー フ ァ イ ルは SYS_STRDUP、STREQ な ど のプ ラ ッ ト フ ォ ーム
に依存 し ない文字列操作用マ ク ロ を定義 し ます。 プ ラ グ イ ン では、 文字列を操作す る 際に こ
れ ら のマ ク ロ を使用す る 必要があ り ます。
Enforcer ラ イ ブ ラ リ の組み込み
次の コ ー ド 例に示す よ う に、Enforcer プ ラ グ イ ン を作成す る 際、プ ラ グ イ ン には Enforcer API ヘ ッ
ダーを組み込む必要があ り ます。 Apache 2 Enforcer プ ラ グ イ ン は、 複数のプ ラ ッ ト フ ォ ームお よ
び Apache API の複数のバージ ョ ン ( バージ ョ ン 1.3 お よ び 2.0) を サポー ト す る よ う に設計 さ れて
い ます。 コ ー ド をわか り やす く す る ため、 例には、 Apache Web サーバー API の以前のバージ ョ ン
に固有の コ ー ド は含めてい ません。
/*
* mod_enforcer.c - An Apache security module using the hp Enforcer API
*
* In access control phase [#3], enforcer_check() queries the validator
* using the Enforcer API to see if request is allowed.
* If the request requires authentication a special
* response is sent to the client, and we return DONE
* to exit the apache request loop.
*/
#include
#include
#include
#include
#include
#include
<enforcer.h>
<enforcer_sys.h>
<XmlTreeNode.h>
"mod_enforcer.h"
<enforcer_Web.h>
"auto_free.h"
#if defined(SYS_WINDOWS)
# include "enforcer_load.h"
# ifdef _DEBUG
# ifdef ORACLE_APACHE
#
define MODULE_NAME "oracle_apache_Web32d.dll"
# else
#
define MODULE_NAME "apache_Web32d.dll"
#endif
# else
# ifdef ORACLE_APACHE
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
109
#
define MODULE_NAME "oracle_apache_Web32.dll"
# else
#
define MODULE_NAME "apache_Web32.dll"
# endif
# endif
#endif
EnforcerHandle *Enforcer_Handle = NULL;
static void enforcer_init(void);
Enforcer オブ ジ ェ ク ト の作成
Enforcer オブジ ェ ク ト は Policy Validator と の通信に使用 さ れ ます。Enforcer オブジ ェ ク ト を作成す
る 際は、 Enforcer API を 初期化す る 必要が あ り ま す。 Enforcer API を 初期化す る 場合、 Apache 2
Enforcer プ ラ グ イ ン は、Web サーバーの起動時に EnforcerConfigInit() メ ソ ッ ド を呼び出 し
ます。EnforcerConfigInit() メ ソ ッ ド は、enforcer.xml フ ァ イ ルを使用 し て、Enforcer API
を 設 定 し ま す。 設 定 フ ァ イ ル の 場 所 が 示 さ れ て い な い 場 合、 Enforcer API は デ フ ォ ル ト の
enforcer.xml フ ァ イ ルを検索 し ます。
デフ ォ ル ト では、 Enforcer API は、 プ ラ グ イ ン名に よ っ て使用す る enforcer.xml フ ァ イ ルを識
別 し ま す。 た と えば、 プ ラ グ イ ン 名が 「apache」 で あ る 場合、 Enforcer API は <SA_Install>/
bin/enforcer_apache.xml フ ァ イ ルを検索 し ます。
Windows プ ラ ッ ト フ ォ ーム では、 さ ら に呼び出 し を行っ て、 Enforcer プ ラ グ イ ン の ラ イ ブ ラ リ を
ロ ー ド し 、 レ ジ ス ト リ キーを作成す る 必要があ り ます。
初期化
次の コ ー ド 例は、 Enforcer API の初期化方法を示 し てい ます。
static int mod_enforcer_initialized = 0;
EnforcerHandle *Enforcer_Handle = NULL;
/*
* initializes the Enforcer API
*/
static void enforcer_init(void){
static const char * loggingName =
ENFORCER_COMPANY_SHORT_NAME " " ENFORCER_PRODUCT_NAME " Apache "
ENFORCER_SERVER_PLUGIN_NAME;
#if defined(SYS_WINDOWS)
static const char * dllNames[] = { NULL };
if (! EnforcerLoadLibraries(MODULE_NAME, dllNames, loggingName)) {
fprintf(stderr, "Failed to load enforcer libraries\n");
exit(1);
}
EnforcerCreateRegistryKeys(MODULE_NAME, loggingName);
#endif
if (!EnforcerInit()) {
EnforcerLog(ENFORCER_LOG_ERROR, ">#<EnforcerInit error");
110
第5章
return;
}
Enforcer_Handle = EnforcerConfigInit(NULL, loggingName, "apache");
if(Enforcer_Handle == NULL) {
EnforcerLog(ENFORCER_LOG_ERROR, ">#<EnforcerConfigInit error");
return;
}
mod_enforcer_initialized = 1;
}
承認の必要性の判断
Apache の初期化モジ ュ ールが終了 し た時点で、 Web サーバーでは HTTP 要求を処理で き る よ う に
な り ま す。 enforcer_check() メ ソ ッ ド が Apache サーバー フ レ ーム ワ ー ク に よ っ て呼び出 さ
れ、 まず、 要求 さ れた リ ソ ース に対す る 承認が必要であ る こ と を確認 し ます。 次の よ う な ケース
では、 承認は行われません。
•
Enforcer API を設定す る こ と がで き ない場合。 Policy Validator への接続が行われないため、 ア
ク セ ス は拒否 さ れ ます。
•
URL に無効な文字が含まれてい る 場合。 無効な文字を含む URL は処理 さ れないため、 要求は
拒否 さ れ ます。 無効な文字 と し ては、 デ ィ レ ク ト リ 演算子 「.」 な ど があ り ます。
•
Enforcer プ ラ グ イ ン が、 ド メ イ ンへの無制限ア ク セ ス を許可す る よ う に設定 さ れてい る 場合。
•
Enforcer プ ラ グ イ ン が、 フ ァ イ ルへの無制限ア ク セ ス を許可す る よ う に設定 さ れてい る 場合。
•
要求が、 複数 ド メ イ ン シ ン グル サ イ ン オ ンの リ ダ イ レ ク ト の一環 と し て行われてい る 場合。
承認条件の判定
次の コ ー ド 例は、 各条件の確認方法を示 し てい ます。
/*
* use Enforcer API to see if request should be allowed - access control
phase [#3]
*/
extern "C" {
static int enforcer_check(request_rec *r){
... 宣言 ...
不審な URL を
チ ェ ッ ク し ます
if(Enforcer_Handle == NULL) {
EnforcerLog(ENFORCER_LOG_ERROR, ">#<EnforcerAPI error: not
initialized");
return HTTP_FORBIDDEN;
}
if(EnforcerIsEvilURL(r->uri, Enforcer_Handle)) {
EnforcerLog(ENFORCER_LOG_WARNING, ">#<rejecting suspicious
url '%s'", r->uri);
return HTTP_FORBIDDEN;
}
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
111
if(!ap_is_initial_req(r)) {
if (EnforcerGetDisableCaching(Enforcer_Handle)) {
disable_caching(r, 0);
}
return DECLINED;
}
if(EnforcerGetP13Ncompat(Enforcer_Handle) == 0 &&
suspicious_headers(r)) {
return HTTP_FORBIDDEN;
}
virt_domain = (char*) ap_get_server_name(r);
if (EnforcerIsPassthroughDomain(Enforcer_Handle, virt_domain)) {
EnforcerLog(ENFORCER_LOG_DEBUG, "unsecured_domain: %s",
virt_domain);
return DECLINED;
}
if (EnforcerIsIgnoredFile(Enforcer_Handle, r->uri)) {
EnforcerLog(ENFORCER_LOG_DEBUG, "Ignore: %s", r->uri);
return DECLINED;
}
... ク エ リ の作成 ...
... Policy Validator への ク エ リ ...
... リ タ ーン コ ー ド と XML 応答の処理 ...
}
}
Policy Validator 要求の作成
enforcer_check() メ ソ ッ ド は、 承認が必要であ る と 判断 し た場合に、 Policy Validator ク エ リ を
作成 し ます。 enforcer_check() メ ソ ッ ド は、 initialize_query_object() メ ソ ッ ド を使
用 し て、 ク エ リ を初期化 し 、 生成 し ます。
/*
* use Enforcer API to see if request should be allowed - access control
phase [#3]
*/
extern "C" {
static int enforcer_check(request_rec *r){
... 宣言 ...
... 承認の必要性の判断 ...
referer = (char *) ap_table_get(r->headers_in, "Referer");
112
第5章
cookies = util_parse_cookie(r);
if ((got = initialize_query_object(r, &query,
&selectaccess_needs_refresh,
http_query, referer, cookies)) != OK)
{
return got;
}
Policy Validator
ク エ リ を初期化
し ます
... Policy Validator への ク エ リ ...
... リ タ ーン コ ー ド と XML 応答の処理 ...
}
}
XML の初期化 と 生成
initialize_query_object() メ ソ ッ ド は、 EnforcerAddrsQueryInit() メ ソ ッ ド を使用
し て、 ク エ リ オブジ ェ ク ト を初期化 し ま す。 適切な PolicyValidatorQuery 要素 と 、 必要な
サービ スお よ びパ ス のプ ロ パテ ィ が使用 さ れ、 初期化が行われ ます。 ロ ーカルお よ び リ モー ト の
IP ア ド レ ス、 サーバー名、 お よ び HTTP メ ソ ッ ド のプ ロ パテ ィ も 追加 さ れ ます。
ク エ リ オブジ ェ ク ト の初期化後、 initialize_query_object() メ ソ ッ ド は Apache API か ら
取得可能なすべての関連情報の XML プ ロ パテ ィ を追加 し ます。
•
EnforcerAddEncoded(): こ の メ ソ ッ ド は、 UTF-8 形式のデー タ を追加す る 場合に使用 さ れ
ます。
•
EnforcerAddFormData(): こ の メ ソ ッ ド は、 入力ス ト リ ーム内の HTTP フ ォ ーム か ら デー
タ を追加す る 場合に使用 さ れ ます。
•
EnforcerAddQueryData(): こ の メ ソ ッ ド は、 URL 内の HTTP ク エ リ か ら デー タ を追加す
る 場合に使用 さ れ ます。
•
appendChild(): こ の メ ソ ッ ド は、 ク エ リ に新 し い XML オブジ ェ ク ト を追加 し ます。
•
appendChildString(): こ の メ ソ ッ ド は、 ク エ リ に新 し い名前 と 値のペア を追加 し ます。
次の コ ー ド 例は、 複数の メ カ ニズ ム を使用 し た、 ク エ リ へのプ ロ パテ ィ お よ びプ ロ パテ ィ リ ス ト
の追加方法を示 し てい ます。
/*
* fill in XML query object with everything we can find out - helper for
phase [#3]
*/
static int initialize_query_object
(
request_rec *r, XMLnode *query, int *needs_refresh,
char *http_query, char *referer, table *cookies
){
conn_rec *con = r->connection;
char *password = NULL, *hvalue;
char *post_data = NULL;
int query_level = EnforcerGetQueryLevel(Enforcer_Handle);
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
113
char *base_url;
int url_changed;
if (!EnforcerGetBasenameOfURL(r->uri, &base_url, &url_changed))
return HTTP_FORBIDDEN;
if (!EnforcerAddrsQueryInit(&con->remote_addr->sa.sin,
&con->local_addr->sa.sin, ap_http_method(r),
ap_get_server_name(r), base_url, query_level, query))
{
if (url_changed)
delete base_url;
return HTTP_FORBIDDEN;
}
if (url_changed)
delete base_url;
/* if they sent a basic-auth header, parse out the login and passwd
クエリを
初期化 し ます
*/
if ((hvalue = (char *) ap_table_get(r->headers_in, "Authorization"))
!= NULL) {
// EnforcerLog(ENFORCER_LOG_DEBUG, "Authorization: %s", hvalue);
if(enforcer_ap_get_basic_auth_pw(r, (const char **) &password) ==
OK) {
EnforcerAddEncoded(*query, ENFORCER_USER, r->user,
Enforcer_Handle);
EnforcerAddEncoded(*query, ENFORCER_PASSWD, password,
Enforcer_Handle);
}
}
/* if they sent a cookie header, parse out the cookies we recognize
ユーザー名 と
パスワー ド を
追加 し ます
シ ン グル
サイ ン オ ンの
nonce を要求に
追加 し ます
SSO Cookie
デー タ を
追加 し ます
114
*/
if (cookies != NULL) {
ap_table_do(add_auth_cookies, *query, cookies, NULL);
}
/* if this is a magic_query, read the POST data and add it to the XML
query */
if (magic_query(http_query) && (util_read(r, (const char**)
&post_data) == OK)) {
table *post_data_tab = NULL;
*needs_refresh = EnforcerAddFormData(*query, post_data,
Enforcer_Handle);
/* also add post data to notes, so other handlers can access the
data */
if((tabify_post_data(r, &post_data_tab, post_data) == OK) &&
post_data_tab && !ap_is_empty_table(post_data_tab))
{
ap_table_do(note_form_data, r, post_data_tab, NULL);
}
}
if (EnforcerGetEnableCookies(Enforcer_Handle)) {
/* enable Web session cookies */
第5章
(*query)->appendChildString(ENFORCER_NATIVE_NONCE,
SYS_STRDUP(ENFORCER_ENABLE));
HTTP POST
デー タ を
コ ピー し ます
HTTP ク エ リ
デー タ を追加 し
ます
プ ロパテ ィ
リスト を
追加 し ます
}
if ((hvalue = (char *) ap_table_get(r->notes, ENFORCER_SITE_DATA)) !=
NULL)
(*query)->appendChildString(ENFORCER_SITE_DATA,
SYS_STRDUP(hvalue));
const char *service =
(*query)->getChildStringValue(ENFORCER_SERVICE);
/* if this is an SSL connection, add encryption info and certificate
*/
if((service != NULL ) && STREQN(service, "https://", strlen("https:/
/"))) {
add_ssl(r, query, "SSL_CIPHER_USEKEYSIZE", ENFORCER_SSL_KEYSIZE);
add_ssl(r, query, "SSL_CLIENT_CERT", ENFORCER_CERT);
add_ssl(r, query, "SSL_CLIENT_S_DN", ENFORCER_SSL_CLIENT_DN);
add_ssl(r, query, "SSL_PROTOCOL", ENFORCER_SSL_PROTOCOL);
add_ssl(r, query, "SSL_CIPHER", ENFORCER_SSL_CIPHER);
}
if (query_level > QUERY_MINIMAL) {
if (http_query != NULL) {
EnforcerAddQueryData(*query, http_query, Enforcer_Handle);
}
/* if apache successfully stat'ed the file, add the owner and
size */
if (r->finfo.st_mode) {
char tmp[BUFSIZ];
struct passwd *pw;
pw = getpwuid(r->finfo.st_uid);
if (pw != NULL) {
snprintf(tmp, BUFSIZ, "%s", pw->pw_name);
(*query)->appendChildString(ENFORCER_OWNER,
SYS_STRDUP(tmp));
}
snprintf(tmp, BUFSIZ, "%ld", r->finfo.st_size);
(*query)->appendChildString(ENFORCER_SIZE, SYS_STRDUP(tmp));
}
if (is_method_valid(r->method)) {
(*query)->appendChildString(ENFORCER_METHOD,
SYS_STRDUP((char*)r->method));
}
if (query_level == QUERY_MAXIMAL) {
XMLnode header_list = XmlTreeNode::sNew
(ENFORCER_TAG_PROPERTYLIST,
ENFORCER_HTTP_HEADER_LIST);
(*query)->appendChild(header_list);
ap_table_do(add_table_to_xml, header_list, r->headers_in,
NULL);
hvalue = (char *) ap_get_server_version();
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
115
if (hvalue != NULL)
(*query)->appendChildString(ENFORCER_SERVER,
SYS_STRDUP(hvalue));
}
}
if (EnforcerGetDebugLevel(Enforcer_Handle) > 9)
(*query)->appendChildString(ENFORCER_TRACE,
SYS_STRDUP(ENFORCER_ENABLE));
return OK;
}
XML ク エ リ への認証 Cookie の追加
initialize_query_object() は、 ap_table_do() メ ソ ッ ド を使用 し て、 要求のヘ ッ ダーか
ら Cookie を抽出 し 、Policy Validator 要求に追加 し ます。ap_table_do() メ ソ ッ ド は、 コ ールバ ッ
ク メ ソ ッ ド を使用 し て特定の動作を実行す る 汎用の メ ソ ッ ド です。 次の コ ー ド 例は、 Web Cookie
内でシ ン グル サ イ ン オ ンの nonce を検索 し 、Policy Validator の XML 要求に追加す る コ ールバ ッ ク
メ ソ ッ ド を示 し てい ます。
/*
* add authentication cookies to an XML query - helper for phase [#3]
* callback for ap_table_do
*/
static int add_auth_cookies(void *data, const char *key, const char
*val){
XmlTreeNode * object = (XmlTreeNode *)data;
if(STREQ(key, AUTH_COOKIE_NAME)) {
object->appendChildString(ENFORCER_NONCE, SYS_STRDUP(val));
}
if(STREQ(key, REGISTER_COOKIE_NAME)) {
object->appendChildString(ENFORCER_REGISTER_NONCE,
SYS_STRDUP(val));
}
return TRUE;
}
要求への SSL 情報の追加
Apache API か ら SSL パ ラ メ ー タ の値を検索す る 場合は、 次に示すオプシ ョ ン の Apache メ ソ ッ ド
を使用 し ます。 add_ssl() メ ソ ッ ド が、 SSL パ ラ メ ー タ の値を名前に よ っ て検索 し 、 XML ク エ
リ にプ ロ パテ ィ を追加 し ます。
/*
* add SSL information to the XML query
*/
static void add_ssl
(
request_rec *r, XMLnode *query, char *ssl_name,
const char *query_tag
){
char *val = NULL;
116
第5章
APR_DECLARE_OPTIONAL_FN(char *, ssl_var_lookup, (apr_pool_t *,
server_rec *,
conn_rec *, request_rec *, char *));
APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *var_lookup;
var_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
if (var_lookup != NULL) {
val = var_lookup(r->pool, r->server, r->connection, r, ssl_name);
}
if(val != NULL) {
if (STREQ(query_tag, ENFORCER_SSL_KEYSIZE)) {
char tmp[BUFSIZ];
snprintf(tmp, BUFSIZ, "%s bit", val);
(*query)->appendChildString(query_tag, SYS_STRDUP(tmp));
}
else
(*query)->appendChildString(query_tag, SYS_STRDUP(val));
}
}
XML オブ ジ ェ ク ト へのデー タ の追加
次の コ ー ド 例は、名前 と 値のペア を Policy Validator の XML 要求に追加す る 汎用の メ ソ ッ ド を示 し
て い ま す。 こ の メ ソ ッ ド は、 ap_table_do() メ ソ ッ ド に よ っ て呼び出 さ れ る コ ールバ ッ ク メ
ソ ッ ド です。 汎用プ ロ パテ ィ の Policy Validator への追加方法が記述 さ れてい ます。
/*
* add arbitrary table data to an XML object - helper for phase [#3]
* callback for ap_table_do
*/
static int add_table_to_xml(void *data, const char *key, const char
*val){
XmlTreeNode * d = (XmlTreeNode *)data;
d->appendChildString(key, SYS_STRDUP(val));
return TRUE;
}
マ ジ ッ ク ク エ リ を含む URL への Web ブ ラ ウザの リ ダ イ レ ク ト
ア イ デン ティ ティ がリ ソ ース を 要求し て認証さ れなかっ た場合、Apache 2 Enforcer プラ グ イ ン はロ
グ イ ン フ ォ ーム を 表示し ま す。 ロ グ イ ン フ ォ ーム は、 ID を はじ めと し た認証に使用さ れる 情報を
含んでいま す。 ロ グ イ ン フ ォ ーム を 表示する 場合、 Apache 2 Enforcer プラ グ イ ン は、 URL でク エ
リ 用の特殊なタ グ を 使用し て、 フ ォ ーム から ID やその他の認証情報など のデータ を 抽出でき る
よ う にし ま す。 こ れは「 マジッ ク ク エリ 」 と 呼ばれま す。 次のコ ード 例は、 Apache 2 Enforcer プラ
グ イ ン がマジッ ク ク エリ を 含んだ URL にブラ ウ ザを リ ダイ レ ク ト する 方法を 示し ていま す。
/* redirect to a URL that apache will treat specially */
static int
send_magic_redirect(request_rec *r, char *orig_query)
{
char url[1024];
if (orig_query == NULL)
snprintf(url, 1024, "%s?%s", r->uri, APACHE_MAGIC_QUERY);
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
117
else
snprintf(url, 1024, "%s?%s&%s", r->uri, orig_query,
APACHE_MAGIC_QUERY);
return send_redirect(r, url);
}
ク エ リ に元の フ ォ ーム デー タ が含まれているかど う かの確認
ア イ デン テ ィ テ ィ が ロ グ イ ン フ ォ ーム を送信 し た後、 Enforcer プ ラ グ イ ン は URL にマジ ッ ク ク
エ リ が含ま れてい る か ど う か を確認 し ます。 次の コ ー ド 例は、 要求 さ れた URL を調べ、 ロ グ イ ン
デー タ を ロ グ イ ン フ ォ ーム か ら 抽出す る か ど う か を判断 し てい ます。 要求 さ れた URL にマジ ッ
ク ク エ リ が含ま れていない場合、 Apache 2 Enforcer プ ラ グ イ ン は、 POST さ れた フ ォ ーム デー タ
が ロ グ イ ン と は関係ない と 判断 し 、 抽出を実行 し ません。
/* returns 1 if a string contains our magic query string, 0 otherwise */
static int magic_query(char *q){
if (q == NULL)
return 0;
if (strstr(q, APACHE_MAGIC_QUERY) == NULL)
return 0;
return 1;
}
他の Apache プ ラ グ イ ン用の フ ォ ーム デー タ の保存
要求 さ れた URL にマジ ッ ク ク エ リ が含ま れてい る 場合、 Apache 2 Enforcer プ ラ グ イ ン は認証情
報を抽出 し 、 Policy Validator 要求に追加 し ます。 Apache サーバーの制約に よ り 、 Apache 2 Enforcer
プ ラ グ イ ン が フ ォ ーム デー タ を読み取 る こ と がで き る のは 1 回限 り です。 他の Apache 2 Enforcer
プ ラ グ イ ン に よ っ て フ ォ ーム デー タ を読み取 る 場合は、 フ ォ ーム デー タ を notes 構造に コ ピー し
ます。 こ の例では、 他のプ ラ グ イ ン での読み取 り が可能にな る よ う 、 フ ォ ーム デー タ を コ ピーす
る 方法を示 し てい ます。
/*
* add consumed POSTed form data to the notes area, so other handlers can
access it
*/
static int note_form_data(void *data, const char *key, const char *val){
#define FORM_NOTE_PREFIX
"SA_POSTED:"
request_rec *r = (request_rec *)data;
int len = strlen(key) + strlen(FORM_NOTE_PREFIX) +1;
char *data_name = (char*) malloc(len);
if (data_name == NULL)
{
EnforcerLog(ENFORCER_LOG_PERR, "note-form-data: failed to malloc
%d", len);
return 0;
}
snprintf(data_name, len, "%s%s", FORM_NOTE_PREFIX, (char *) key);
ap_table_add(r->notes, data_name, (char*) val);
free(data_name);
return TRUE;
}
118
第5章
Policy Validator へのク エ リ 送信
Policy Validator ク エ リ の作成後、 EnforcerQuerySend() メ ソ ッ ド を使用 し て、 ク エ リ を Policy
Validator に送信 し ま す。 こ の メ ソ ッ ド は、 要求の許可 ま たは拒否、 エ ラ ーの発生な ど を示す コ ー
ド を返 し ます。 Policy Validator か ら の XML 応答は reply パ ラ メ ー タ に格納 さ れ ます。 次の コ ー
ド 例は、 EnforcerQuerySend() メ ソ ッ ド の使用方法を示 し ます。
/*
* use Enforcer API to see if request should be allowed - access control
phase [#3]
*/
extern "C" {
static int enforcer_check(request_rec *r){
... 宣言 ...
... 承認の必要性の判断 ...
... Policy Validator ク エ リ の作成 ...
returnAction = EnforcerQuerySend(Enforcer_Handle, query, &reply);
... リ タ ーン コ ー ド と XML 応答の処理 ...
}
}
応答結果の実行
Policy Validator に ク エ リ を 行 っ た 後、 応答 を 処理 し て 判定結 果 を 実行 す る 必 要 が あ り ま す。
enforcer_check() メ ソ ッ ド は、 EnforcerQuerySend() メ ソ ッ ド か ら の戻 り 値を使用 し て、
Policy
Validator
で の エ ラ ー の 発 生 の 有 無 を 確 認 し ま す。 エ ラ ー が 発 生 し た 場 合、
enforcer_check() メ ソ ッ ド は XML 応答内でシ ン グル サ イ ン オ ン、 ま たは登録の nonce を検
索 し ます。 nonce が存在す る 場合は、 HTTP Cookie に追加 さ れます。 それ以降の ト ラ ンザ ク シ ョ ン
では、 Cookie を使用 し て ア イ デン テ ィ テ ィ を識別 し ます。
要求が拒否 さ れた場合、enforcer_check() メ ソ ッ ド は XML 応答に認証 ヒ ン ト が記載 さ れてい
ないか ど う か を確認 し ます。 認証 ヒ ン ト はア イ デン テ ィ テ ィ の認証方式を Enforcer プ ラ グ イ ン に
指示 し ます。 認証 ヒ ン ト に基づいて、 Apache 2 Enforcer プ ラ グ イ ン はア イ デン テ ィ テ ィ に対 し て
ロ グ イ ン認証情報の入力を要求す る メ ッ セージ を表示 し ます。
Policy Validator の判定結果の実行
次の コ ー ド 例は、 Policy Validator の判定結果を実行す る ための Enforcer プ ラ グ イ ン の一般的なプ
ロ グ ラ ム方法を示 し てい ます。
/*
* use Enforcer API to see if request should be allowed - access control
phase [#3]
*/
extern "C" {
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
119
static int enforcer_check(request_rec *r){
... 宣言 ...
... 承認の必要性の判断 ...
... XML ク エ リ の作成 ...
... Policy Validator への ク エ リ ...
if(returnAction != ENFORCER_ERROR_ACTION) {
/* you can't look inside the reply if it might be NULL (on
error) */
EnforcerSetenv(reply, r);
/* if XML reply object had a nonce, add it as an
AUTH_COOKIE_NAME cookie */
if((s = reply->getChildStringValue(ENFORCER_NONCE)) != NULL)
SSO Cookie を
設定 し ます
{
set_cookie(Enforcer_Handle, r, AUTH_COOKIE_NAME,
(char*) s, COOKIE_LIFE, 0);
// don't cache logout pages!
if(STREQ(s, "logout")) {
disable_caching(r, 0);
}
}
/* if XML reply object had a registration cookie, add it */
if((s = reply->getChildStringValue(ENFORCER_REGISTER_NONCE))
!= NULL) {
long cookie_life = 0;
if ((! reply->getChildLongValue(ENFORCER_REGISTER_LIFE,
&cookie_life))
|| (cookie_life == 0))
{
cookie_life = COOKIE_LIFE;
}
set_cookie(Enforcer_Handle, r, REGISTER_COOKIE_NAME,
(char*) s, cookie_life, 0);
}
ア ク セスの許可
処理を続行 し ます
}
switch (returnAction) {
case ENFORCER_ALLOW_ACTION:
... 複数 ド メ イ ン シ ン グル サ イ ン オ ンの処理 ...
response = DECLINED; /* apache-speak for 'let other
handlers decide */
break;
case ENFORCER_DENY_ACTION:
... 複数 ド メ イ ン シ ン グル サ イ ン オ ンの処理 ...
120
第5章
ログ イ ン
フ ォ ームを
送信 し ます
ア ク セスの拒否
redirect_URL = reply->
getChildStringValue(ENFORCER_REDIRECT);
if(redirect_URL != NULL
&& EnforcerAuthFailed(query, reply,
selectaccess_needs_refresh))
{
response = send_redirect(r, (char *)redirect_URL);
}
else if (EnforcerGetAuthHint(reply, &auth_plist,
&hint_flags)) {
response = DONE;
if (hint_flags == HINT_PASSWORD
&& EnforcerGetLoginViaForm(Enforcer_Handle) == 0)
{
s = auth_plist->
getChildStringValue(ENFORCER_FORM_REALM);
send_basic_auth_page(r, (char *) s);
} else {
if (!magic_query(http_query)) {
response = send_magic_redirect(r, http_query);
} else {
send_dynamic_form(r, NULL, auth_plist);
}
}
if (hint_flags == HINT_FREE) {
delete auth_plist;
}
}
else if ((auth_plist = reply->
getChild(ENFORCER_FORM_DATA)) &&
auth_plist->isPropertyList())
{
// they have a site-specific auth plugin or dynamic
form
response = DONE;
if (!magic_query(http_query)) {
response = send_magic_redirect(r, http_query);
} else {
send_dynamic_form(r, NULL, auth_plist);
}
}
else if(redirect_URL != NULL) {
response = send_redirect(r, (char *)redirect_URL);
} else {
EnforcerLog(ENFORCER_LOG_DEBUG, "reply is flat out
deny");
}
break;
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
121
case ENFORCER_ERROR_ACTION:
case ENFORCER_USER_DEFINED_ACTION:
default:
ap_log_error(APLOG_MARK, APLOG_ERR, AP2_STATUS r->server,
"mod_enforcer ERROR %s %s", r->method, r->uri);
break;
}
delete query;
delete reply;
if (response == DECLINED) {
if (selectaccess_needs_refresh) {
send_accepted_page(r);
response = DONE;
}
else if (EnforcerGetDisableCaching(Enforcer_Handle)) {
disable_caching(r, 0);
}
}
return response;
/* give other access control handlers a chance */
}
}
複数 ド メ イ ン シ ングル サイ ン オ ン
認証に成功 し た後は、 Policy Validator 応答内の nonce に よ り 、 シ ン グル サ イ ン オ ン が維持 さ れ ま
す。 nonce は暗号化 さ れた ト ー ク ン です。 Web ブ ラ ウ ザの Cookie に nonce を組み込む こ と に よ り 、
ブ ラ ウ ザはそれ以降のすべての要求に nonce を含め ます。 Web Cookie は特定の ド メ イ ンに関連付
け ら れ る ため、 シ ン グル サ イ ン オ ンは 1 つの ド メ イ ン内でのみ行われ ます。
複数のド メ イ ン にま たがる シン グ ル サイ ン オン を 行う 場合、 次の手順を 実行する 必要があ り ま す。
1
参照元サイ ト が複数ド メ イ ン シン グ ル サイ ン オン のリ ス ト に含ま れている こ と を 確認し ま す。
2
ブ ラ ウ ザを参照元サ イ ト に リ ダ イ レ ク ト し 、 nonce を要求 し ます。
3
参照元サ イ ト は nonce を URL に含め、 元のサ イ ト にブ ラ ウ ザを リ ダ イ レ ク ト し ます。
4
こ の ド メ イ ンの Cookie に nonce を組み込みます。
5
ア イ デン テ ィ テ ィ を元の URL に リ ダ イ レ ク ト し ます。
Policy Validator 要求が拒否 さ れた場合、 enforcer_check() メ ソ ッ ド は、 ア イ デン テ ィ テ ィ の識
別に複数 ド メ イ ン シ ン グル サ イ ン オ ン が使用可能か ど う か を確認 し ます。 使用可能であ る 場合、
メ ソ ッ ド はア イ デン テ ィ テ ィ を参照元サ イ ト に リ ダ イ レ ク ト し 、 シ ン グル サ イ ン オ ン の nonce を
要求 し ます。
初めて要求を受け取っ た場合、 enforcer_check() メ ソ ッ ド は、 その要求が複数 ド メ イ ン シ ン
グル サ イ ン オ ンの nonce に関す る も のか ど う か を確認 し ます。該当す る 場合は、nonce を含む URL
を作成 し 、 ク ラ イ ア ン ト を元のサ イ ト に リ ダ イ レ ク ト し ます。
122
第5章
要求が Policy Validator に よ っ て許可 さ れた場合、 enforcer_check() メ ソ ッ ド は、 要求 さ れた
URL に複数 ド メ イ ン シ ン グル サ イ ン オ ン の nonce が含まれてい る か ど う か を確認 し ます。該当す
る 場合、 メ ソ ッ ド はその nonce の新 し い Cookie を作成 し 、 要求 さ れた リ ソ ースへのア ク セ ス を提
供 し ます。
複数 ド メ イ ン シ ン グル サイ ン オ ンの Web リ ダ イ レ ク ト のプ ロ セス
次の コ ー ド 例は、 複数 ド メ イ ン シ ン グル サ イ ン オ ン の実行方法を示 し てい ます。
/*
* use Enforcer API to see if request should be allowed - access control
phase [#3]
*/
extern "C" {
static int enforcer_check(request_rec *r){
... 宣言 ...
... 承認の必要性の判断 ...
nonce を
要求する
サーバー
手順 3: 複数
ド メ イ ンの
nonce を URL
に含めます
/* we need http_query, referer and cookies for SSO support */
if (r->args && strlen(r->args)) {
http_query = r->args;
}
referer = (char *) ap_table_get(r->headers_in, "Referer");
cookies = util_parse_cookie(r);
if (EnforcerIsSSORedirectURL(http_query, &old_url)) {
// do SSO redirect 2
char *sso_authURL;
if (cookies != NULL) {
nonce = (char *) ap_table_get(cookies, AUTH_COOKIE_NAME);
}
EnforcerConstructSSOAuthURL(Enforcer_Handle, old_url, nonce,
&sso_authURL);
send_redirect(r, sso_authURL);
delete[] sso_authURL;
return HTTP_MOVED_TEMPORARILY;
}
... Policy Validator ク エ リ の作成 ...
... nonce の処理 と Cookie の作成 ...
手順 4: nonce
を ロー カル
ド メ イ ンの
Cookie に
組み込みます
switch (returnAction) {
case ENFORCER_ALLOW_ACTION:
response = DECLINED; /* apache-speak for 'let other
handlers decide */
if (EnforcerIsSSOAuthURL(http_query, &nonce)) {
// SSO worked, send browser back to the original URL
// do SSO redirect 3
char *sso_origURL;
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
123
手順 5: ユーザー
を元の URL に
リ ダイ レ ク ト
し ます
手順 1: 複数
ド メ イ ン SSO が
有効かど う かを
確認 し ます
手順 2: ア イ デ
ンテ ィ テ ィ を
参照元サーバー
にリ ダイ レ ク ト
し ます
EnforcerConstructSSOOrigURL(r->uri, http_query,
&sso_origURL);
set_cookie(Enforcer_Handle,r,AUTH_COOKIE_NAME,nonce,COOKIE_LIFE,0);
send_refresh(r, 0, sso_origURL);
response = DONE;
delete[] sso_origURL;
}
break;
case ENFORCER_DENY_ACTION:
// need to figure out the full_url to make SSO decision
host_header = (char *) ap_table_get(r->headers_in,
"Host");
if (host_header != NULL) {
snprintf(full_url, 1024, "%s://%s%s",
ap_http_method(r), host_header, r->uri);
} else {
snprintf(full_url, 1024, "%s://%s%s",
ap_http_method(r), ap_get_server_name(r), r->uri);
}
if (http_query != NULL) {
strcat(full_url, "?");
strcat(full_url, http_query);
}
redirect_URL = reply->
getChildStringValue(ENFORCER_REDIRECT);
if (EnforcerCouldSSOHelp(reply, referer, full_url,
Enforcer_Handle)) {
// SSO could result in an authentication without
prompting user
// do SSO redirect 1
char *sso_redirectURL;
EnforcerConstructSSORedirectURL(referer, full_url,
&sso_redirectURL);
response = send_redirect(r, sso_redirectURL);
delete[] sso_redirectURL;
}
}
return response;
}
}
UNIX での考慮事項
UNIX プ ラ ッ ト フ ォ ーム では、Apache サーバーは、子プ ロ セ ス を作成 し て Web 要求を処理 し ます。
子プ ロ セ ス の終了後、 Enforcer プ ラ グ イ ン は初期化中に作成 さ れた Enforcer オブジ ェ ク ト を解放
し ま す。 次の コ ー ド 例は、 UNIX プ ラ ッ ト フ ォ ーム での Enforcer オブジ ェ ク ト の解放を示 し てい
ます。
124
第5章
#ifndef APACHE2
/*
* stuff to do before apache children exit, unix-only
*/
extern "C" {
static void child_exit(server_rec *s, pool *p){
#ifdef __unix__
if (mod_enforcer_initialized) {
/* Enforcer API cleanup */
EnforcerFree(Enforcer_Handle);
mod_enforcer_initialized = 0;
}
#endif
}
}
#endif
Apache プ ラ グ イ ンの登録
Apache 2 Enforcer プ ラ グ イ ン で メ ソ ッ ド を実行す る には、モジ ュ ールを Apache サーバーに登録す
る 必要があ り ます。 次の コ ー ド 例に示す よ う に、 登録モジ ュ ールを作成す る こ と に よ っ て登録が
行われ ます。 こ こ では Apache 2 の登録のみを扱っ てい ます。
static void enforcer_register_hooks(apr_pool_t *p){
ap_hook_child_init(child_init, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_access_checker(enforcer_check, NULL, NULL, APR_HOOK_MIDDLE);
}
/* Dispatch list for API hooks */
module AP_MODULE_DECLARE_DATA enforcer_module = {
STANDARD20_MODULE_STUFF,
NULL,
/* create per-dir
config structures */
NULL,
/* merge per-dir
config structures */
NULL,
/* create per-server config structures */
NULL,
/* merge per-server config structures */
NULL,
/* table of config file commands
*/
enforcer_register_hooks
/* register hooks
*/
};
Apache Enforcer プ ラ グ イ ンの コ ンパイル と イ ン ス ト ール
Apache 2 Enforcer プ ラ グ イ ン では次の こ と が可能です。
•
サーバーに静的に コ ンパ イ ルで き ます。
•
Windows 上で DLL ( ダ イ ナ ミ ッ ク リ ン ク ラ イ ブ ラ リ ) と し て実装で き ます。
•
UNIX 上 で共有オブジ ェ ク ト フ ァ イ ル (.so) と し て実装で き ます。 動的なプ ラ グ イ ン を イ ン
ス ト ー ル す る よ り も 簡 単 で あ る た め、 本 章 の 例 で は、 こ の プ ラ グ イ ン を 使 用 し ま す。
mod_enforcer.h フ ァ イ ルの上部にあ る 一部の定数を再定義 し て、 Apache 2 Enforcer プ ラ グ
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
125
イ ン を再 コ ンパ イ ルす る こ と に よ り 、 特定のサ イ ト に対す る Apache 2 Enforcer プ ラ グ イ ン を
簡単に設定で き ます ( 詳細は後述 )。 mod_enforcer.h フ ァ イ ルを作成す る には、 デ ィ レ ク
ト リ を \source\server_plugins\apache に 変 更 し 、 gmake コ マ ン ド を 実 行 し ま す。
gmake コ マ ン ド の詳細は、 23 ページの 「SDK でのサン プルの作成」 を参照 し て く だ さ い。
gmake コ マ ン ド の出力は、 次の コ ー ド 例の よ う にな り ます。 カ ス タ ム Apache 2 Enforcer プ ラ
グ イ ン を作成す る 場合、 オプシ ョ ン、 ヘ ッ ダー パ ス、 お よ び ラ イ ブ ラ リ を コ ンパ イ ラ に提
供す る 必要があ り ます。
設定済みの Makefile を使用 し て Apache 2 Enforcer プ ラ グ イ ン を コ ンパ イ ルす る 場
合、 まず mod_so モジ ュ ールを有効に し て Apache サーバーを コ ンパ イ ル し ま す。 こ
れは Red Hat をは じ め と す る 多 く のオペレーテ ィ ン グ シ ス テ ム でデフ ォ ル ト と さ れて
い る 手順です。
Apache の Makefile は、 Apache 2 サーバーの イ ン ス ト ール先を指定す る SDK に含ま
れてい ます。Apache を イ ン ス ト ールす る フ ァ イ ルは、任意の フ ォ ルダに変更で き ます。
g++ -o ../../../solaris/bin/mod_enforcer.so -Wc,-Wall -Wc,-g
-Wl,-Bsymbolic
-D_PTHREADS -D_REENTRANT -DPOSIX_THREADS -I../../../enforcer
-L../../../solaris/lib
-lenforcer -lcurl -lssl -lcrypto -licuuc -licudata -lcurl
-lsocket -lnsl -ldl -lthread -lstdc++
../mod_enforcer.cpp ../util.cpp
COM Enforcer API を使用 し た Enforcer プ ラ グ イ ンの作成
こ の セ ク シ ョ ン で は、 COM Enforcer API の利用方法 を 説明 し ま す。 例に は、 WSE (Web Service
Enhancement) Enforcer プ ラ グ イ ン を使用 し ます。 次の各項目について説明 し ます。
•
Enforcer オブジ ェ ク ト の初期化
•
SOAP メ ッ セージか ら の承認デー タ の抽出
•
Policy Validator 要求の作成
•
Policy Validator への ク エ リ
•
Policy Validator の判定結果の実行
WSE Enforcer プ ラ グ イ ンの例
WSE Enforcer プ ラ グ イ ン は、 .Net Web サービ スへのア ク セ ス を保護す る COM コ ン ポーネ ン ト で
す。 こ の WSE Enforcer プ ラ グ イ ン は .Net API を Enforcer API に接続 し ます。 SOAP メ ッ セージの
プ ロ パテ ィ を使用 し て、 Policy Validator ク エ リ が作成 さ れ ます。 WSE Enforcer プ ラ グ イ ン は、 Web
サービ ス へのア ク セ ス の許可 / 拒否を実行 し ます。 ア ク セ ス を拒否 し た場合、 WSE Enforcer プ ラ
グ イ ン は、 Web サービ ス の ク ラ イ ア ン ト に対 し て認証 ヒ ン ト を提供 し ます。 それに応 じ て、 ク ラ
イ ア ン ト は必要な認証情報を WSE Enforcer プ ラ グ イ ン に提示 し ます。
126
第5章
Helper ク ラ ス
Helper ク ラ ス は、 InputFilter お よ び OutputFilter の両 ク ラ ス に よ っ て 使用 さ れ ま す。
Helper ク ラ ス は、 SOAP 名前空間の定数、 XML タ グの定数、 お よ びそれ以外の SOAP メ ッ セー
ジ や Policy Validator の ク エ リ / 応答の処理に使用 さ れ る 定数 を 定義 し ま す。 InputFilter や
Output Filter が Policy Validator と 動作す る 際に使用 さ れ る Enforcer オブジ ェ ク ト は、 静的な
m_handle フ ィ ール ド に格納 さ れ ます。 その他に、 Helper ク ラ ス は、 Policy Validator と の通信に
使用 さ れ る Enforcer オブジ ェ ク ト を取得 / 設定す る ための メ ソ ッ ド も 定義 し ま す。 次の コ ー ド 例
は、 Helper ク ラ ス の フ レーム ワ ー ク を示 し てい ます。
... ラ イ ブ ラ リ の使用 ...
namespace com.hp.selectaccess.enforcer.wse
{
public class Helper
すべてのフ ィ ル タ
{
イ ン ス タ ン スが
共有する
protected static EnforcerCOMHandle m_handle = null;
Enforcer
オブ ジ ェ ク ト
... その他の定数の定義 ....
public
public
public
public
public
(
Helper(){}
static void InitEnforcer() { ... }
static EnforcerCOMHandle GetEnforcerCOMHandle() { ... }
static int GetRandomNumber() { ... }
static SoapException ConstructException
string faultCode,
string faultCodeNS,
string faultString
) { ... }
}
}
InputFilter ク ラ ス
InputFilter ク ラ ス は ProcessMessage() メ ソ ッ ド を オーバー ラ イ ド し ま す。 こ れに よ り 、
InputFilter ク ラ ス は SOAP メ ッ セージのプ ロ パテ ィ を抽出 し 、 Policy Validator ク エ リ を作成
し 、 応答結果を実行 し ま す。 次の コ ー ド 例は、 InputFilter ク ラ ス の フ レーム ワ ー ク を示 し て
い ます。
... ラ イ ブ ラ リ の使用 ...
namespace com.hp.selectaccess.enforcer.wse
{
public class InputFilter:SoapInputFilter
{
public InputFilter(){}
public override void ProcessMessage(SoapEnvelope envelope)
{ ... }
public EnforcerXMLTree constructValidatorQuery
(
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
127
XmlElement body,
SoapContext requestContext,
EnforcerCOMHandle valHandle
) { ... }
public void SendValidatorQuery
(
EnforcerXMLTree query,
EnforcerCOMHandle valHandle
) { ... }
public void GetValidatorCookieFromReply
(
EnforcerXMLTree reply,
EnforcerCOMHandle valHandle
) { ... }
public void AddPersonalizationData
(
EnforcerXMLTree reply,
EnforcerCOMHandle valHandle
) { ... }
... 暗号化お よ び署名の属性の抽出 メ ソ ッ ド ...
} // class CustomInputFilter
} //CustomLibrary
OutputFilter ク ラ ス
OutputFilter ク ラ ス は、 .Net Web サ ー ビ ス が SOAP 応答 を 作成 し た 後 に 呼び出 さ れ ま す。
OutputFilter ク ラ ス は、 Select Access のシ ン グル サ イ ン オ ンの nonce を、 Cookie と し て SOAP
応答に挿入す る メ ソ ッ ド を提供 し ます。 認証が必要な場合、 OutputFilter ク ラ ス は、 ポ リ シー
SOAP ヘ ッ ダー と し て認証 ヒ ン ト を SOAP 応答に挿入 し ま す。 ま た、 OutputFilter ク ラ ス は、
SOAP メ ッ セージの暗号化お よ び署名の メ ソ ッ ド も 提供 し ます。 こ れに よ り 、 シ ン グル サ イ ン オ
ン の nonce をハ ッ カーか ら 保護 し ます。 次の コ ー ド 例は、 OutputFilter ク ラ ス の フ レーム ワー
ク を示 し てい ます。
... ラ イ ブ ラ リ の使用 ...
namespace com.hp.selectaccess.enforcer.wse
{
public class OutputFilter:SoapOutputFilter
{
public OutputFilter() { ... }
public override void ProcessMessage(SoapEnvelope envelope)
{ ... }
public void AddValidatorCookie
(
SoapEnvelope envelope,
EnforcerCOMHandle valHandle
) { ... }
128
第5章
public void AddValidatorCookieToSoap
(
SoapEnvelope envelope,
string nonce,
EnforcerCOMHandle valHandle
) { ... }
public void AddSignedPolicyHeader
(
SoapEnvelope envelope,
string[] authTypes,
bool signPolicy,
EnforcerCOMHandle valHandle
) { ... }
public void EncryptResponseMessage
(
SoapContext context,
EnforcerCOMHandle valHandle,
bool mustEncrypt
) { ... }
public void SignResponseMessage
(
SoapContext context,
Reference reference,
EnforcerCOMHandle valHandle
) { ... }
... その他の署名のヘルパー メ ソ ッ ド ...
}
}
COM Enforcer API のク ラ ス と ユーテ ィ リ テ ィ
ENFORCERLib ラ イ ブ ラ リ の EnforcerCOMHandle ク ラ ス は、 Enforcer API の基本 ク ラ ス です。
こ の ク ラ ス は、 Policy Validator と の通信で使用 さ れ る Enforcer オブジ ェ ク ト を表 し ます。
Policy Validator の ク エ リ お よ び応答を作成 し 、SOAP XML を処理す る には、標準的な System.Xml
ラ イ ブ ラ リ の ク ラ ス を使用 し ます。
COM ラ イ ブ ラ リ のイ ンポー ト
次の コ ー ド 例に示す よ う に、COM Enforcer API ラ イ ブ ラ リ を イ ン ポー ト す る には、ENFORCERLib
ラ イ ブ ラ リ を組み込む必要があ り ます。 コ ー ド の例には、 WSE Enforcer プ ラ グ イ ン が必要 と す る
その他の ラ イ ブ ラ リ も 含まれてい ます。
using System;
using System.Collections;
using System.Diagnostics;
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
129
using
using
using
using
using
using
using
System.IO;
System.Web;
System.Web.Services.Protocols;
System.Xml;
Microsoft.Web.Services;
Microsoft.Web.Services.Security;
ENFORCERLib;
Enforcer オブ ジ ェ ク ト の作成
Helper ク ラ ス は、 InitEnforcer() メ ソ ッ ド を使用 し て、 Enforcer オブジ ェ ク ト を作成 し ま
す。 こ の メ ソ ッ ド は、 m_handle.Init() を 呼 び 出 し て、 Enforcer API を 初 期 化 し ま す。
InputFilter ク ラ ス お よ び OutputFilter ク ラ ス は、 GetEnforcerCOMHandle() メ ソ ッ ド
を使用 し て、 設定 さ れた Enforcer オブジ ェ ク ト を検索 し ます。 次の コ ー ド 例で説明 し ます。
新 し い Enforcer
オブ ジ ェ ク ト を
作成 し ます
Enforcer
オブ ジ ェ ク ト を
初期化 し ます
Enforcer
オブ ジ ェ ク ト の
フ ィ ル タ リ ング
を実行 し ます
130
public static void InitEnforcer()
{
/*
* LOG_TYPE = "wse"
* At the time of initialization, this WSE Enforcer will look
for the file"
* "INSTALL_DIR/bin/enforcer_wse.xml"
*/
if (m_handle == null)
{
m_handle = new EnforcerCOMHandle();
string loggingName = m_handle.GetCompanyShortName() + " "
+ m_handle.GetProductName() + " " + LOG_TYPE + " "
+ m_handle.GetServerPluginName();
m_handle.Init(null, loggingName, LOG_TYPE.ToLower());
string msg = "WSE Enforcer Validator Handle Initialized";
m_handle.EnforcerLogMsg(m_handle.GetInfoLogType(), msg);
} //m_handle == null
} //InitEnforcer
public static EnforcerCOMHandle GetEnforcerCOMHandle()
{
if (m_handle == null)
{
InitEnforcer();
}
return m_handle;
}
第5章
XML 要求の作成
InputFilter ク ラ ス は、 ProcessMessage() メ ソ ッ ド を オーバー ラ イ ド し 、 Policy Validator の
要求を確認 し ま す。 こ の メ ソ ッ ド は、 constructValidatorQuery() メ ソ ッ ド を呼び出 し て、
XML 要求を作成 し ます。 Policy Validator ク エ リ のプ ロ パテ ィ は SOAP 要求か ら 抽出 さ れます。
constructValidatorQuery() メ ソ ッ ド は、 SOAP 要求の HttpRequest か ら 、 必要なサービ
スお よ びパ ス のプ ロ パテ ィ を抽出 し ます。 constructValidatorQuery() メ ソ ッ ド は、 続い
て、 ID と パ ス ワー ド 、 お よ び X.509 証明書の認証情報が要求に含まれてい る か ど う か を確認 し 、
該当す る 場合は各プ ロ パテ ィ を XML ク エ リ に追加 し ます。 ま た、 SOAP ヘ ッ ダーま たは HTTP
ヘ ッ ダーの Cookie にシ ン グル サ イ ン オ ンの nonce が含まれてい る 場合は、 その nonce を ク エ リ
に追加 し ます。 Enforcer プ ラ グ イ ン が Cookie を有効化す る よ う に設定 さ れてい る 場合は、
NATIVE_NONCE プ ロ パテ ィ を ク エ リ に追加 し ます。 こ れに よ り 、 Policy Validator の応答にシ ン グ
ル サ イ ン オ ン の nonce が組み込まれます。 最後の ク エ リ は、 ク エ リ を Policy Validator に送信す る
ProcessMessage() メ ソ ッ ド に返 さ れ ます。
XML ク エ リ 用に
HTTP 要求の
デー タ を
抽出 し ます
HTTP 接続から
ク ラ イアン ト
証明書を
抽出 し ます
public EnforcerXMLTree constructValidatorQuery
(
XmlElement body, SoapContext requestContext, EnforcerCOMHandle
valHandle
)
{
try
{
EnforcerXMLTree query = null;
string httpClientCert = null;
HttpRequest httpRequest = HttpContext.Current.Request;
Uri uri = httpRequest.Url;
string scheme = uri.Scheme;
string host = uri.Host;
int port = uri.Port;
string path = uri.AbsolutePath;
if (String.Compare(host, Helper.LOCALHOST, true) == 0
|| (String.Compare(host, "127.0.0.1", true)== 0))
{
string hostname = Dns.GetHostName();
IPHostEntry hostEntry = Dns.GetHostByName(hostname);
host = hostEntry.HostName;
}
string service = scheme + "://" + host + ":" + port;
string resource = getResource(body);
path = path + "/" + resource;
string msg = "Input Filter:: Web Service URL being accessed:\n"
+ service + "\n" +path;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
// get client side certificate from the HTTP connection
HttpClientCertificate clientCert = httpRequest.ClientCertificate;
if (clientCert != null)
{
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
131
適切な プ ロパテ ィ
を使用 し て新 し い
XML ク エ リ を
作成 し ます
ユーザー名 と
パスワー ド が
存在する場合は
追加 し ます
132
byte[] certBytes = clientCert.Certificate;
if (certBytes != null && certBytes.Length > 0)
{
httpClientCert = Convert.ToBase64String(certBytes);
msg = "Input Filter:: Client certificate received in the
HTTP"
+ " connection:\n " + clientCert;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(),
msg);
}
}
query = valHandle.newQuery(service, path);
// Get embedded Security tokens
bool passAdded = false;
bool certAdded = false;
// log
int count = requestContext.Security.Tokens.Count;
msg = "Input Filter:: Total number of SecurityTokens received in
"
+ " the SOAP Message is "+count;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
foreach (SecurityToken tok in requestContext.Security.Tokens)
{
if (tok is UsernameToken && !passAdded)
{
string username = ((UsernameToken)tok).Username;
string password = ((UsernameToken)tok).Password;
if (username != null && password != null)
{
string property = valHandle.GetTagPropertyList();
EnforcerXMLTree propListElemNode =
query.newNode(valHandle.GetTagPropertyList());
propListElemNode.setName(valHandle.GetTagPostDataList());
EnforcerXMLTree userNode =
query.newNode(valHandle.GetTagProperty());
userNode.setName(valHandle.GetTagUser());
userNode.setStringValue(username);
EnforcerXMLTree passNode =
query.newNode(valHandle.GetTagProperty());
passNode.setName(valHandle.GetTagPassword());
passNode.setStringValue(password);
propListElemNode.appendChild(userNode);
propListElemNode.appendChild(passNode);
query.appendChild(propListElemNode);
passAdded = true;
msg = "Input Filter:: UsernameToken received in the
SOAP "
第5章
+ " message containing the "
+ "username '" + username
+ "has been added to the validator query.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(),
msg);
}
ユーザー名や
パスワー ド は
複数追加 し ない
で く ださい
ログ イ ン ID 用に
証明書の
プ ロパテ ィ を
追加 し ます
証明書の ID を
1 つだけ
追加 し ます
}
else if (tok is UsernameToken && passAdded)
{
string username = ((UsernameToken)tok).Username;
string password = ((UsernameToken)tok).Password;
msg = "Input Filter:: UsernameToken with username '"
+ username
+ "'received in the SOAP message will not be added to
the "
+ "validator query because the username and password
from "
+ "another UsernameToken have already been added.";
valHandle.EnforcerLogMsg(valHandle.GetWarningLogType(),
msg);
}
else if (tok is X509SecurityToken && !certAdded)
{
X509SecurityToken certToken = (X509SecurityToken)tok;
X509Certificate cert = certToken.Certificate;
string base64cert = cert.ToBase64String();
EnforcerXMLTree certNode =
query.newNode(valHandle.GetTagProperty());
certNode.setName(valHandle.GetTagCert());
certNode.setStringValue(base64cert);
query.appendChild(certNode);
certAdded = true;
msg = "Input Filter:: Added to the validator query is the
"
+ " X509SecurityToken " + "containing the cert:\n"
+ base64cert;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(),
msg);
}
else if (tok is X509SecurityToken && certAdded)
{
X509SecurityToken certToken = (X509SecurityToken)tok;
X509Certificate cert = certToken.Certificate;
string base64cert = cert.ToBase64String();
msg = "Input Filter:: Another X09SecurityToken received
in the "
+ "SOAP message has been added to the validator query.
"
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
133
+ "The X509SecurityToken will not be added to the
validator"
+ "query. The certificate contained inside this "
+ "X509SecurityToken is:\n" + base64cert;
valHandle.EnforcerLogMsg(valHandle.GetWarningLogType(),
msg);
他のセキ ュ リ テ ィ
ト ー ク ン を追加
し ないで く だ さ い
SOAP 証明書が
存在 し ない場合
HTTP 接続から
ク ラ イアン ト
証明書を
追加 し ます
SOAP ヘ ッ ダー
で SSO Cookie
を検索 し ます
134
}
else
{
msg = "Input Filter:: A SecurityToken of unknown type has
been"
+ " received in the SOAP message. "
+ "It will not be added to the validator query. Only "
+ "UsernameTokens and X509SecurityTokens are sent to
the "
+ "validator to be authenticated. "
+ "The type of the received token
is:\n"+tok.GetType();
valHandle.EnforcerLogMsg(valHandle.GetWarningLogType(),
msg);
}
} //for
if (!certAdded && httpClientCert != null)
{
msg = "Input Filter:: X509SecurityToken was not received in
the "
+ "SOAP request, adding client certificate to the
validator "
+ "XML query.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
EnforcerXMLTree certNode =
query.newNode(valHandle.GetTagProperty());
certNode.setName(valHandle.GetTagCert());
certNode.setStringValue(httpClientCert);
query.appendChild(certNode);
}
// look for cookies in SOAP header first, then in HTTP cookie
header
SoapEnvelope envelope = requestContext.Envelope;
XmlElement header = envelope.Header;
XmlNodeList list =
header.GetElementsByTagName(valHandle.GetDefaultCookieName(),
Helper.BALT_NS);
string nonce = null;
if (list != null && list.Count > 0)
{
XmlNode baltNonce = list[0];
if (baltNonce != null)
{
第5章
nonce = baltNonce.InnerText;
msg = "Input Filter:: Validator nonce received in the SOAP
"
+ "message will be added to the validator query. "
+ "It is:\n"+nonce;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(),
msg);
SOAP に Cookie
が存在 し ない
場合 HTTP
ヘ ッ ダーで SSO
Cookie を
検索 し ます
XML 要求に
SSO の nonce
を追加 し ます
SSO Cookie が
存在 し ません
でした
}
}
if (nonce == null)
{
// now look in HTTP cookie header
msg = "Input Filter:: Validator nonce was not received in the
SOAP"
+ " message, now checking for cookies in HTTP header.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
string name = valHandle.GetDefaultCookieName();
HttpCookieCollection collection = httpRequest.Cookies;
for(int iter = 0; iter < collection.Count; iter++)
{
string key = collection.GetKey(iter);
if (String.Compare(key, name, true) == 0)
{
nonce = collection[iter].Value;
msg = "Input Filter:: Validator nonce received as an
HTTP"
+ " cookie. It is:\n"+nonce;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(),
msg);
break;
}
}
}
if (nonce != null)
{
// add the cookie extracted from SOAP or from HTTP header
// to the validator request
EnforcerXMLTree nonceNode =
query.newNode(valHandle.GetTagProperty());
nonceNode.setName(valHandle.GetTagNonce());
nonceNode.setStringValue(nonce);
query.appendChild(nonceNode);
}
else
{
// log msg
msg = "Input Filter:: Validator nonce not found in the
request.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
}
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
135
Cookie が有効で
ある場合 SSO の
nonce のサポー ト
を通知 し ます
この ク ラ イ ア ン
ト に対 し て SSO
の nonce は
サポー ト さ れて
いません
XML ク エ リ を
返 し ます
// add 'native_nonce' property
int enableCookie = valHandle.GetEnableCookies();
if (enableCookie > 0)
{
EnforcerXMLTree nativeNonceNode =
query.newNode(valHandle.GetTagProperty());
nativeNonceNode.setName(valHandle.GetTagNativeNonce());
nativeNonceNode.setStringValue(valHandle.GetValueEnable());
query.appendChild(nativeNonceNode);
}
else
{
msg = "Input Filter:: The Enforcer Web cookies support not
enabled";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
}
// log the validator query
string queryStr = query.toString(1);
msg = "Input Filter:: Validator query constructed.\n"+queryStr;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
return query;
}
catch (Exception e)
{
string msg =
"Input Filter:: Exception when constructing validator
query:\n "
+ e.Message;
SoapException se =
Helper.ConstructException(Helper.FC_SERVER_UNABLETOAUTHENTICATE,
Helper.BALT_NS, Helper.SERVERFAULTSTRING);
throw se;
}
} //constructValidatorQuery
Policy Validator へのク エ リ
InputFilter の ProcessMessage() メ ソ ッ ド は、 SendValidator() メ ソ ッ ド を 使用 し て、
Policy Validator への ク エ リ を行い、 応答を処理 し ます。 ク エ リ は、 次の コ ー ド 例に示す よ う な コ ー
ド に よ っ て Policy Validator に送信 さ れ ます。
public void SendValidatorQuery(EnforcerXMLTree query, EnforcerCOMHandle
valHandle)
{
try
{
EnforcerXMLTree reply = valHandle.SendQuery(query);
136
第5章
.... 応答の処理 ...
}
catch (Exception e)
{
... 応答の例外の処理 ...
}
} //SendValidatorQuery
Policy Validator の応答結果の実行
Policy Validator に ク エ リ を行い、 応答を処理す る には、 SendValidatorQuery() メ ソ ッ ド を使
用 し ます。次の コ ー ド 例に、 こ の SendValidatorQuery() メ ソ ッ ド を示 し ます。Policy Validator
が要求 さ れた動作を許可 し た場合、 SendValidatorQuery() メ ソ ッ ド は、 SSO の nonce を現在
の HttpContext に追加 し 、 それ以降のユーザーの再認証を不要に し ます。 次の コ ー ド 例に示す
よ う に、 Cookie は GetValidatorCookieFromReply() メ ソ ッ ド に よ っ て HttpContext に追
加 さ れます。
public void SendValidatorQuery(EnforcerXMLTree query, EnforcerCOMHandle
valHandle)
{
try
{
... Policy Validator への ク エ リ ...
if (reply != null)
{
// log reply
string replyStr = reply.toString(1);
String msg = "Input Filter:: Validator reply
received:\n"+replyStr;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
// read validator 'action' property
string action = reply.getChildStringValue
(valHandle.GetTagAction());
if (String.Compare(action, valHandle.GetAllowAction(), true)
== 0)
{
// access allowed, get validator nonce and add to
HttpContext Items
// so that it can be returned to the client by the output
filter.
msg = "Input Filter:: Validator action is ALLOW, locating
validator "
+ "nonce to return to client.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(),
ア ク セスの許可
msg);
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
137
応答で返 さ れた
SSO の nonce を
取得 し ます
ア ク セスが
拒否 さ れたため
ログ イ ンの失敗を
示す SOAP 例外
を ス ロー し ます
GetValidatorCookieFromReply(reply, valHandle);
AddPersonalizationData(reply, valHandle);
}
else if (String.Compare(action, valHandle.GetDenyAction(),
true) == 0)
{
//deny access, throw exception and return <Policy>
msg = "Input Filter:: Validator action is DENY. The
Enforcer will "
+ "return WS-Policy in the SOAP Response Message.";
valHandle.EnforcerLogMsg(valHandle.GetWarningLogType(),
msg);
SetWSPolicy(reply, valHandle);
SoapException se =
Helper.ConstructException(Helper.FC_CLIENT_FAILEDAUTHENTICATION,
Helper.BALT_NS, Helper.CLIENTFAULTSTRING);
throw se;
確認中にエ ラ ー
}
が発生 し ま し た
else
{
// error or unknown action
msg = "Input Filter:: Validator action is '" + action +
"', will "
+ "return 'UnableToAuthenticate' faultcode.";
valHandle.EnforcerLogMsg(valHandle.GetWarningLogType(),
msg);
SoapException se =
Helper.ConstructException(Helper.FC_SERVER_UNABLETOAUTHENTICATE,
Helper.BALT_NS, Helper.SERVERFAULTSTRING);
throw se;
}
Policy Validator
}
から 応答を取得
else
で き ませんで し た
{
String msg = "Input Filter:: Validator reply could not be
read. The client "
+ "cannot be authenticated.";
valHandle.EnforcerLogMsg(valHandle.GetErrorLogType(), msg);
SoapException se =
Helper.ConstructException(Helper.FC_SERVER_UNABLETOAUTHENTICATE,
Helper.BALT_NS, Helper.SERVERFAULTSTRING);
throw se;
}
}
catch (SoapException se)
{
138
第5章
// this will probably be the SOAP exception constructed above,
throw it again
throw se;
}
catch (Exception e)
{
valHandle.EnforcerLogMsg(valHandle.GetErrorLogType(), "Input
Filter::\n"
+ e.Message);
SoapException se =
Helper.ConstructException(Helper.FC_SERVER_UNABLETOAUTHENTICATE,
Helper.BALT_NS, Helper.SERVERFAULTSTRING);
throw se;
}
} //SendValidatorQuery
HttpContext への SSO の nonce の追加
こ の処理の後、 nonce が存在す る 場合、GetValidatorCookieFromReply() メ ソ ッ ド は Policy
Validator 応答か ら SSO の nonce を抽出 し ます。 次の コ ー ド 例で、 こ の動作を説明 し ます。
public void GetValidatorCookieFromReply
(
EnforcerXMLTree reply,
EnforcerCOMHandle valHandle
)
{
string nonce = null;
nonce = reply.getChildStringValue(valHandle.GetTagNonce());
if (nonce != null)
{
String msg = "Input Filter:: The nonce contained in the validator
reply is:\n"
+ nonce;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
HttpContext.Current.Items.Add(Helper.SACLIENTCOOKIE, nonce);
}
else
{
String msg = "Input Filter:: The validator reply does not contain
a nonce.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
}
} //GetValidatorCookieFromReply
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
139
WSE Enforcer プ ラ グ イ ンのポ リ シー要素の設定
ア ク セ ス が拒否 さ れた場合、 WSE Enforcer プ ラ グ イ ン は、 リ ソ ースへのア ク セ ス時に認証が使用
さ れたか ど う か を確認 し 、 その結果に基づいて、使用可能な認証方式を指示す る XML プ ロ パテ ィ
を組み込みます。 こ こ では SetWSPolicy() メ ソ ッ ド が使用 さ れ ます。 リ ソ ースへのア ク セ ス を
防 ぐ た め、 例外が ス ロ ー さ れ ま す。 こ の例外は SOAP エ ラ ー と し て 直列化 さ れ ま す。 後述 の
OutputFilter に よ っ て、 認証 ヒ ン ト が SOAP メ ッ セージに追加 さ れます。
応答に認証 ヒ ン ト
が含まれている
かど う か
チ ェ ッ ク し ます
認証 ヒ ン ト を
取得 し ます
認証方式を
HttpContext に
追加 し ます
140
public void SetWSPolicy(EnforcerXMLTree reply, EnforcerCOMHandle
valHandle)
{
int children = reply.getNumChildren();
EnforcerXMLTree authServersElem = null;
for (int i=0; i< children; i++)
{
EnforcerXMLTree child = reply.getChild(i);
string childName = child.getName();
if (childName != null &&
String.Compare(childName,
valHandle.GetTagAuthenticationServerTypes(), true) == 0)
{
authServersElem = child;
break;
}
}
if (authServersElem != null)
{
int count = authServersElem.getNumChildren();
string[] authTypes = new string[count];
bool authAdded = false;
string msg = "Input Filter:: The SelectAccess authentication
method with "
+ "which the client is required to authenticate with:";
for (int j=0; j<count; j++)
{
EnforcerXMLTree child = authServersElem.getChild(j);
string childName = child.getName();
if (childName != null &&
String.Compare(childName,
valHandle.GetTagAuthenticationMethod(), true) == 0)
{
authTypes[j] = (string)child.getStringValue();
msg = msg + "\n" + authTypes[j];
authAdded = true;
}
}//for
if (authAdded)
{
// log
第5章
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
HttpContext.Current.Items.Add(Helper.AUTHENTICATIONTYPES,
authTypes);
}
else
{
string mesg = "Input Filter:: The validator authentication
methods will "
+ "not be added to the WS-Policy in the SOAP response.";
valHandle.EnforcerLogMsg(valHandle.GetWarningLogType(),
mesg);
}
}
else
{
// log
string msg = "Input Filter:: <"
+valHandle.GetTagAuthenticationServerTypes()
+ "> was not found in the validator reply. WS-Policy in the
SOAP "
+ "response will not be set.";
valHandle.EnforcerLogMsg(valHandle.GetWarningLogType(), msg);
}
} //SetWSPolicy
SOAP 出力の フ ィ ル タ リ ン グ
InputFilter が要求を処理 し 、 .NetWeb サービ ス へのア ク セ ス を許可 し た後、 OutputFilter
に よ っ て、 HTTP 応答への Cookie の追加、 SOAP メ ッ セージ の暗号化お よ び署名が行われ ま す。
OutputFilter ク ラ ス は ProcessMessage() メ ソ ッ ド を オーバー ラ イ ド し て、 SOAP 応答 を
フ ィ ル タ リ ン グ し ます。 141 ページの 「SOAP 出力の フ ィ ル タ リ ン グ」 に、 ProcessMessage()
の コ ー ド を示 し ます。
通常、 ProcessMessage() メ ソ ッ ド は SSO の nonce を SOAP ヘ ッ ダーお よ び HTTP ヘ ッ ダーに
追加 し ます。 142 ページの 「SOAP ヘ ッ ダーへの nonce の追加」 に示す よ う に、
AddValidatorCookie() メ ソ ッ ド が HttpContext の nonce を抽出 し て SOAP ヘ ッ ダーに挿入
し ます。 その後、 SOAP 応答 メ ッ セージの暗号化 と 署名が行われます。
SOAP エ ラ ーが発生 し た と ProcessMessage() メ ソ ッ ド が判断 し た場合、 こ の メ ソ ッ ド は 143
ペー ジ の 「SOAP 応答への認証 ヒ ン ト の追加」 に示す HandleFault() メ ソ ッ ド を 呼び出 し 、
InputFilter の処理中に HttpContext に追加 さ れた認証 ヒ ン ト を コ ピー し ます。
public override void ProcessMessage(SoapEnvelope envelope)
{
EnforcerCOMHandle valHandle = Helper.GetEnforcerCOMHandle();
if (valHandle != null)
{
XmlElement bodyElem = envelope.Body;
XmlDocument doc = bodyElem.OwnerDocument;
// check if the SOAP Response contains a SOAP Fault
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
141
SOAP 例外を
確認 し ます
例外が発生 し て
いない場合は
nonce を追加 し て
メ ッ セージ を暗号
化 / 署名 し ます
Policy Validator
への有効な
ハン ド ルを取得
で き ませんで し た
XmlNodeList nodelist =
envelope.GetElementsByTagName(Helper.SOAP_FAULT,
Helper.SOAP_NS);
nodelist = doc.GetElementsByTagName(Helper.SOAP_FAULT,
Helper.SOAP_NS);
if (nodelist != null && nodelist.Count>0)
{
HandleFault(envelope, nodelist, valHandle);
// HandleFault calls SignResponseMessage
EncryptResponseMessage(envelope.Context, valHandle, false);
}
else
{
AddValidatorCookie(envelope, valHandle);
SignResponseMessage(envelope.Context, null, valHandle);
EncryptResponseMessage(envelope.Context, valHandle, true);
}
}
else
{
string mesg = "Output Filter:: Validator Handle is Null, sending
faultcode: "
+Helper.FC_SERVER_UNABLETOAUTHENTICATE;
valHandle.EnforcerLogMsg(valHandle.GetErrorLogType(), mesg);
SoapException se =
Helper.ConstructException(Helper.FC_SERVER_UNABLETOAUTHENTICATE,
Helper.BALT_NS, Helper.SERVERFAULTSTRING);
throw se;
}
} //processMessage
SOAP ヘ ッ ダーへの nonce の追加
InputFilter に よ っ て、 SSO の nonce が HttpContext に 追加 さ れ て い る 場合 が あ り ま す。
OutputFilter は、 AddValidatorCookie() メ ソ ッ ド を使用 し て、 HttpContext か ら nonce
を抽出 し 、 ヘ ッ ダー と し て SOAP 応答に追加 し ます。 AddValidatorCookie() お よ びヘルパー
メ ソ ッ ド であ る AddValidatorCookieToSoap() メ ソ ッ ド を次に示 し ます。
Policy Validator
の nonce を
HTTP ヘ ッ ダー
に追加 し ます
142
public void AddValidatorCookie(SoapEnvelope envelope, EnforcerCOMHandle
valHandle)
{
// check if we need to send a validator nonce to the client
string nonce = (string)
HttpContext.Current.Items[Helper.SACLIENTCOOKIE];
if (nonce != null)
{
HttpCookie cookie = new HttpCookie
(valHandle.GetDefaultCookieName(),nonce);
HttpContext.Current.Response.Cookies.Add(cookie);
第5章
AddValidatorCookieToSoap(envelope, nonce, valHandle);
string msg = "Output Filter:: Sending validator nonce to the Web
service "
+ " client:\n" + nonce;
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
}
else
{
string msg = "Output Filter:: The validator nonce was not
found.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
}
} //SendValidatorCookie
public void AddValidatorCookieToSoap
(
SoapEnvelope envelope,
string nonce,
EnforcerCOMHandle valHandle
)
{
XmlElement header = envelope.CreateHeader();
XmlDocument document = header.OwnerDocument;
nonce を新 し い
XmlNode baltNonce = document.CreateNode(XmlNodeType.Element,
SOAP ヘ ッ ダー
Helper.BALT_NS_PREFIX,
に追加 し ます
valHandle.GetDefaultCookieName(),
Helper.BALT_NS);
baltNonce.InnerText = nonce;
header.AppendChild(baltNonce);
}//AddValidatorCookieToSoap
SOAP 応答への認証 ヒ ン ト の追加
SOAP エ ラ ーが発生す る 場合、 複数の原因が考え ら れます。 た と えば、 InputFilter がア イ デン
テ ィ テ ィ を認証で き なか っ た可能性が あ り ま す。 こ の場合、 HandleFault() メ ソ ッ ド に よ り 、
InputFilter が HttpContext に追加 し たすべての認証 ヒ ン ト が抽出 さ れ、 SOAP エ ンベ ロ ー
プに コ ピー さ れます。
public void HandleFault
(
SoapEnvelope envelope,
XmlNodeList nodelist,
EnforcerCOMHandle valHandle
)
{
string mesg = "Output Filter:: The Web Service or a Web Service
filter is "
+ "sending a fault.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), mesg);
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
143
SOAP エ ラ ーが
発生 し ているか
ど う かを
確認 し ます
エ ラ ーの詳細を
取得 し ます
エラー コー ドが
ログ イ ンの失敗
と 関連 し ている
かど う かを
確認 し ます
// will contain only one fault element
XmlNode faultNode = nodelist[0];
XmlNodeList faultList = faultNode.ChildNodes;
if (faultList != null)
{
string faultCode = null;
string faultString = null;
string faultDetail = null;
string msg = "Output Filter::";
for (int i=0; i<faultList.Count; i++)
{
XmlNode child = faultList[i];
if (String.Compare(child.LocalName, Helper.SOAP_FAULTCODE,
true) == 0)
{
faultCode = child.InnerText;
msg = msg + "\n" +"The FaultCode is: "+faultCode;
}
else if
(String.Compare(child.LocalName,Helper.SOAP_FAULTSTRING,true) == 0)
{
faultString = child.InnerText;
msg = msg + "\n" +"The FaultString is: "+faultString;
}
else if
(String.Compare(child.LocalName,Helper.SOAP_FAULTDETAIL,true) == 0)
{
faultDetail = child.InnerText;
msg = msg + "\n" +"The FaultDetail is: "+faultDetail;
}
}
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
if (faultCode != null)
{
int index = faultCode.IndexOf(":");
string code = faultCode.Substring(index+1,
faultCode.Length-(index+1));
if (String.Compare(code,
Helper.FC_CLIENT_FAILEDAUTHENTICATION, true) == 0)
{
msg = "Output Filter::The Web Service client could not be
"
+ "authenticated, WS-Policy will be added to the SOAP
response.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(),
msg);
string[] authTypes =
(string[])HttpContext.Current.Items[Helper.AUTHENTICATIONTYPES];
144
第5章
認証 ヒ ン ト が
存在するかど う
かを確認 し ます
ログ イ ン タ イ プ
のリ ス ト を
SOAP ヘ ッ ダー
に追加 し ます
if (authTypes != null)
{
int total = authTypes.GetUpperBound(0);
if (total >= 0)
{
bool signPolicy = false;
int sign = valHandle.GetEnableSOAPSigning();
if (sign > 0)
{
signPolicy = false;
}
AddSignedPolicyHeader(envelope,authTypes,signPolicy,valHandle);
msg = "Output Filter:: WS-Policy added to the SOAP
response.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(), msg);
}
}
利用可能な
else
認証 ヒ ン ト が
存在 し ません
{
SignResponseMessage(envelope.Context, null,
valHandle);
msg = "Output Filter:: Failed to add WS-Policy to the
SOAP "
+ "response. The authentication method required
for client "
+ "authentication is not known.";
valHandle.EnforcerLogMsg(valHandle.GetWarningLogType(), msg);
}
}
ログ イ ン以外の
else
エ ラ ーが
確認 さ れま し た
{
SignResponseMessage(envelope.Context, null, valHandle);
msg = "Output Filter:: The faultcode is not recognized.
WS-Policy "
+ "will not be added to the SOAP response.";
valHandle.EnforcerLogMsg(valHandle.GetDebugLogType(),
msg);
}
}
} //faultList != null
} //HandleFault
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
145
WSE Enforcer プ ラ グ イ ンの作成
WSE Enforcer プ ラ グ イ ン を作成す る には、 まず、 Enforcer COM の DLL がシ ス テ ムに イ ン ス ト ー
ル さ れてい る こ と 、 お よ び、 プ ロ ジ ェ ク ト が DLL への参照を含んでい る こ と を確認す る 必要があ
り ます。 Web サービ ス フ ィ ル タ は、 Enforcer COM API を使用 し て、 Policy Validator に接続 し ます。
Select Access が イ ン ス ト ール さ れてい る コ ン ピ ュ ー タ には、Enforcer COM の DLL はすでに イ ン ス
ト ール さ れてい ま す。 それ以外の場合は、 オペレ ーテ ィ ン グ シ ス テ ム に enforcer32d.dll を
登録す る 必要があ り ます。 次の コ マ ン ド を実行 し て く だ さ い。
C:\>regsvr32 /s "<SA_Install_Directory>\bin\enforcer32.dll"
サイ ト 固有デー タ の組み込み
カ ス タ ム プ ラ グ イ ン を作成 し 、 サ イ ト 固有のデー タ を XML ク エ リ に追加す る こ と がで き ます。
3 種類の Web サーバーすべての site_data プ ラ グ イ ンのサ ンプルについては、
\source\server_plugins を参照 し て く だ さ い。 各サン プルには、 カ ス タ ム プ ラ グ イ ン を使
用 し て時間デー タ を抽出す る 方法が示 さ れてい ます。
Policy Validator ク エ リ にサイ ト のデー タ を挿入する方法
サーバーがサン プル プ ラ グ イ ン を ロ ー ド す る 際、 Enforcer プ ラ グ イ ン が Policy Validator に送信す
る 各要求に、 site_data と 呼ばれ る XML ク エ リ 要素が組み込ま れます。 こ の要素の出力は、 次
に示す よ う に、 各 Enforcer プ ラ グ イ ン に よ っ て異な り ます。
•
Apache 2 Enforcer プ ラ グ イ ン の場合 : apache time is <time>
•
IIS Enforcer プ ラ グ イ ンの場合 : IIS_Sample Plugin, Adding Header :
•
Sun ONE Web Server Enforcer プ ラ グ イ ン の場合 : iplanet time is <time>
site_data
site_data プ ラ グ イ ンは、 ヘ ッ ダーを挿入す る こ と に よ り 、 Enforcer プ ラ グ イ ン が要求を処理す
る 前に実行 さ れ ます。 Web サーバーは時間のデー タ を ク ラ イ ア ン ト に送信 し ます。
site_data プ ラ グ イ ン を ロー ド するには
1
次の呼び出 し を組み込みます。
•
Apache Web サーバーの場合 :
ap_table_add(r->notes, "site_data", "value")
•
IIS Web サーバーの場合 :
pHeaders->AddHeader(pFC, "site_data", "value")
pFC は HTTP_FILTER_CONTEXT へのポ イ ン タ を示 し ます。
•
Sun ONE (iPlanet) Web サーバーの場合 :
pblock_nvinsert("site_data", "value", rq->vars)
2
146
必要に応 じ て各 Web サーバー固有の site_data プ ラ グ イ ン を ロ ー ド し 実行す る よ う にサー
バーを設定 し ます。
第5章
•
Apache Web サーバーの場合 : enforcer_module 行の直後に次の ス テー ト メ ン ト を追加
し ます。
LoadModule site_data_module "<path_to_site_data_plugin>"
•
IIS Web サーバーの場合 : コ ン ソ ールを使用 し て、 IIS Enforcer プ ラ グ イ ン の前の呼び出 し
チ ェーン に site_data プ ラ グ イ ン を追加 し ます。
•
Sun ONE (iPlanet) Web サーバーの場合 : 必要に応 じ て、 次の行を各設定フ ァ イ ルに追加 し
ます。
Obj.conf: enforcer_check 行の前に次の行を追加 し ます。
PathCheck fn="add_site_data"
Magnus.conf: 次の 2 行を追加 し ます。
Init fn="load-modules" shlib="path_to_plugin"
funcs="add_site_data"
こ れに よ り 、 Enforcer プ ラ グ イ ン で通常はサポー ト さ れないデー タ が抽出 さ れ、 Policy
Validator に転送 さ れ る ため、 さ ら に詳細な処理を行 う こ と が可能にな り ます。
セキ ュ リ テ ィ サービ スのカ ス タ マ イ ズ : Enforcer API
147
148
第5章
6 個別化属性の使用 : Personalization API
Select Access では、 Enforcer プ ラ グ イ ンがア イ デン テ ィ テ ィ の個別化デー タ を提供 し ます。 個別化
デー タ は、ア ク セ ス制御以外の目的に も 使用 さ れ る ア イ デン テ ィ テ ィ 属性です。こ の章では、Select
Access を設定 し て個別化を サポー ト す る 方法、 Policy Validator が個別化属性を Enforcer プ ラ グ イ
ン に提供す る 仕組み、 お よ び Enforcer プ ラ グ イ ン が こ う し た情報を アプ リ ケーシ ョ ン で利用可能
にす る 仕組みについて説明 し ます。
個別化を使用す る には、 Policy Builder に よ っ て設定を有効にす る 必要があ り ます。 詳細は、 『HP
OpenView Select Access 6.2 Policy Builder ガ イ ド 』 を参照 し て く だ さ い。
こ の章の概要
こ の章では、 個別化お よ び Personalization API の機能の詳細 と 、 こ の機能を使用 し 、 業務上のニー
ズに合わせてデー タ を操作す る 方法について説明 し ます。
•
Personalization API について (149 ページ )
•
Policy Validator での個別化のサポー ト (150 ページ )
•
Enforcer プ ラ グ イ ン での個別化のサポー ト (150 ページ )
•
各種 リ ソ ース か ら の個別化デー タ の利用 (154 ページ )
Personalization API について
Personalization API は、 本質的に メ ソ ッ ド の ラ イ ブ ラ リ では あ り ま せん。 こ れは、 Policy Builder、
Validator API、 お よ び Enforcer API の連携に よ っ て提供 さ れ る 機能です。 Enforcer プ ラ グ イ ン と
Policy Validator は XML を使用 し て通信を行 う ため、 Policy Validator は、 追加のア イ デン テ ィ テ ィ
デー タ を含む、 ほぼすべての情報を Enforcer プ ラ グ イ ンに渡す こ と がで き ます。
こ の個別化デー タ は、 専用の XML プ ロ パテ ィ リ ス ト で送信 さ れ、 Policy Validator の XML 応答に
含 ま れ ま す。 プ ロ パ テ ィ リ ス ト は 定 数 ENFORCER_P13NINFO に よ っ て 識 別 さ れ、 文 字 列
“personalization” と し て定義 さ れ ます。属性は、個別化プ ロ パテ ィ リ ス ト 内のプ ロ パテ ィ と
し てエ ン コ ー ド さ れた URL です。 属性のプ ロ パテ ィ 名は、 Policy Builder の設定に よ っ て決ま り ま
す ( 後述の説明を参照 )。 次のサン プルに、 個別化プ ロ パテ ィ リ ス ト お よ び個別化プ ロ パテ ィ を示
し ます。
<PolicyValidatorReply>
<PROPERTY NAME="queryID">2</PROPERTY>
<PROPERTY NAME="authenticated_dn">cn=john doe,ou=users,dc=hp,dc=com
</PROPERTY>
ア イ デン テ ィ テ ィ
属性
<PROPERTYLIST NAME="personalization">
149
<PROPERTY NAME="email">steve$40hp%2Ecom</PROPERTY>
<PROPERTY NAME="cname">Steve%20Kotsopoulos</PROPERTY>
<PROPERTY NAME="user">
cn%3Djohn%20doe%2Cou%3Dusers%2C%2Cdc%3Dhp%2Cdc%3Dcom
</PROPERTY>
<PROPERTY NAME="groups">users,grinders</PROPERTY>
</PROPERTYLIST>
... Federation サーバーのプ ロ パテ ィ ...
<PROPERTY NAME="action">ALLOW</PROPERTY>
</PolicyValidatorReply>
Policy Validator での個別化のサポー ト
Enforcer プ ラ グ イ ン が個別化属性 を 受 け 取 る に は、 Policy Validator の認証プ ラ グ イ ン に よ っ て
XML 応答に個別化プ ロ パテ ィ リ ス ト が組み込まれてい る 必要があ り ます。
認証プ ラ グ イ ン がア イ デン テ ィ テ ィ の認証を行っ た後、 認証プ ラ グ イ ンは Validator API の メ ソ ッ
ド で あ る handleUserInfo() を 呼び出 し て、 ア イ デン テ ィ テ ィ を UserCache に追加 し ま す。
ま た、 こ の メ ソ ッ ド は現在の Select Auth ノ ー ド の個別化属性を抽出 し 、 個別化プ ロ パテ ィ リ ス ト
に組み込み ます。 こ の メ ソ ッ ド を呼び出す認証プ ラ グ イ ンは、 こ れ ら の手順のみで、 個別化を サ
ポー ト で き る よ う にな り ます。 handleUserInfo() メ ソ ッ ド の詳細は、 64 ページの 「ア イ デン
テ ィ テ ィ の認証」 を参照 し て く だ さ い。
Enforcer プ ラ グ イ ン での個別化のサポー ト
Enforcer プ ラ グ イ ン が リ ソ ースへのア ク セ ス の承認を要求 し た場合、 Policy Validator は、 ア イ デン
テ ィ テ ィ の認証が成功 し た時点で個別化デー タ を提供 し ま す。 個別化属性は、 Policy Validator プ
ラ グ イ ン応答内の専用のプ ロ パテ ィ リ ス ト に記載 さ れます。
Enforcer プ ラ グ イ ン は Policy Validator の応答か ら 個別化属性を抽出 し 、 ロ ーカル環境に配置 し ま
す。 こ れに よ り 、 サーブ レ ッ ト や CGI プ ロ グ ラ ム な ど の ア プ リ ケーシ ョ ン におい て、 ア イ デ ン
テ ィ テ ィ の属性を利用 し て表示を カ ス タ マ イ ズす る こ と が可能にな り ます。
保護対象のサーバーの種類に よ っ ては、 個別化デー タ が異な っ た場所に格納 さ れ る 場合があ り ま
す。 Web サーバーでは、 HTTP 要求のヘ ッ ダーが設定 さ れ、 そ こ に環境変数 も 組み込 ま れ ま す。
サーブ レ ッ ト では、 HashMap が要求オブジ ェ ク ト に追加 さ れ ます。 他のアプ リ ケーシ ョ ン では、
属性が外部環境に公開 さ れ る 可能性があ り ます。
Apache 2 Enforcer プ ラ グ イ ン な ど で HTTP ヘ ッ ダ ー を 使 用 し た 個 別化 を サ ポ ー ト す る 場 合、
Enforcer プ ラ グ イ ンは個別化ヘ ッ ダーが偽装 さ れていないか確認す る 必要があ り ます。HTTP 要求
内に個別化ヘ ッ ダーが含 ま れてい る 場合、 その要求は拒否 さ れ ま す。 こ れに よ り 、 HTTP 要求に
偽装 さ れた個別化属性が組み込まれ る こ と を防ぎ ます。
た と えば、 Enforcer プ ラ グ イ ン が、 Select Access の個別化プ レ フ ィ ッ ク ス (SA) を使用 し て環境変
数を設定 し た場合、要求の処理を開始す る 前に SA で始ま る すべての変数を ス キ ャ ンす る 必要があ
り ます。 サーブ レ ッ ト では、 HTTP 要求のヘ ッ ダーか ら 個別化デー タ を削除す る 必要があ り ます。
個別化の変数を初期化 し 、 個別化属性が無許可で組み込ま れ る こ と を防ぎ ます。
150
第6章
こ のセ ク シ ョ ン では、 第 4 章、 「認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API」 の Enforcer
プ ラ グ イ ンの例を使用 し て、 Enforcer プ ラ グ イ ン での個別化のサポー ト について説明 し ます。
サーブ レ ッ ト Enforcer プ ラ グ イ ンの例
Policy Validator 要求を作成す る 前に、 サーブ レ ッ ト Enforcer プ ラ グ イ ンは個別化の HashMap を初
期化 し ます。 次の コ ー ド 例は、 こ の方法を示 し てい ます。
個別化プ ロ パテ ィ リ ス ト は、 定数 ENFORCER_P13NINFO に よ っ て識別 さ れ ます。 個別化デー タ
へのア ク セ ス方法は、 Policy Validator 応答内のそれ以外のプ ロ パテ ィ リ ス ト へのア ク セ ス と 同様
です。
public ServletTransaction
(
HttpServletRequest request,
HttpServletResponse response,
String serverName,
Enforcer enforcer
) throws EnforcerException {
... 親 コ ン ス ト ラ ク タ の呼び出 し ...
... Policy Validator 要求の作成 ...
// initialize personalization map
m_request.removeAttribute(SA_PERSONALIZATION);
m_p13nMap = new HashMap();
m_request.setAttribute(SA_PERSONALIZATION, m_p13nMap);
}
サーブ レ ッ ト HTTP ヘ ッ ダーへの個別化デー タ の追加
個別化のマ ッ プ を初期化 し た後、 サーブ レ ッ ト Enforcer プ ラ グ イ ンは Policy Validator への ク エ リ
を行い ます。 ア ク セ ス が許可 さ れた場合は、 個別化属性を抽出 し て HashMap 内に組み込みます。
応答から ア イ デン
テ ィ テ ィ デー タ
のプ ロパテ ィ
リス ト を
抽出 し ます
/**
* sets personalization data, by walking through the ENFORCER_P13NINFO
nested
* propertylist in the XML reply, and calling application-specific code
to
* actually set each personalization name/value pair
*
*/
public void setPersonalization() throws EnforcerException {
XmlElement p13nXml = m_reply.getChild(
DataStrings.ENFORCER_P13NINFO);
if (p13nXml == null) {
return;
}
個別化属性の使用 : Personalization API
151
if (! (p13nXml instanceof PropertyListElement)) {
logError("personalization data exists, but is not a property
list");
return;
}
PropertyListElement p13nList = (PropertyListElement)p13nXml;
try {
Enumeration e = p13nList.getPropertyValues();
while (e.hasMoreElements()) {
XmlElement child = (XmlElement)e.nextElement();
String name = child.getName();
String value = child.getText();
value = URLDecoder.decode(value, "UTF8");
setPersonalization(name, value);
}
}
catch (UnsupportedEncodingException e) {
throw new EnforcerException("failed to translate personalization
data", e);
}
プ ロパテ ィ リ ス ト
から ア イ デン テ ィ
テ ィ 属性を
抽出 し ます
}
/**
* Set personalization data by walking through the ENFORCER_P13NINFO
nested
* propertylist in the XML reply, and calling application-specific code
to
* actually set each personalization name/value pair.
*/
protected void setPersonalization(String name, String value) {
m_p13nMap.put(name, value);
}
Apache Enforcer プ ラ グ イ ンの例
Policy Validator 要求を 作成す る 前に、 Apache 2 Enforcer プ ラ グ イ ン は Select Access の個別化プ レ
フ ィ ッ ク ス を含む HTTP ヘ ッ ダーを検索 し ます。 要求に個別化ヘ ッ ダーが含ま れてい る 場合、 そ
の要求を拒否 し ます。 次の例は、 個別化 HTTP ヘ ッ ダーの検索方法を示 し てい ます。
/*
* make sure client isn't trying to inject their own personalization
headers
*/
static int suspicious_headers(request_rec *r){
char *p;
ap_table_do(sanitize_request_headers, r, r->headers_in, NULL);
if ((p = (char *) ap_table_get(r->notes, ENFORCER_P13NPREFIX)) !=
NULL) {
152
第6章
return 1;
}
return 0;
}
/*
* check for bad http request headers
* callback for ap_table_do
*/
static int sanitize_request_headers(void *data, const char *key, const
char *val){
request_rec *r = (request_rec*) data;
HTTP ヘ ッ ダー
内のア イ デン
if (strncasecmp(key, ENFORCER_P13NPREFIX,
テ ィ テ ィ デー タ
strlen(ENFORCER_P13NPREFIX)) == 0) {
を検索 し ます
EnforcerLog(ENFORCER_LOG_WARNING,
">#<rejecting suspicious header '%s=%s' for url %s", key, val,
r->uri);
ap_table_add(r->notes, ENFORCER_P13NPREFIX, key);
return 0;
}
return TRUE;
}
環境へのエ ク スポー ト
ア イ デン テ ィ テ ィ の要求内で個別化ヘ ッ ダーが検索 さ れなか っ た場合、 Apache 2 Enforcer プ ラ グ
イ ンは Policy Validator への ク エ リ を実行 し ます。 ア ク セ ス が許可 さ れた場合、 個別化属性を抽出
し 、 該当す る HTTP ヘ ッ ダーお よ び環境変数に組み込みます。
個別化プ ロ パテ ィ リ ス ト が定数 ENFORCER_P13NINFO に よ っ て識別 さ れ る 点に注意 し て く だ さ
い。 個別化デー タ へのア ク セ ス方法は、 Policy Validator 応答内のそれ以外のプ ロ パテ ィ リ ス ト へ
のア ク セ ス と 同様です。
応答から ア イ デン
テ ィ テ ィ デー タ
のプ ロパテ ィ
リス ト を
抽出 し ます
プ ロパテ ィ
リ ス ト から
各属性を
抽出 し ます
/*
* personalization support: export the user info as environment variables
*/
void EnforcerSetenv(XMLnode reply, request_rec *r){
XMLnode tempNode = NULL;
char empty = '\0';
int nVarCount, i;
XmlTreeNode * info = reply->getChild(ENFORCER_P13NINFO);
if (! info) {
return;
}
nVarCount = info->getNumChildren();
for (i=0; i<nVarCount;i++) {
tempNode = info->getChild(i);
auto_free<char> name(SYS_STRDUP(tempNode->getName()));
const char * value = tempNode->getStringValue();
if (name == NULL) {
個別化属性の使用 : Personalization API
153
continue;
} else {
// convert variable name to upper case
unsigned int j;
for (j=0; j < strlen(name.get()); j++) {
if (isalpha((int) name[j])) {
name[j] = (char) toupper(name[j]);
}
}
}
if (value == NULL) {
value = &empty;
}
ApacheSetenv(name.get(), value, r);
}
ア イ デン テ ィ
テ ィ デー タ を
HTTP ヘ ッ ダー
および環境変数
に追加 し ます
}
/*
* Apache-specific way of exporting environment variables
*/
void ApacheSetenv(char *name, const char *val, request_rec *r){
// add the variables to the request header, which also sets
environment variable
if(EnforcerGetP13Ncompat(Enforcer_Handle)) {
ap_table_add(r->headers_in, name, (char*) val);
} else {
int str_len = strlen(name) + strlen(ENFORCER_P13NPREFIX) +1;
auto_free<char> secure_name((char*) malloc(str_len));
snprintf(secure_name.get(), str_len, "%s%s", ENFORCER_P13NPREFIX,
name);
ap_table_add(r->headers_in, secure_name.get(), (char*) val);
}
// EnforcerLog(ENFORCER_LOG_DEBUG, "Setenv %s=%s", name, val);
// ap_table_add(r->subprocess_env, name, (char*) val);
}
各種 リ ソ ースからの個別化デー タ の利用
こ のセ ク シ ョ ン では、 環境変数を抽出 し 、 設定を表示す る コ ー ド を紹介 し ます。 取 り 上げ る コ ー
ド 例は、 CGI、 サーブ レ ッ ト 、 COM をは じ め と す る 一般的なサーバー環境を表示 し ます。 コ ー ド
例で対象 と な っ てい る のは、 現在の環境に関す る 表示のみです。 抽出 さ れた個別化デー タ を基に
し て、 カ ス タ マ イ ズ さ れた表示を実行す る のはアプ リ ケーシ ョ ン の役割です。
154
第6章
UNIX 環境変数の表示
こ の例では、 サーバー側の イ ン ク ルー ド を使用 し て、 利用可能なすべての環境変数の名前 と 値を
表示す る CGI (Common Gateway Interface) プ ロ グ ラ ム を実行 し ます。 設定済みの Apache 2 Enforcer
プ ラ グ イ ン を配置 し 、 次の コ マ ン ド を使用 し て CGI Perl ス ク リ プ ト を呼び出 し ます。
<!--#exec cgi="/sktest/allow/UNIX-printenv.cgi"-->
次の ス ク リ プ ト が、 Perl での環境変数を表示 し ます。
#!/usr/bin/perl
# Adjust the above line to find perl on your system
#
#
#
#
test-env.cgi Copyright 1995 by David Efflandt [email protected]
May be freely distributed and modified.
Author is not responsible for its use.
Note: Variable list will differ if run locally from UNIX
# Print content-type for HTTP/1.0 compatibility
print "Content-type: text/html\n\n";
# Print title and initial heading
print "<Head><Title>Environment</Title></Head>\n";
print "<Body><H1>List of all Environmental Variables</H1><HR>\n";
# Sort and print all environmental variables
foreach $key (sort keys(%ENV)) {print "$key = $ENV{$key}<p>\n";}
# Resolve REMOTE_HOST into name
$ip_address = $ENV{'REMOTE_ADDR'};
@numbers = split(/\./, $ip_address);
$ip_number = pack("C4", @numbers);
($name) = (gethostbyaddr($ip_number, 2))[0];
if (defined $name) {print "<HR>REMOTE_HOST resolves to: $name";}
# Print closing to point to your home page
print "<HR><P>\n";
print 'Return to my <A HREF=".">home page</A>.<P></BODY>';
exit;
サーブ レ ッ ト から の HTTP ヘ ッ ダーの表示
次の コ ー ド 例に示す ServletEnvPrint ク ラ ス は、 Select Access の個別化属性 を は じ め と す る
サーブ レ ッ ト のパ ラ メ ー タ を抽出 し ます。 ServletEnvPrint は、 HttpServletRequest ク ラ
ス か ら すべての要求の属性を抽出 し 、 抽出 し た属性の名前 と 値を表示 し ます。 属性が文字列でな
い場合、 サーブ レ ッ ト はその属性を Java ク ラ ス名に よ っ て示 し ます。 Policy Validator に よ っ て挿
入 さ れ る POST デー タ お よ び個別化属性については、 例に示す よ う に、 HttpServletRequest
に格納 さ れてい る 名前 と 値のペアのマ ッ ピ ン グが反復的に実行 さ れ ます。
import java.util.*;
個別化属性の使用 : Personalization API
155
設定の
プ ロパテ ィ を
表示 し ます
すべての属性の
名前 と 値を
表示 し ます
156
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletEnvPrint extends HttpServlet
{
public void init(ServletConfig config)
throws ServletException
{
m_config = config;
}
public void doPost(HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException
{
doGet(req, res);
}
public void doGet(HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException
{
m_count += 1;
res.setContentType("text/html; charset=UTF-8");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head><title>Servlet Environment</title>
</head>");
out.println("<body><h1>Servlet Environment</h1></body>");
out.println("<h2>Configuration Parameters</h2>");
out.println("<table>");
Enumeration enum = m_config.getInitParameterNames();
while (enum.hasMoreElements()) {
String name = (String)enum.nextElement();
String value = m_config.getInitParameter(name);
out.println("<tr><td>" + name + "</td><td>=</td><td>"
+ value + "</td></tr>");
}
out.println("</table>");
out.println("<h2>Request Attributes</h2>");
out.println("<table>");
enum = req.getAttributeNames();
while (enum.hasMoreElements()) {
String name = (String)enum.nextElement();
Object value = req.getAttribute(name);
if (value == null) {
out.println("<tr><td>" + name
+ "</td> <td>=</td><td>-NULL-</td></tr>");
}
else if (value instanceof String) {
第6章
out.println("<tr><td>" + name + "</td> <td>=</td><td>"
+ value + "</td></tr>");
}
else {
String className = value.getClass().getName();
out.println("<tr><td>" + name + "</td> <td>=
</td><td><b><em>"
+ className + "</em></b></td></tr>");
}
文字列以外の
オブ ジ ェ ク ト に
ついてはク ラ ス
名を表示 し ます
}
out.println("</table>");
out.println("<h2>Post Data Attributes</h2>");
Map mm = (Map)req.getAttribute("SA_PostData");
if (mm == null) {
out.println("<tr><td>no data</td></tr>");
}
else {
for (Iterator it=mm.keySet().iterator(); it.hasNext(); ) {
String name = (String)it.next();
String value = (String)mm.get(name);
out.println("<tr><td>" + name + "</td> <td>" + value
+ "</td></tr>");
}
}
out.println("</table>");
out.println("<h2>Personalization</h2>");
out.println("<table>");
Map m = (Map)req.getAttribute("SA_Personalization");
if (m == null) {
out.println("<tr><td>no data</td></tr>");
}
else {
for (Iterator it=m.keySet().iterator(); it.hasNext(); ) {
String name = (String)it.next();
String value = (String)m.get(name);
out.println("<tr><td>" + name + "</td><td>" + value +
"</td></tr>");
}
}
out.println("</table>");
out.println("</html>");
Select Access の
POST デー タ を
検索 し て
表示 し ます
ア イ デン テ ィ
テ ィ 属性を検索
し て表示 し ます
}
protected ServletConfig m_config;
protected int m_count = 0;
}
個別化属性の使用 : Personalization API
157
Visual Basic を使用 し たサーバー変数の表示
次の例は、 Visual Basic を使用 し て、 個別化属性を ASP (Active Server Page) か ら 表示 し てい ます。
<%@ Language=VBScript %>
<html>
<body>
<table>
<%
For Each elem In Request.ServerVariables
Response.Write "<tr><td>"
Response.Write "<b>" & elem & "=</b>" & _
Request.ServerVariables(elem)
Response.Write "</td></tr>"
Next
%></table>
</body>
</html>
158
第6章
7 マルチ リ ソ ースへのク エ リ : Policy API
Select Access では、 Enforcer プ ラ グ イ ンが Policy Validator に ク エ リ を行い、 各種の リ ソ ース を利用
す る こ と がで き ます。 Policy API は、 Enforcer API が拡張 さ れた も のです。 Policy API には、 マル
チ リ ソ ー ス の要求 を 含んだ ク エ リ の作成お よ び処理 を 簡素化す る メ ソ ッ ド が組み込 ま れて い ま
す。 こ の章では、 マルチ リ ソ ース の要求を行 う 方法について説明 し ます。
こ の章の概要
こ の章では、 マルチ リ ソ ー スへの ク エ リ と Policy API の詳細、 お よ び こ の機能を サポー ト す る た
めに コ ン ポーネ ン ト を プ ロ グ ラ ムす る 方法について説明 し ます。
•
159 ページの 「ア ク セ ス制御について」
•
160 ページの 「XML と Policy API について」
•
162 ページの 「Java Policy API の使用」
•
163 ページの 「C/C++ Policy API の使用」
•
163 ページの 「COM Policy API の使用」
ア ク セス制御について
リ ソ ース への無許可のア ク セ ス を防止す る こ と は、 ア ク セ ス 制御の主要な役割 と 見な さ れてい ま
す。 ア ク セ ス 制御には見落 と さ れがち な も う 1 つの側面があ り 、 それは リ ソ ース の存在自体を ア
イ デン テ ィ テ ィ に知 ら せない こ と です。 た と えば、 一部の メ ニ ュ ー オプシ ョ ンへのア ク セ ス し か
許可 さ れていないア イ デン テ ィ テ ィ に対 し て、 メ ニ ュ ー オプシ ョ ン の一覧を表示すべ き ではあ り
ません。
実効性のあ る イ ン タ ーフ ェ イ ス を作成す る には、 リ ソ ース を選択す る メ ニ ュ ー オプシ ョ ンの作成
以前に、 ア イ デン テ ィ テ ィ が リ ソ ース へのア ク セ ス を許可 さ れてい る か ど う か を確認す る 必要が
あ り ます。 多 く の場合、 メ ニ ュ ーには複数の項目が含まれ る ため、 リ ソ ース の リ ス ト を持つ Policy
Validator に ク エ リ を行 う 必要があ り ます。
159
XML と Policy API について
Select Access は、 リ ソ ース の承認に関 し て、 Policy Validator へ ク エ リ を行 う メ ソ ッ ド を提供 し て
い ます。 まず、 専用のプ ロ パテ ィ リ ス ト を XML 要求に追加 し 、 Policy Validator に送信 し ます。
こ のプ ロ パテ ィ リ ス ト は、 定数 MULTIPLERESOURCELIST に よ っ て識別 さ れ、 文字列
“multipleResourceList” と し て定義 さ れます。 マルチ リ ソ ース のプ ロ パテ ィ リ ス ト には、 1
つ以上の リ ソ ース が記載 さ れてお り 、 各 リ ソ ース は、 リ ソ ース プ ロ パテ ィ リ ス ト に よ っ て識別
さ れ ます。 リ ソ ース プ ロ パテ ィ リ ス ト は、 定数 ENFORCER_RESOURCE に よ っ て識別 さ れ、 文字
列 “resource” と し て定義 さ れます。 リ ソ ース プ ロ パテ ィ リ ス ト には、 リ ソ ース を識別す る た
めのサービ ス タ グ を組み込む必要があ り ます。 サービ ス タ グは、 標準的な
ENFORCER_SERVICE プ ロ パテ ィ に よ っ て追加 さ れ、 文字列 “service” と し て定義 さ れます。
マルチ リ ソ ースの要求
次の コ ー ド 例は、 マルチ リ ソ ース を要求す る 場合の XML を示 し てい ます。
<PolicyValidatorQuery>
<PROPERTY NAME="queryID">67</PROPERTY>
<PROPERTY NAME="service">http://dev01.ca.hp.com:8050</PROPERTY>
<PROPERTY NAME="path">/foo</PROPERTY>
<PROPERTY NAME="user">sk</PROPERTY>
<PROPERTY NAME="password">XXXXXX</PROPERTY>
<PROPERTYLIST NAME="multiResourceList">
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/sktest/allow</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/sktest/deny/deny.html</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/sktest/auth</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/four.html</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/five.html</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/six.html</PROPERTY>
</PROPERTYLIST>
</PROPERTYLIST>
</PolicyValidatorQuery>
160
第7章
マルチ リ ソ ースの応答
各 リ ソ ー ス の評価後、 Policy Validator はマルチ リ ソ ース 用のプ ロ パテ ィ リ ス ト を返 し ます。 それ
ぞれの リ ソ ース は、 元のサービ ス プ ロ パテ ィ お よ び リ ソ ース のア ク セ ス許可 / 拒否 メ ッ セージ を
含む、 各 リ ソ ース用のプ ロ パテ ィ リ ス ト に埋め込ま れます。 次の コ ー ド 例は、 マルチ リ ソ ース を
要求す る 場合の Policy Validator 応答 を 示 し て い ま す。 各 リ ソ ー ス の action プ ロ パ テ ィ に は、
ALLOW ( 許可 ) ま たは DENY ( 拒否 ) の値が含ま れてい ます。
<PolicyValidatorReply>
<PROPERTY NAME="queryID">67</PROPERTY>
<PROPERTYLIST NAME="multiResourceList">
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/sktest/allow</PROPERTY>
<PROPERTY NAME="action">ALLOW</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/sktest/deny/deny.html</PROPERTY>
<PROPERTY NAME="action">DENY</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/sktest/auth</PROPERTY>
<PROPERTY NAME="action">ALLOW</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/four.html</PROPERTY>
<PROPERTY NAME="action">ALLOW</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/five.html</PROPERTY>
<PROPERTY NAME="action">ALLOW</PROPERTY>
</PROPERTYLIST>
<PROPERTYLIST NAME="resource">
<PROPERTY NAME="path">/six.html</PROPERTY>
<PROPERTY NAME="action">ALLOW</PROPERTY>
</PROPERTYLIST>
</PROPERTYLIST>
... その他のプ ロ パテ ィ ...
... 個別化の属性 ...
<PROPERTY NAME="action">DENY</PROPERTY>
</PolicyValidatorReply>
マルチ リ ソ ース の要求を作成 し て応答を処理す る 場合、 Select Access で提供 さ れ る 標準的な XML
ク ラ ス を 使用す る こ と が 可能 で す が、 こ の セ ク シ ョ ン の コ ー ド の 例 で は、 Java お よ び COM
Enforcer API のマルチ リ ソ ース用 メ ソ ッ ド が使用 さ れてい ます。 C/C++ Enforcer API にはマルチ リ
ソ ー ス の要求に対応 し たヘルパー メ ソ ッ ド が存在 し ないため、 C/C++ の開発者は標準的な XML
ク ラ ス を使用す る 必要があ り ます。
マルチ リ ソ ースへのク エ リ : Policy API
161
Java Policy API の使用
次の例では、 JSP (Java Server Pages) を使用 し て、 マルチ リ ソ ー ス の Policy Validator 要求を作成 し
てい ます。 JSP は要求 さ れた リ ソ ース別に設定済みのポ リ シーを表示 し ます。
<%@page contentType="text/html"%>
<%@page import="com.hp.selectaccess.util.XmlElement" %>
<%@page import="com.hp.selectaccess.enforcer.*" %>
<%@page import="java.util.*" %>
<%@page import="javax.servlet.*, javax.servlet.http.*,
javax.servlet.http.HttpUtils" %>
<%! static private Enforcer enforcer = null;
public void jspInit() {
if (enforcer == null) {
enforcer = new Enforcer(null, null, "policy_api", "jsp",
true, 1);
}
}
%>
<%
クエリを
作成 し ます
マルチ リ ソ ース を
要求に追加 し ます
マルチ
リ ソ ースの応答を
取得 し ます
XmlElement q = enforcer.XmlQueryInit
("http://dev01.ca.hp.com:8050",
"/foo");
q.appendPropertyValue(DataStrings.ENFORCER_USER, "sk");
q.appendPropertyValue(DataStrings.ENFORCER_PASSWD, "sksksk");
enforcer.XmlAppendMultiResource(q,"/sktest/allow");
enforcer.XmlAppendMultiResource(q,"/sktest/deny/deny.html");
enforcer.XmlAppendMultiResource(q,"/sktest/auth");
String[] resArray = {"/four.html","/five.html","/six.html"};
enforcer.XmlAppendMultiResources(q,resArray);
ValidatorResponse vr = enforcer.XmlQuerySend(q);
XmlElement xr = vr.getXmlElement();
Hashtable ht = enforcer.getMultiResourceResult(xr);
Enumeration keys = ht.keys();
String currKey = null;
%>
<html>
<head><title>JSP Page</title></head>
<body>
<h1>Basic Java PolicyAPI JSP Program for SelectAccess 6.0</h1>
<table>
<tr><th><i>Resource</i></th><th><I>Action</I></th></tr>
<%
while (keys.hasMoreElements()) {
currKey = (String)keys.nextElement(); %>
<tr><td><%= currKey %></td><td><%= ht.get(currKey) %></td></tr>
<%
} %>
162
第7章
</table>
</body>
</html>
C/C++ Policy API の使用
C/C++ Policy API にはマルチ リ ソ ース の要求に対応 し たヘルパー メ ソ ッ ド が存在 し ないため、 標
準的な XML の操作 メ ソ ッ ド を使用 し て、要求の作成お よ び応答の処理を行 う 必要があ り ます。要
求の作成お よ び応答の処理の参考 と し て、 160 ページの 「マルチ リ ソ ー ス の要求」 お よ び 「マル
チ リ ソ ース の応答」 を使用 し て く だ さ い。
COM Policy API の使用
次の例では、 Visual Basic を使用 し て、 要求にマルチ リ ソ ース を含んだ Policy Validator ク エ リ を作
成 し てい ます。 こ の ASP (Active Server Page) には、 各 リ ソ ー ス と 、 その リ ソ ー ス に対 し て設定済
みのポ リ シーが表示 さ れ ます。
<%@ Language=VBScript %>
<% option explicit %>
<% response.Expires=-1 %>
<%
Sub Test_Multi_Resource_Query
Dim xmlTree, qresponse, response_dict
Policy
Validator ク エ リ
を作成 し ます
マルチ リ ソ ース
を要求に
追加 し ます
Rem The following line initializes a new Query
Set xmlTree =
Application("EnforcerHandle").newASPQuery(
"testdriver://host.testbed.private:1025",
"/enf/web/papi/enf_web_papi_0011.asp")
Rem add some resources to the multi-resource query
xmlTree.addMultiResource("/enf/web/papi/multi-resource
cheese.jpg")
xmlTree.addMultiResource("/enf/web/papi/multi-resource
flamingo.jpg")
xmlTree.addMultiResource("/enf/web/papi/multi-resource
hippo.jpg")
xmlTree.addMultiResource("/enf/web/papi/multi-resource
rhino.jpg")
images/
images/
images/
images/
set xmlTree = addUserPassword(xmlTree)
Rem send the query to the validator and get back the result
Set qresponse = Application("EnforcerHandle").SendQuery(xmlTree)
マルチ リ ソ ースへのク エ リ : Policy API
163
Response.write "The response is <br><pre>" &
EscapeXML(qresponse.toString(1)) & "</pre>"
End Sub
Private Function addUserPassword(xmlTree)
Dim user_node, password_node
set user_node = xmlTree.newNode("Property")
user_node.setName("user")
user_node.setStringValue("papi_three")
xmlTree.appendChild(user_node)
set password_node = xmlTree.newNode("Property")
password_node.setName("password")
password_node.setStringValue("password")
xmlTree.appendChild(password_node)
Rem Response.write "<pre>" & EscapeXML(xmlTree.toString(1)) &
"</pre>"
Set addUserPassword = xmlTree
End Function
Private Function EscapeXML(strXMLElement)
strXMLElement = Replace(strXMLElement, "&", "&amp;")
strXMLElement = Replace(strXMLElement, "<", "&LT")
strXMLElement = Replace(strXMLElement, ">", "&GT")
rem strXMLElement = Replace(strXMLElement, """", "&quote;")
rem strXMLElement = Replace(strXMLElement, """", "&quote;")
strXMLElement = Replace(strXMLElement, "'", "&apos;")
EscapeXML = strXMLElement
End Function
%>
<HTML>
<HEAD>
<title>multi-resource query</title>
</HEAD>
<BODY>
Functions of the policy api tested are:<br>
<ul>
<li>IEnforcerCOMHandle.newASPQuery</li>
<li>IEnforcerCOMHandle.SendQuery</li>
<li>IEnforcerXMLTree.addMultiResource</li>
<li>IEnforcerXMLTree.toString</li>
<li>IEnforcerXMLTree.newNode</li>
<li>IEnforcerXMLTree.setName</li>
<li>IEnforcerXMLTree.setStringValue</li>
<li>IEnforcerXMLTree.appendChild</li>
</ul>
<br>
164
第7章
Tests that password managment requests are ignored for resources in
the multi-resource query The response should have a propertylist
called <i>multiResourceList</i> with four propertys called
<i>resource</i>.
The <i>path</i> of each should be to cheese, flamingo, rhino and
hippo and the
<i>action</i> should be for your policy on each.<br><br>
<% Call Test_Multi_Resource_Query %>
</BODY>
</HTML>
マルチ リ ソ ースへのク エ リ : Policy API
165
166
第7章
8 一時的なデ ィ レ ク ト リ プ ロ フ ァ イル :
User API
Select Access は、 デ ィ レ ク ト リ サーバーにプ ロ フ ァ イ ル を持た ないア イ デン テ ィ テ ィ に関 し て、
永続的な ア イ デン テ ィ テ ィ 属性を格納す る ための API を提供 し ます。 認証プ ラ グ イ ン で一時的な
ア イ デン テ ィ テ ィ プ ロ フ ァ イ ルを作成 し ない場合、 Policy Validator では、 こ う し た ア イ デン テ ィ
テ ィ に対す る 個別化属性は提供 さ れ ません。 こ の章では、 こ れ ら のプ ロ フ ァ イ ルの作成方法を説
明 し ます。
一時ア イ デン テ ィ テ ィ プ ロ フ ァ イ ルの詳細は、 『HP OpenView Select Access 6.2 Policy Builder ガ イ
ド .』 を参照 し て く だ さ い。
こ の章の概要
こ の章では、 一時ア イ デン テ ィ テ ィ プ ロ フ ァ イ ル、 User API、 お よ び認証プ ラ グ イ ン がア イ デン
テ ィ テ ィ を認証 し た後に こ れ ら のプ ロ フ ァ イ ルを作成す る 方法を説明 し ます。
•
User API について (167 ページ )
•
フ ァ イ ル認証プ ラ グ イ ン の例 (168 ページ )
User API について
User API は UserCache ク ラ ス に よ っ て提供 さ れ ます。 こ の ク ラ ス には、 認証プ ラ グ イ ン が一時
ア イ デン テ ィ テ ィ のプ ロ フ ァ イ ル を デ ィ レ ク ト リ サーバーで作成す る メ ソ ッ ド が含 ま れてい ま
す。 UserCache ク ラ ス については、 こ のガ イ ド の 75 ページの 「LdapConnection / User / UserSource /
UserCache」 で も 説明 し てい ます。 UsesrCache ク ラ ス の メ ソ ッ ド は、 ア イ デン テ ィ テ ィ の永続的
なプ ロ フ ァ イ ルを作成 し ます。 こ のエ ン ト リ にはア イ デン テ ィ テ ィ 属性が格納 さ れ、 第 6 章、 「個
別化属性の使用 : Personalization API」 で説明 し た メ ソ ッ ド に よ っ て ア ク セ ス で き ます。
User API は、UserSource に よ っ て示 さ れた場所お よ びデ ィ レ ク ト リ サーバーへの書 き 込みア ク
セ ス を提供 し ます。 認証プ ラ グ イ ンは、 以下に示す メ ソ ッ ド を呼び出 し 、 デ ィ レ ク ト リ にア イ デ
ン テ ィ テ ィ プ ロ フ ァ イ ルを作成 し ます。
User::UserRefPtr UserCache::sCreateTemporary
(
const UserSource * userSource,
const char * subjectName,
const char * baseDn,
UserCacheAttributes & attributes
);
167
こ の例では、 baseDn に よ っ て識別 さ れ る フ ォ ルダに追加 さ れ る ユーザー エ ン ト リ を通 し てプ ロ
フ ァ イ ルが作成 さ れ ます。 subjectName を "CN=" に追加す る こ と に よ り 、 相対識別名が作成 さ
れ ま す。 た と え ば、 "John Doe" と い う subjectName と "dc=acme, dc=com" に設定 さ れた
baseDn を 使用 し て sCreateTemporary() を 呼び出 し た場合、 ユーザーの LDAP エ ン ト リ の
DN は "CN=John Doe, dc=acme, dc=com" にな り ます。なお、baseDn は userSource に よ っ
て定義 さ れた名前空間に組み込む必要があ り ます。
sCreatetemporary() メ ソ ッ ド は、 inetOrgPerson オブジ ェ ク ト ク ラ ス な ど の、 デ ィ レ ク ト
リ のオブジ ェ ク ト を ア イ デン テ ィ テ ィ と し て識別す る ために必要 と な る デ ィ レ ク ト リ 属性を追加
し ます。 ま た、 呼び出 し 側に よ っ て提供 さ れ る 属性 も 追加 し ます。
sCreateTemporary() メ ソ ッ ド が処理を完了で き なか っ た場合、 NULL が返 さ れ ま す。 LDAP
の処理が失敗す る 理由 と し ては、 権限レベルが低い、 ス キーマに違反 し てい る 、 サーバーが利用
で き ない と い っ た も のがあ り ます。
属性の処理方法を確認す る には、 UserCache.h ヘ ッ ダーの UserCacheAttributes ク ラ ス を
参照 し て く だ さ い。 UserCacheAttributes ク ラ ス は、 マ ッ ピ ン グ さ れた キー と 値の集合です。
こ の ク ラ ス で最 も 重要な メ ソ ッ ド は次の メ ソ ッ ド です。
void UserCacheAttributes::add(const char * key, const char * value);
こ の メ ソ ッ ド は属性キーお よ び属性値を追加 し ます。UserCacheAttributes は各キーに対す る
値のベ ク ト ルを格納 し ま す。 そのため、 同一の key を使用 し て add() メ ソ ッ ド の呼び出 し を繰
り 返す こ と に よ り 、 追加の値がキーに関連付け ら れます。 こ の結果、 複数の値を持つデ ィ レ ク ト
リ 属性がサポー ト さ れ ます。
UserCacheAttributes キーは大文字 と 小文字を区別す る こ と に注意 し て く だ さ い。
UserCacheAttributes では、 「CN」 と 「cn」 は 2 つの異な る 属性 と 見な さ れます。
属性のキーお よ び値は、 LDAP ス キーマの属性の定義に一致す る 必要があ り ます。 属性が無効で
あ る 場合、 sCreateTemporary() メ ソ ッ ド は失敗 し 、 NULL を返 し ます。
言語固有の属性は使用 し ないで く だ さ い。Personalization API では言語固有の属性を サポー ト し て
い ま せん。 ま た、 デ ィ レ ク ト リ サーバー内の言語固有の属性に よ り 、 Policy Builder を使用 し て
デ ィ レ ク ト リ のオブジ ェ ク ト を管理す る 際に問題が発生す る こ と があ り ます。
フ ァ イル認証プ ラ グ イ ンの例
フ ァ イ ル オーセ ン テ ィ ケー タ は、 User API を実行す る シ ン プルな認証プ ラ グ イ ン です。 こ のオー
セ ン テ ィ ケー タ は、 パ ス ワー ド フ ァ イ ルを使用 し て、 ア イ デン テ ィ テ ィ を認証 し ます。 パ ス ワー
ド フ ァ イ ルは各 Policy Validator に イ ン ス ト ールす る 必要があ り ます。
ア イ デン テ ィ テ ィ の認証後、プ ラ グ イ ンはそのア イ デン テ ィ テ ィ がデ ィ レ ク ト リ サーバー エ ン ト
リ を 所 有 し て い る か ど う か を 確 認 し ま す。 エ ン ト リ が 存 在 す る 場 合、 プ ラ グ イ ン は、
handleUserInfo() メ ソ ッ ド を呼び出 し て、 個別化デー タ を取得 し 、 XML 応答を更新 し ま す。
ア イ デン テ ィ テ ィ がデ ィ レ ク ト リ サーバー エ ン ト リ を所有 し ていない場合、 フ ァ イ ル オーセ ン
テ ィ ケー タ は、 パ ス ワー ド フ ァ イ ルか ら ア イ デン テ ィ テ ィ 属性を抽出 し て、 ア イ デン テ ィ テ ィ の
デ ィ レ ク ト リ サーバー エ ン ト リ を作成 し ます。
フ ァ イ ル認証プ ラ グ イ ン を稼働環境で使用 し ないで く だ さ い。 パ ス ワー ド フ ァ イ ルは暗号化 さ れ
ていないため、 ア イ デン テ ィ テ ィ のパ ス ワ ー ド は保護 さ れません。 こ のプ ラ グ イ ンは説明の目的
でのみ取 り 上げてい ます。
168
第8章
フ ァ イル オーセ ン テ ィ ケー タ のイ ン ス ト ール
後続の手順は、 すでにコ ン パイ ルさ れたプラ グ イ ン を 所有し ている こ と を 前提にし ていま す。 コ ン
パイ ルさ れたプラ グ イ ン を 所有し ていない場合は、 ま ず、 プラ グ イ ン を 作成する 必要があ り ま す。
プ ラ グ イ ン を作成するには
1
<install directory>/source/validator/plugins デ ィ レ ク ト リ に移動 し ます。
2
make コ マ ン ド を実行 し ます。 make コ マ ン ド の詳細については、 23 ページの 「SDK でのサ
ン プルの作成」 を参照 し て く だ さ い。
3
FileAuthenticator.so ラ イ ブ ラ リ が作成 さ れた こ と を確認 し ます。
フ ァ イ ル オーセ ン テ ィ ケー タ を イ ン ス ト ールす る には、Policy Builder プ ラ グ イ ン、Policy Validator
プ ラ グ イ ン を イ ン ス ト ールす る 必要があ り ます。必要に応 じ て HelpSet ド キ ュ メ ン ト も イ ン ス ト ー
ル し ます。 ま た、 プ ラ グ イ ン を テ ス ト す る Enforcer プ ラ グ イ ン も 必要です。
Policy Builder プ ラ グ イ ン を イ ン ス ト ールするには
1
メ イ ン メ ニ ュ ー バーか ら [ ツール ] → [ ポ リ シー プ ラ グ イ ン設定 ] の順に選択 し ます。
2
[ 認証サービ ス プ ラ グ イ ン ] フ ィ ール ド の隣にあ る [ 参照 ] ボ タ ン を ク リ ッ ク し ます。
3
<install_directory>/source/Java/jar/FileAuthenticator デ ィ レ ク ト リ を選
択 し ます。
4
[ ア ッ プ ロー ド ] を ク リ ッ ク し ます。
Policy Validator プ ラ グ イ ン を イ ン ス ト ールするには
1
<install_directory>/source/validator/plugins/FileAuthenticator.so プ ラ
グ イ ン を <install_directory>/bin/plugins デ ィ レ ク ト リ に コ ピー し ます。
2
Policy Validator が password.ldif フ ァ イ ルの コ ピーにア ク セ ス で き る こ と を確認 し ます。
3
Policy Validator を再起動 し ます。
4
各 Policy Validator で こ の手順を繰 り 返 し ます。
オ ン ラ イ ン ヘルプ を イ ン ス ト ールするには
1
Select Access の イ ン ス ト ール デ ィ レ ク ト リ に移動 し ます。
2
コ マ ン ド jar xf source/java/FileAuthenticator/HelpSet.jar を使用 し て、 管理
サーバー上でヘルプ フ ァ イ ルを展開 し ます。
3
各管理サーバーで こ の手順を繰 り 返 し ます。 HelpSet はデ ィ レ ク ト リ に ロ ー ド さ れないた
め、 各管理サーバーに イ ン ス ト ールす る 必要があ り ます。
フ ァ イル オーセ ン テ ィ ケー タ の設定
フ ァ イ ル オーセ ン テ ィ ケー タ の イ ン ス ト ール後、 認証サーバーの イ ン ス タ ン ス を作成 し て設定
し 、 Select Auth に追加す る 必要があ り ます。
一時的なデ ィ レ ク ト リ プ ロ フ ァ イル : User API
169
認証サービ ス を作成するには
1
[ ツール ] → [ 認証サービ ス ] を ク リ ッ ク し ます。 [ 新 し い認証サービ ス ] ダ イ ア ロ グ ボ ッ ク ス が
表示 さ れ ます。
2
[ 追加 ] を ク リ ッ ク し て、 [ 新 し い認証サービ ス ] ダ イ ア ロ グ ボ ッ ク ス を表示 し ます。 ダ イ ア ロ
グ ボ ッ ク ス は、 ア ッ プ ロ ー ド 済みの認証プ ラ グ イ ンの ラ ジオ ボ タ ン を オ ン の状態で表示 し
ます。 Policy Builder の コ ン ポーネ ン ト が正常に イ ン ス ト ール さ れてい る 場合、 [File
Authenticator] のオプシ ョ ンが表示 さ れ ます。
図 14
[ 新 し い認証サービ ス ] ダ イ ア ロ グ ボ ッ ク ス
3
[File Authenticator] 方式を ク リ ッ ク し ます。
4
[ サーバー名 ] を入力 し ます。
5
[OK] を ク リ ッ ク す る と 、 新 し い フ ァ イ ル オーセ ン テ ィ ケー タ サービ ス が作成 さ れ、 設定パ
ネルが表示 さ れ ます。 認証プ ロ パテ ィ を設定 し ます。 以下の項目を指定 し ます。
•
ア イ デン テ ィ テ ィ デー タ の保存場所
•
一時ア イ デン テ ィ テ ィ の場所
•
パ ス ワ ー ド フ ァ イ ル名
パ ス ワ ー ド フ ァ イ ルは Policy Validator が イ ン ス ト ール さ れてい る コ ン ピ ュ ー タ
上に配置 さ れてい る 必要があ り ます。フ ァ イ ル オーセ ン テ ィ ケー タ が使用す る パ
ス ワー ド フ ァ イ ルは LDIF (Lightweight Directory Interface Format) に適合 し てい る
必要が あ り ま す。 例については、 171 ページの 「password.ldif エ ン ト リ のサ ン プ
ル」 を参照 し て く だ さ い。
170
第8章
•
ロ グ イ ン フ ォ ーム名
ロ グ イ ン フ ォ ーム は Enforcer プ ラ グ イ ン が イ ン ス ト ール さ れてい る コ ン ピ ュ ー
タ 上に配置 さ れてい る 必要があ り ます。
6
認証プ ロ パテ ィ の設定後、 User API を使用 し て LDAP に コ ピーす る パ ス ワ ー ド フ ァ イ ルの属
性を指定す る 必要があ り ます。 属性を指定す る には、 [File Authenticator Service Properties] ダ
イ ア ロ グの [Configure Attributes] タ ブ を ク リ ッ ク し ます。 図 15 の よ う な [File Authenticator
Properties] ダ イ ア ロ グ ボ ッ ク ス が表示 さ れます。
図 15
7
属性の設定
属性を選択 し 、 [OK] を ク リ ッ ク し ます。
password.ldif エ ン ト リ のサン プル
次に LDIF 準拠のパ ス ワ ー ド エ ン ト リ を示 し ます。
dn: uid=duser,ou=People, dc=cryptoknights,dc=com
givenName: Demo
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
sn: User
cn: Demo User
uid: duser
userPassword: passw0rd
一時的なデ ィ レ ク ト リ プ ロ フ ァ イル : User API
171
フ ァ イル オーセ ン テ ィ ケー タ の仕組み
他のすべ て の Policy Validator プ ラ グ イ ン と 同様、 フ ァ イ ル認証プ ラ グ イ ン は、 静的 メ ソ ッ ド
init() を 使 用 し て、 自 身 を Policy Validator に 登 録 し ま す。 init() メ ソ ッ ド は、 次 に 示 す
factory() メ ソ ッ ド を登録 し ます。こ の メ ソ ッ ド は Policy Builder に よ っ て設定 さ れた XML プ ロ
パテ ィ を確認 し 、 FileAuthenticator イ ン ス タ ン ス を作成 し ます。 以下のサン プルに示す コ ー
ド では、 XML プ ロ パテ ィ の検証、 パ ス ワ ー ド フ ァ イ ルの読み取 り 属性の確認、 プ ラ グ イ ン の イ
ン ス タ ン ス の作成、 使用可能な属性の設定が実行 さ れ、 パ ス ワー ド フ ァ イ ルのエ ン ト リ がア イ デ
ン テ ィ テ ィ プ ロ フ ァ イ ルのマ ッ プ と し て格納 さ れてい ます。
XML プ ロパテ ィ
を抽出 し ます
UserSource
および一時
ユーザーの場所を
確認 し ます
172
// Creates an instance of the FileAuthenticator
AuthPlugin * FileAuthenticator::factory
(
const string & name,
const XmlTreeNode * props
)
{
// Must have XML properties
if (! props)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<No File Authenticator properties specified");
return NULL;
}
// Extract the XML properties
const char *transientUserLocName =
props->getChildStringValue(TRANSIENT_LOCATION_TAG);
const char * loginFormName =
props->getChildStringValue(LOGIN_FILENAME_TAG);
const char * passwordFileLocName =
props->getChildStringValue(PASSWORD_FILENAME_TAG);
const char * userSourceName = props->
getChildStringValue(USER_SOURCE_TAG);
const UserSource * userSource = NULL;
// Make sure a user source was provided
if (!sNameToUserSource(name.c_str(), userSourceName, userSource))
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: Could not create a valid User
Source");
return NULL;
}
// Make sure a transient user location was provided and that it is
valid
if (! transientUserLocName ||
! sValidateSyntheticUserLocation(transientUserLocName,
userSource))
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
第8章
">#<FileAuthenticator: Transient location not located within
User Source");
return NULL;
ログ イ ン
フ ォ ームの名前が
null でない こ と を
確認 し ます
パスワー ド
フ ィ ール ド が
null で ない こ と を
確認 し ます
パスワー ド
フ ァ イルの
権限を確認 し ます
}
// Make sure a login form was provided. There is no way to validate
the form exists
if (! loginFormName)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: Could not locate the login form in the
configuration");
return NULL;
}
// Make sure a password file name was provided
if (! passwordFileLocName)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: Could not locate password file in
configuration");
return NULL;
}
// Make sure we have read privileges to the file
else if (access(passwordFileLocName, 4) == -1)
{
// If the file does not exist...
if (errno == ENOENT)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: The password file %s does not
exist.",
passwordFileLocName);
}
// If we don’t have read privileges...
else if (errno == EACCES)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: The password file %s is not
readable.",
passwordFileLocName);
}
// If we encountered some other error
else
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: An unknown error occurred while
opening file %s.",
passwordFileLocName);
}
一時的なデ ィ レ ク ト リ プ ロ フ ァ イル : User API
173
// Could not read password file, so can not try to create plugin
return NULL;
}
// Try to construct a plugin instance
FileAuthenticator * plugin = NULL;
try
{
// Make sure we can open the password file
FILE * passwordFile = NULL;
passwordFile = fopen(passwordFileLocName, "r");
if (passwordFile == NULL)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: An unknown error occurred while
opening file %s.",
passwordFileLocName);
return NULL;
}
// Create a plugin instance
plugin = new FileAuthenticator( name.c_str(), userSource,
transientUserLocName, loginFormName);
// Configure plugin instance with usermap and attribute vector
if (plugin != NULL)
{
// Extract the XML property list containing allowable
attributes
// Attributes not on this list will be ignored
const XmlTreeNode *xmlAttributeList =
props->getChild(ATTRIBUTE_PROP_LIST_TAG);
XmlTreeNodeVector xmlAttributes =
xmlAttributeList->getChildren(ATTRIBUTE_TAG);
// Init the vector of attributes this plugin will copy to the
User API
plugin->getAttributesToCopy(xmlAttributes);
// Init the map of user ID and attributes
plugin->fetchPasswordData(passwordFile);
}
}
catch (...)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_ERROR,
">#<FileAuthenticator: Could not create File Authenticator
plugin instance");
return NULL;
}
return plugin;
パスワー ド
フ ァ イルを
開き ます
属性の リ ス ト を
抽出 し て User
API に
コ ピー し ます
パスワー ド
フ ァ イルから
ユーザー エ ン ト リ
を読み取 り ます
フ ァ イル認証
プ ラ グ イ ンの
イ ンス タ ンスを
返 し ます
174
}
第8章
ア イ デン テ ィ テ ィ の認証
FileAuthenticator::factory() メ ソ ッ ド は、 Policy Builder によ っ て設定さ れた XML プロ パ
ティ を 使用し て、 FileAuthenticator のイ ン ス タ ン ス を 作成し ま す。 UserSource、 合成ア イ
デン ティ ティ ( 一時ア イ デン ティ ティ ) の場所、およ びロ グ イ ン フ ォ ーム が FileAuthenticator
のコ ン ス ト ラ ク タ に渡さ れま す。
イ ン ス タ ン ス の作成後、 FileAuthenticator::factory() は、 getAttributesToCopy()
を 呼び出 し て、 プ ラ グ イ ン が User API に コ ピ ーす る 属性名 の ベ ク ト ル を 作成 し ま す。 次 に、
fetchPasswordData() を呼び出 し て、 ア イ デン テ ィ テ ィ プ ロ フ ァ イ ルのマ ッ プ を作成 し ます。
マ ッ プ キーにはア イ デン テ ィ テ ィ 名が使用 さ れ ま す。 ア イ デン テ ィ テ ィ エ ン ト リ は、 属性名が
マ ッ プ キーであ る 属性のマ ッ プです。 属性は値のベ ク ト ルです。
フ ァ イ ル オーセ ン テ ィ ケー タ の イ ン ス タ ン ス の作成後、 ア イ デン テ ィ テ ィ 認証が実行で き る よ
う にな り ます。 他の多 く のオーセ ン テ ィ ケー タ と 比較 し て、
FileAuthenticator::authenticate() メ ソ ッ ド には、 それほ ど異な る 点はあ り ません。 ま
ず、 再起動 コ ー ド が Policy Validator か ら 発行 さ れたか ど う か を確認 し ます。 次に、 ア イ デン テ ィ
テ ィ 名 と パ ス ワ ー ド が取得 さ れたか ど う か を確認 し ます。 取得 さ れていない場合は、 ヒ ン ト を
Enforcer プ ラ グ イ ン に提供 し て、 ア イ デン テ ィ テ ィ に対 し て認証情報の入力を要求す る よ う 指示
し ます。 結果 と し て ア イ デン テ ィ テ ィ 名 と パ ス ワ ー ド が取得で き た場合、 そのパ ス ワー ド を ア イ
デン テ ィ テ ィ マ ッ プに格納 さ れたパ ス ワ ー ド と 照合 し 、 ア イ デン テ ィ テ ィ 認証を行い ます。 そ
れ以外の場合は、 認証 ヒ ン ト を応答に追加 し て、 ロ グ イ ン フ ォーム を表示 し ます。
次の例は、 上記のプ ロ セ ス を示 し ます。
R_RESTART
コ ー ド が発行
さ れたかど う か
を確認 し ます
ユーザー名または
パスワー ド が提供
さ れていない
場合はログ イ ン
フ ォ ームを
送信 し ます
AuthPlugin::Result FileAuthenticator::authenticate
(
PropertyListElement *data,
PropertyListElement *response,
const PropertyListElement *personalizer,
const bool trace
)
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: Invoking FileAuthenticator plugin");
AuthPlugin::Result result = R_DENY;
// Determine if we already authenticated the user and Validator sent
an R_RESTART
if (isRestart(data, name_.get()))
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: Authentication restart");
result = validateRestartData(data, response, personalizer);
}
// Could not find credentials, send hint to Enforcer to prompt for
uid & password
else if (!fetchData(user_, ENFORCER_USER,
ValidatorGetPostDataList(data)) ||
!fetchData(password_, ENFORCER_PASSWD,
ValidatorGetPostDataList(data)))
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
一時的なデ ィ レ ク ト リ プ ロ フ ァ イル : User API
175
"FileAuthenticator: No uid or password, sending login form");
addPasswordHint2Response(response);
}
// See if the user name and password match a record in the user map
else if (validateUser(user_, password_))
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: User authenticated");
result = R_PERMIT;
if (canCacheUser())
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: Caching user record");
bool success = true;
// User was authenticated, now see if they have an LDAP entry
if (!isUserInLdap(user_.c_str()))
{
// No LDAP entry, so try to create one
if (!addNewUserRecord(user_.c_str()))
success = false;
}
// If entry was created in LDAP, make sure the operation was
successful
if (success)
result = handleUserInfo(data, response, personalizer,
user_.c_str(),
transientUserLoc_.get());
}// end if can cache user
} // end if user authenticated
// User name not found or bad password
else
{
Logger::log(VAL_CHAN_OP, ENFORCER_LOG_DEBUG,
"FileAuthenticator: User login failed");
addInitialForm(response);
}
setResponseAction(result, response);
return result;
認証情報を
確認 し ます
LDAP エ ン ト リ が
見つから ない
場合は作成 し ます
}
authenticate() メ ソ ッ ド は、 isUserInLdap() を呼び出 し て、 ア イ デン テ ィ テ ィ がすでにプ
ロ フ ァ イ ル を所有 し てい る か ど う か を 確認 し ま す。 LDAP で ア イ デン テ ィ テ ィ を検索す る 場合、
UserCache::sLocateByUID() メ ソ ッ ド が使用 さ れ ま す。 こ の メ ソ ッ ド は各 UserSource で
ユーザー名の検索を行い ます。
176
第8章
既存のプ ロ フ ァ イルの検索
ア イ デン テ ィ テ ィ の認証後、 authenticate() メ ソ ッ ド は、 ア イ デン テ ィ テ ィ がすでにデ ィ レ ク
ト リ に プ ロ フ ァ イ ル を 所 有 し て い る か ど う か を 確 認 し ま す。 所 有 し て い な い 場 合、
authenticate() メ ソ ッ ド は、 addNewUserRecord() メ ソ ッ ド を呼び出 し て、 ア イ デン テ ィ
テ ィ の永続的なプ ロ フ ァ イ ルを作成 し ます。 addNewUserRecord() メ ソ ッ ド は、 User API を使
用 し て、 ア イ デン テ ィ テ ィ をデ ィ レ ク ト リ サーバーに追加 し ます。
ア イ デ ン テ ィ テ ィ がすでにデ ィ レ ク ト リ サーバー プ ロ フ ァ イ ル を 所有 し て い る 場合、 ま たは、
addNewUserRecord() に よ り ア イ デン テ ィ テ ィ のデ ィ レ ク ト リ サーバー プ ロ フ ァ イ ルが追加
さ れた場合は、 handleUserInfo() メ ソ ッ ド が呼び出 さ れます。
次の コ ー ド 例は、 上記の動作を示 し ます。
すべてのユーザー
ソ ース を確認
し て、 ユーザーが
ディ レク ト リ
サーバー
エ ン ト リ を所有
し ているかど う か
を調べます
LDAP でユーザー
が見つか り ま し た
bool FileAuthenticator::isUserInLdap(char * user)
{
// Search for the userId in the LDAP user locations
UserSourceVector& sources = all_user_sources();
UserRefPtr userp;
bool foundUserId = false;
// Search all the configured user sources for the user LDAP entry
for ( UserSourceVector::iterator iter = sources.begin(); iter !=
sources.end();
iter++ )
{
try
{
// Try to locate the user in the current user source
userp = UserCache::sLocateByUID(*iter, user);
if ((userp != NULL) && userp->exists() )
{
// User was found, validate that either the user record
is not
// synthetic, or that this plugin created the synthetic
entry
if
((!userp->isSynthetic())||(userp->getUserSource()==syntheticSource))
{
return true;
}
}
}
catch (EnforcerException &e)
{
if ( e.getErrorNum() != EnforcerException::E_LDAP )
{
throw e;
}
}
}
一時的なデ ィ レ ク ト リ プ ロ フ ァ イル : User API
177
// If we get this far, the user has not been found
return false;
ユーザーが見つか
り ませんで し た
}
新規ア イ デン テ ィ テ ィ プ ロ フ ァ イルの作成
以下の コ ー ド 例で示す よ う に、ア イ デン テ ィ テ ィ がデ ィ レ ク ト リ サーバー プ ロ フ ァ イ ルを所有 し
て い な い と authenticate() が 判 断 し た 場 合、 addNewUserRecord() を 呼 び 出 し ま す。
addNewUserRecord() は続け て UserCache::sCreateTemporary() を呼び出 し て、 新 し いア イ
デン テ ィ テ ィ プ ロ フ ァ イ ルのデ ィ レ ク ト リ エ ン ト リ を作成 し ます。 なお、 デ ィ レ ク ト リ 内でのエ
ン ト リ の識別には CN 属性が使用 さ れ ます。次に示す コ ー ド では、取得 し た ア イ デン テ ィ テ ィ 名を
CN 属性の値 と し て使用 し てい ます。 CN 属性には複数の値が含ま れ る こ と があ り ますが、 デ ィ レ
ク ト リ の場所の識別に使用 さ れ る 値は sCreateTemporary() メ ソ ッ ド の 2 番目のパ ラ メ ー タ に
な り ます。
合成ユーザーの
ソ ース を
取得 し ます
ディ レク ト リ
サーバーに新 し い
エン ト リ を
追加 し ます
178
bool FileAuthenticator::addNewUserRecord(const char * user)
{
// Get the user source where the entry will be added
const UserSource *syntheticSource = UserSource::sGetByDN
(synthetic_loc);
if ( syntheticSource == NULL )
{
Logger::log(VAL_CHAN_AUTH, ENFORCER_LOG_ERROR,
">#<Unable to find synthetic location");
return false;
}
Logger::log(VAL_CHAN_AUTH, ENFORCER_LOG_DEBUG, "Found synthetic
location");
// Get the user attributes from the attribute map
UserCacheAttributes attributes;
getAttributes(user, attributes);
// Create the user entry
userp = UserCache::sCreateTemporary(syntheticSource, user,
synthetic_loc, attributes);
// See if the entry was created
if ( userp == NULL )
{
Logger::log(VAL_CHAN_AUTH, ENFORCER_LOG_ERROR,
">#<Failed to create temporary user");
return false;
}
Logger::log(VAL_CHAN_AUTH, ENFORCER_LOG_DEBUG, "Created temporary
user %s",
userp->getDN());
return true;
}
第8章
属性の作成
フ ァ イ ル オーセ ン テ ィ ケー タ が LDAP でエ ン ト リ を作成す る 場合、getAttributes() を呼び出
し て、 LDAP に コ ピ ーす る UserCacheAttributes を取得 し ま す。 以下の コ ー ド 例で示す よ う
に、 getAttributes() メ ソ ッ ド は、 factory() メ ソ ッ ド で作成 し た ア イ デン テ ィ テ ィ マ ッ プ
の ア イ デ ン テ ィ テ ィ を 参照 し ま す。 こ の メ ソ ッ ド は、 使用可能 な属性のベ ク ト ル を 利用 し て、
userCacheAttributes に追加す る ア イ デン テ ィ テ ィ 属性を決定 し ます。指定 さ れた属性のみが
コ ピー さ れ、 それ以外のア イ デン テ ィ テ ィ 属性は無視 さ れます。
現時点では、 FileAuthenticator::getAttributes() メ ソ ッ ド は属性名の大文字 と 小文字
を区別 し ます。 パ ス ワー ド フ ァ イ ルの属性が、 Policy Builder で使用 し てい る 文字 と は異な る 文字
に よ っ て設定 さ れた場合、 フ ァ イ ル オーセ ン テ ィ ケー タ はその属性を無視 し ます。
パスワー ド
フ ァ イルか ら読み
取 られた
ア イ デン テ ィ テ ィ
デー タ を
検索 し ます
指定 さ れた
属性のみを
追加 し ます
ア イ デン テ ィ
テ ィ が属性を
持っ ているか
ど う かを
確認 し ます
複数の値を持つ
属性の場合は、
それぞれの値を
追加 し ます
void FileAuthenticator::getAttributes(const char * user,
UserCacheAttributes & attr)
{
// Create the key to lookup the user record
string theUser = "uid=" + string(user);
attributeMap userRecord;
userMap::iterator aUser = users_.find(theUser);
// See if the user has a record, if not, user name is unknown.
if (aUser == users_.end())
{
Logger::log(VAL_CHAN_AUTH, ENFORCER_LOG_DEBUG,
"Can not locate user record in login map.");
return;
}
// If found, get the user attributes
userRecord = aUser->second;
strVector attributeValues;
// Only look for attributes that are configured to copy
for (strVector::iterator iter = attributes_.begin(); iter !=
attributes_.end();
iter++ )
{
string key = (*iter);
// See if the user has the attribute
attributeMap::iterator attribute = userRecord.find(key);
if (attribute != userRecord.end())
{
// Get the attribute values
attributeValues = attribute->second;
// Add each attribute value
for (strVector::iterator values = attributeValues.begin();
values != attributeValues.end(); values ++)
{
string value = (*values);
Logger::log(VAL_CHAN_AUTH, ENFORCER_LOG_DEBUG,
一時的なデ ィ レ ク ト リ プ ロ フ ァ イル : User API
179
"FileAuthenticator::getAttributes() Copying %s=%s",
key.c_str(), value.c_str());
attr.add(key.c_str(), value.c_str());
}
}
}
}
180
第8章
9 Administration API
Administration API は、 リ ソ ース定義、 ポ リ シー設定、 ユーザー パ ス ワー ド 変更を行 う こ と ので き
る プ ロ グ ラ ミ ン グ イ ン タ ーフ ェ イ ス を Select Access Administration Server に提供 し ます。 こ の章で
は、 Administration API の機能について説明 し ます。
こ の章の概要
こ の章の ト ピ ッ ク では、 Administration Server、 Administration Server の API、 こ の API の使用方法
について説明 し ます。
•
181 ページの 「Administration Server」
•
182 ページの 「Administration API」
•
183 ページの 「Administration API の入手」
•
183 ページの 「デー タ の種類の概要」
•
184 ページの 「共通のデー タ の種類」
•
191 ページの 「 リ ソ ース固有の API」
•
198 ページの 「ポ リ シー固有の API」
•
215 ページの 「ヘルパ API」
•
215 ページの 「パ ス ワ ー ド の変更」
Administration Server
Administration Server は、 SSL の詳細 と 設定情報を処理 し ま す。 Select Access コ ン ポーネ ン ト の設
定エ ン ジ ン であ る Administration Server は、 設定情報を調整す る ために次の処理を行い ます。
•
共通パ ラ メ ー タ を収集 し ます。
•
ポ リ シー ス ト ア と の間で コ ン ポーネ ン ト 設定情報の読み書 き を行 う ために、Setup Tool か ら 送
信 さ れ る 要求を処理 し ます。
•
すべての コ ン ポーネ ン ト が継承す る Select Access の共通パ ラ メ ー タ を定義 し ます。
•
Select Access コ ン ポーネ ン ト 間で設定パ ラ メ ー タ を管理 し ます。
Administration Server を設定す る と 、 大部分のパ ラ メ ー タ が ロ ーカルの XML フ ァ イ ルに書 き 込ま
れます。 こ れ ら のパ ラ メ ー タ は、 ブー ト ス ト ラ ッ プ パ ラ メ ー タ です。 ブー ト ス ト ラ ッ プ パ ラ メ ー
タ は Administration Server の起動時に必要 と な る ため、 こ の ロ ーカル フ ァ イ ルに書 き 込ま れます。
181
Administration API
Administration API は、 Web サー ビ ス でサポー ト さ れて い る 言語 を 使用 し て開発者が外部的に リ
ソ ース定義 と ポ リ シー設定を行 う ための、 公開 WSDL をベース と し た環境です。
Administration API は、 主に Axis フ レーム ワー ク でテ ス ト さ れてい ます。
こ の API は、 次の タ ス ク に使用で き ます。
•
サービ スお よ び リ ソ ース エ ン ト リ の追加、 変更、 削除
•
「許可」 、 「拒否」 、 ま たは既存のルールを使用 し た、 ユーザーお よ び リ ソ ース のポ リ シー設定
の追加、 変更、 削除
•
ユーザーへのパ ス ワー ド 変更許可
Administration API は、 Web サ ー ビ ス で 実 装 し 、 Axis Enforcer で 保 護 し ま す。 Setup Tool は、
Administration API 環境 と Axis Enforcer を自動的に設定 し ます。
Web サービ スへの処理要求は、 まず Axis Enforcer が受け取 り ます。 Axis Enforcer は、 Validator か
ら 「許可」 応答を受け取 る と Web サービ ス に要求を転送 し ます。 Web サービ ス を経由す る 処理
実行要求は、 すべて Administration Server に よ り 調査 さ れ、 適切な権限があ る 場合にのみ許可 さ
れます。
例外の処理
Administration API では、 次の 3 種類の例外が生成 さ れ ます。
•
シ ス テム エ ラ ー。 ネ ッ ト ワー ク エ ラ ーや無効な SOAP メ ッ セージな ど、 アプ リ ケーシ ョ ン に
起因 し ない例外です。 通常、 Web サービ ス フ レーム ワー ク は、 エ ラ ーま たは例外を返 し ます。
た と えば、 Axis は、 ク ラ イ ア ン ト プ ロ グ ラ ムに soap:fault を返 し ます。
•
未知のア プ リ ケーシ ョ ン例外。 NullPointerExceptions な ど です。 こ う し た例外が発生す る と 、
メ ッ セ ー ジ が 監 査 シ ス テ ム に 記 録 さ れ (Web サ ー ビ ス チ ャ ネ ル、 ERROR レ ベ ル )、
java.io.RemoteException が ス ロ ー さ れます。Axis は ク ラ イ ア ン ト に soap:fault を返
し ます。
•
既知の例外。 ク ラ イ ア ン ト 入力検証エ ラ ー と Administration Server が返すエ ラ ーな ど です ( 「エ
ン ト リ はすでに存在 し ます」、 ポ リ シー署名エ ラ ーな ど )。 こ れ ら の例外は、 wsdl:fault と
し て ク ラ イ ア ン ト に返 さ れ ます。 各 wsdl:fault には、 エ ラ ー コ ー ド と 、 エ ラ ーの原因を
示す簡単なエ ラ ー メ ッ セージがあ り ます。
記録
Web サービ ス 層は、 ユーザー ア ク テ ィ ビ テ ィ を記録 し ま せん。 ユーザー ア ク テ ィ ビ テ ィ の記録
は、 Administration Server が ロ グ イ ン ユーザー DN を使用 し て行い ます。 Web サービ スへのア ク セ
ス権限を持つ特定のユーザーを設定す る と 、Web サービ スへのすべてのア ク セ ス を追跡で き ます。
未知のアプ リ ケーシ ョ ン エ ラ ーのみが記録 さ れ ます。
Java を使用 し て ク ラ イ ア ン ト コ ー ド を作成す る 場合、 JRE キース ト アに SA 証明書を イ ン ポー ト
で き ます。 SA 証明書は、 <SA install folder>\Select
Access\shared\jetty\etc\certs\mcacert.cer にあ り ます。
182
第9章
Administration API の入手
Administration API WSDL は、 次の URL で入手で き ます。
https://host:port/axis/services/wsadmin?wsdl
<host> は Administration Server 名を表 し 、 <port> は Administration API ポー ト です。 デフ ォ ル ト
のポー ト は 9993 です。
ど の Administration API 呼び出 し であ っ て も 、 入力パ ラ メ ー タ が無効な場合、 例外が ス ロ ー さ れ、
「無効な引数」 と い う メ ッ セージが表示 さ れ ます。
デー タ の種類の概要
Administration API で使用す る デー タ の種類の概要を次の表に示 し ます。
表8
Administration API のデー タ の種類
デー タ の種類
処理内容
関連するデー タ の種類
resourcePath
Policy Builder での リ ソ ース の
パ ス を示 し ます。
ネ ッ ト ワー ク リ ソ ース パ ス
管理 リ ソ ース パ ス
ネ ッ ト ワー ク リ ソ ース パ ス
resourcePath
Policy Builder の [ リ ソ ース ア
ク セ ス ] ツ リ ーに該当 し ます。 管理 リ ソ ース パ ス
管理 リ ソ ース パ ス
Policy Builder の管理ア ク セ ス
ツ リ ーに該当 し ます。
resourcePath
特定の範囲の リ ソ ースお よ び
ア イ デン テ ィ テ ィ の検索に使
用 し ます。
LdapSearchCriteria
Filter
LdapSearchCriteria
Filter
検索を絞 り 込むために使用 し
ます。
LdapSearchCriteria
AdminFault
Administration API 呼び出 し か
ら 戻 る エ ラ ー メ ッ セージが格
納 さ れ ます。
setUserPassword
getResource
リ ソ ース の詳細を取得 し ます。 resourcePath
ResourceServer
LdapSearchCriteria
ネ ッ ト ワー ク リ ソ ース パ ス
resourcePath
setResource
searchResources
ResourceServer
Policy Builder の [ リ ソ ース
サーバー ] のサーバーに該当
し ます。
resourcePath
getResource
setResource
searchResources
Administration API
183
表8
Administration API のデー タ の種類 ( 続き )
デー タ の種類
処理内容
関連するデー タ の種類
setResource
リ ソ ース を変更 し ます。
resourcePath
getResource
ResourceServer
searchResources
searchResources
リ ソ ース の リ ス ト を検索 し ま
す。
LdapSearchCriteria
getPolicies
ポ リ シー グ リ ッ ド の部分を返
し ます。
setPolicy
setPolicy
特定の リ ソ ース にポ リ シーを
設定 し ます。
getPolicy
refreshValidators
Validator のキ ャ ッ シ ュ を ク リ
ア し ます。
getAuthServiceNames
Policy Builder で定義 さ れたす
べての認証サービ ス の名前を
返 し ます。
getRuleNames
ルール名の リ ス ト を返 し ます。
setUserPassword
ユーザー パ ス ワー ド を変更 し
ます。
LdapSearchCriteria
AdminFault
共通のデー タ の種類
resourcePath
resourcePath ( リ ソ ース パ ス ) は文字列であ り 、 ス ラ ッ シ ュ ( 「/」 ) で区切っ たパ ス で参照 し ます。
例を示 し ます。
/network/http/<localhost>/index.html
有効な リ ソ ー ス パ ス は、 /network で始 ま り ます。 リ ソ ー ス パ ス の末尾に ス ラ ッ シ ュ を付け る
と ( 例 : /network/http/<localhost>/)、 その リ ソ ース パ ス は、 次の よ う に末尾に ス ラ ッ シ ュ が
ない も の と し て扱われます。
/network/http/<localhost>
リ ソ ー ス パ ス は大文字 と 小文字が区別 さ れ ま せん。 パ ス 文字列の先頭お よ び末尾の ホ ワ イ ト ス
ペース は無視 さ れ ます。 次の例に、 ホ ワ イ ト スペース の処理例を示 し ます。 こ の例の 「_」 は、 ホ
ワ イ ト スペース を示 し ます。
先頭ま たは末尾のホワ イ ト スペース : 先頭 ま たは末尾にホ ワ イ ト ス ペー ス があ る パ ス は、 ホ ワ イ
ト スペース がないパ ス と 同 じ と みな さ れ、 有効なパ ス と し て処理 さ れ ます。 次に例を示 し ます。
_/network/http/<localhost>/index.html
/network/http/<localhost>/index.html
184
第9章
Policy Builder で定義 さ れたホワ イ ト スペース : Policy Builder で次の よ う にホ ワ イ ト ス ペー ス を
含む リ ソ ース を定義す る 場合、
/network/h_ttp/Apa_che/index_._html
Administration API では、 次の ど ち ら も 有効です。
/network/h_ttp/Apa_che/index_._html
_/network/h_ttp/Apa_che/index_._html
し か し 、 コ ン ポーネ ン ト 内でホ ワ イ ト スペース を使用す る と 、 エ ラ ーが返 さ れ ます。
/network_/h_ttp/Apa_che/index_._html
ネ ッ ト ワー ク リ ソ ース パス
ネ ッ ト ワ ー ク リ ソ ース パ ス は、 Policy Builder の [ リ ソ ースア ク セス ] ツ リ ーに該当 し ます。
リ ソ ース ツ リ ーには、 [ リ ソ ース ア ク セス ] 分岐 と [ 管理ア ク セス ] 分岐があ り ます。 ど ち ら も ロ ー
カ ラ イ ズ可能です。
ネ ッ ト ワ ー ク リ ソ ース パ ス の先頭には、 ルー ト コ ン ポーネ ン ト であ る こ と を表す 「/network」
を使用 し ます。 リ ソ ース名は 「/」 で区切 り ます。 Policy Builder の リ ソ ース と そのパ ス は次の と お
り です。
/network/http/<localhost>/index.html
ネ ッ ト ワ ー ク リ ソ ース パ ス は、 次の と お り です。
"/network/<folder-name>/<resource-server-name>/<resource-name>/
<sub-resource-name>"
管理 リ ソ ース パス
管理 リ ソ ース パ ス は、 Policy Builder の [ 管理ア ク セス ] ツ リ ーに該当 し ます。 管理 リ ソ ース パ ス の
先頭には、 ルー ト コ ン ポーネ ン ト であ る こ と を表す 「/admin」 を使用 し ます。
リ ソ ース ツ リ ーには、 [ リ ソ ース ア ク セス ] 分岐 と [ 管理ア ク セス ] 分岐があ り ます。 ど ち ら も ロ ー
カ ラ イ ズ可能です。
管理 リ ソ ース パ ス には、 次の従属要素があ り ます。
•
ネ ッ ト ワ ー ク 管理 リ ソ ース パ ス
•
ス キーマ管理パ ス
•
機能管理パ ス
•
ア イ デン テ ィ テ ィ 管理パ ス
ネ ッ ト ワー ク 管理 リ ソ ース パス
ネ ッ ト ワ ー ク 管理 リ ソ ース パ ス の先頭には 「/admin/network」 を使用 し 、 次の よ う に指定 し
ます。
Administration API
185
"/admin/network/<folder-name>/<resource-server-name>/<resource-name>/
<sub-resource-name>"
「/」 を文字 と し て リ ソ ース名の中で使用す る こ と はで き ません。 「/」 は常に リ ソ ース パ ス の記号
と し て扱われ ます。
スキーマ管理パス
属性ス キーマのエ ン ト リ は Policy Builder ではオブジ ェ ク ト ク ラ ス別にグループ化 さ れ ますが、ス
キ ーマ 管理パ ス は Policy Builder で の表示 と は異 な り ま す。 ス キ ーマ 管理パ ス の先頭に は、 「/
admin/schema」 を使用 し ます。
属性 ス キーマ エ ン ト リ を照会す る には、 パ ス名の先頭に 「/admin/schema/attribute」 を使
用 し ます。
"/admin/schema/attribute/<attribute-name>"
オブ ジ ェ ク ト ク ラ ス ス キーマ エ ン ト リ を 照会す る には、 パ ス 名の先頭に 「/admin/schema/
object_class」 を使用 し ます。 有効なオブジ ェ ク ト ク ラ ス管理パ ス は次の と お り です。
"/admin/schema/object_class/<object-class-name>"
機能管理パス
機能管理パ ス の先頭には、 「/admin/functions」 を使用 し ます。 有効な機能管理パ ス を次に示
し ます。
"/admin/functions/<function-name>"
<function-name> は、 Policy Builder に表示さ れる ロ ーカ ラ イ ズ さ れた名前ではあ り ま せん。 各
機能には、事前に定義さ れた名前があ り ま す。現在定義さ れている 機能名のリ ス ト を 次に示し ま す。
authentication_service_configuration
component_configuration
identity_editor_plugin_configuration
identity_location_configuration
network_discovery
password_policy_configuration
password_reset_configuration
policy_data_signing
report_viewer
rule_builder
sub-delegation_ability
workflow_alert_template_configuration
workflow_configuration
ア イ デン テ ィ テ ィ 管理パス
ア イ デン テ ィ テ ィ 管理パ ス の先頭には、 「/admin/identity/」 を使用 し 、 その後には実際のア
イ デン テ ィ テ ィ DN を指定 し ます。 た と えば、 次の よ う に指定 し ます。
186
第9章
"/admin/identity/select_auth"
"/admin/identity/unknown_identities"
"/admin/identity/known_identities"
"/admin/identity/known_identities/cn=foobar,ou=HR,dc=hp,dc=com"
identityDN
identityDN は、元のディ レ ク ト リ エン ト リ の識別名によ り 参照さ れる 文字列です。例を 示し ま す。
cn=foobar,ou=HR,dc=hp,dc=com
SelectAuth、 未知のア イ デン テ ィ テ ィ 、 既知のア イ デン テ ィ テ ィ な ど、 [ ア イ デン テ ィ テ ィ ツ リ ー ] の
特別な ア イ デン テ ィ テ ィ エ ン ト リ は次の よ う に参照 し ます。
select_auth
unknown_identities
known_identities
LdapSearchCriteria
LdapSearchCriteria は、 特定の範囲の リ ソ ース お よ びア イ デン テ ィ テ ィ を検索す る ために使
用 し ます。 LdapSearchCriteria の定義は次の と お り です。
<complexType name="LdapSearchCriteria">
<sequence>
<element name="threshold" type="int" minOccurs="0"/>
<element name="pageSize" type="int"/>
<element name="continuedID" minOccurs="0" type="string"/>
<element name="baseID" type="string"/>
<element name="scope" minOccurs="0">
<simpleType>
<annotation>
<documentation>This data type is to set the scope of
LDAP search.BASE is to search the entry only, ONE is
to search one level down, SUB is to search all
subordinates.</documentation>
</annotation>
<restriction base="string">
<enumeration value="BASE"/>
<enumeration value="ONE"/>
<enumeration value="SUB"/>
</restriction>
</simpleType>
</element>
<element name="filter" nullable="true" minOccurs="0"
type="impl:LdapSearchCriteriaFilter" />
</sequence>
</complexType>
Administration API
187
LdapSearchCriteria のパラ メ ー タ
LdapSearchCriteria のパ ラ メ ー タ を次の表に示 し ます。
表9
188
LdapSearchCriteria のパラ メ ー タ
必須 / 省略可
パラ メ ー タ
処理内容
threshold
threshold では、LDAP 検索 省略可
で返す こ と ので き る 最大エ ン
ト リ 数を指定 し ます。
0 ( ゼロ ) の場合、 最大エン ト
リ 数は、LDAP サーバーのサイ
ズの上限によ り 異なり ま す。
値
デフ ォ ル ト 値は 0 です。
注記 : 設定す る threshold ( し き い
値 ) が小 さ すぎ る 場合、
SIZE_LIMIT_EXCEEDED 例外が
発生す る おそれがあ り ます。
pageSize
pageSize は、 Administration
API の処理で返す こ と ので き
る 最大レ コ ー ド 数を定義す る
ために使用 し ます。
pageSize が 0 ( ゼ ロ ) の場
合、 制限はあ り ません。
省略可
デフ ォ ル ト 値は 0 です。 こ れ
は、 サーバーで返す こ と ので き
る 最大の レ コ ー ド 数を示 し ます。
continuedID
continuedID は、 返 さ れ る 省略可
レ コ ー ド の一部を取得す る と
き に使用 し ます。
continuedID を Null に設定
す る 場合、 最初のページであ
る こ と を意味 し ます。
continuedID を リ ソ ース ツ
リ ーで使用す る 場合は値を
resourcePath に設定 し 、 ア イ
デン テ ィ テ ィ ツ リ ーで使用す る
場合は値を identityDN に設定
す る 必要があ り ます。
第9章
表9
LdapSearchCriteria のパラ メ ー タ ( 続き )
パラ メ ー タ
処理内容
必須 / 省略可
値
baseID
検索を開始す る ルー ト 。
必須
baseID を リ ソ ース ツ リ ーで使
用す る 場合は値を
resourcePath に設定 し 、 ア イ
デン テ ィ テ ィ ツ リ ーで使用す る
場合は値を identityDN に設定
す る 必要があ り ます。
scope
検索の範囲を指定 し ます。
省略可
有効な値は、BASE、 ONE、 SUB で
す。 デフ ォ ル ト 値は SUB です。
filter
検索条件を指定す る 検索フ ィ
ルタ。
省略可
•
BASE を指定す る と 、
baseID でのみ検索が行わ
れ ます。
•
ONE を指定す る と 、
baseID の 1 レベル下のエ
ン ト リ でのみ検索が行われ
ます。
•
SUB を指定す る と 、
baseID と 、 baseID の下
の全レベルの全エ ン ト リ で
検索が行われ ます。
デフ ォ ル ト 値は、
LdapSearchCriteriaFilter
のデフ ォ ル ト 値です。
詳細は、 189 ページの
「LdapSearchCriteriaFilter」 を参照
し て く だ さ い。
ページ ン グ ナビ ゲーシ ョ ン をサポー ト す る には、ク ラ イ ア ン ト で continuedID と pageSize を
指定 し ます。 最後に返 さ れ る エ ン ト リ の中の isContinued フ ラ グは、 返 さ れ る エ ン ト リ が ま だ
あ る か ど う か を示 し ます。 ク ラ イ ア ン ト は、 次の検索で こ の値を使用 し て次のページ を取得 し ま
す。 次のページの最初の レ コ ー ド は、 continuedID の次の レ コ ー ド か、 continuedID が最後の
レ コ ー ド の場合は空ページです。 順序は、 Select Access 内部の ソ ー ト アルゴ リ ズ ム に よ り 異な り
ます。
continuedID を Null に設定す る 場合、 最初のページであ る こ と を意味 し ます。 pageSize 0 は、
サーバーで返す こ と ので き る 最大の レ コ ー ド 数を示 し ます。
LdapSearchCriteriaFilter
LdapSearchCriteriaFilter は、 検索を絞 り 込むために使用 し ます。
LdapSearchCriteriaFilter の定義は次の と お り です。
<complexType name="LdapSearchCriteriaFilter">
<simpleContent>
<extension base="string">
<attribute name="type" use="optional">
<simpleType>
Administration API
189
<restriction base="string" >
<enumeration value="LDAP" />
<enumeration value="NAME" />
</restriction>
</simpleType>
</attribute>
</extension>
</simpleContent>
</complexType>
LdapSearchCriteriaFilter のパラ メ ー タ
LdapSearchCriteriaFilter のパ ラ メ ー タ を次の表に示 し ます。
表 10
LdapSearchCriteriaFilter のパラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可
値
type
こ の属性は、 検索が LDAP
ベース の検索 と NAME ベー
ス の検索の ど ち ら であ る か を
定義 し ます。 LDAP タ イ プの
検索の場合、 フ ィ ル タ 値は
RFC2254 ( 「The String
Representation of LDAP Search
Filters」 ) に準拠 し ます。
省略可
デフ ォ ル ト 値は LDAP です。
NAME タ イ プの場合、 フ ィ ル
タ 値は文字列で、 ワ イ ル ド
カー ド (*) を使用で き ます。
190
第9章
AdminFault
AdminFault には、 Administration API 呼び出 し か ら 戻 る エ ラ ー メ ッ セージが格納 さ れます。 定義
は次の と お り です。
<complexType name="AdminFault">
<sequence>
<element name="errorCode" type="int"/>
<element name="errorMessage" nullable="true" type="string"/>
<element name="errorDetailCode" type="int"/>
<element name="errorDetailMessage" nullable="true" type="string"/>
<element name="errorObjects" nullable="true" type="string"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
リ ソ ース固有の API
リ ソ ース固有の API 処理は、 ネ ッ ト ワ ー ク ア ク セ ス リ ソ ース にのみ適用 さ れ ます。
getResource
getResource は、 リ ソ ース の詳細を取得す る ために使用 し ます。
入力
getResource は、 入力 と し て resourcePath を取 り ます。 resourcePath と し てネ ッ ト ワ ー
ク リ ソ ー ス パ ス と ネ ッ ト ワ ー ク 管理 リ ソ ー ス パ ス のみが使用で き ま す。 詳細は、 185 ページの
「ネ ッ ト ワ ー ク リ ソ ース パ ス」 と 185 ページの 「ネ ッ ト ワ ー ク 管理 リ ソ ース パ ス」 を参照 し て く
だ さ い。
出力
getResource は、 エ ラ ー が な い 場 合、 Resource の イ ン ス タ ン ス を 返 し ま す。 デー タ の 種類
Resource の定義は次の と お り です。
<complexType name="Resource">
<sequence>
<element name="resourcePath" type="string"/>
<element name="type">
<simpleType>
<annotation>
<documentation>Resource type can be one of the Folder,
Service, and Resource types.</documentation>
</annotation>
<restriction base="string">
<enumeration value="Folder" />
Administration API
191
<enumeration value="Service" />
<enumeration value="Resource" />
</restriction>
</simpleType>
</element>
<element name="charSet" nullable="true" type="string"/>
<element name="server" nullable="true" type="impl:ResourceServer"
minOccurs="0" maxOccurs="unbounded"/>
<element name="continued" type="boolean"/>
</sequence>
</complexType>
getResource のパラ メ ー タ
getResource のパ ラ メ ー タ を次の表に示 し ます。
表 11
getResource のパラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可 値
resourcePath
返 さ れ る リ ソ ース の
resourcePath。
必須
前述の resourcePath の形
式の文字列。
type
リ ソ ース タ イ プ。
必須
Folder、 Service、
Resource のいずれかです。
charSet
リ ソ ース タ イ プが Service の
と き のみ有効。 こ のサービ ス で
使用中の文字セ ッ ト を示 し ま
す。
省略可
server
リ ソ ース タ イ プが Service の
と き のみ有効。 デー タ の種類
ResourceServer の イ ン ス タ
ン ス です。
リ ソ ース
タ イ プが
Service
の場合、
必須。
192 ページの
「ResourceServer」 を参照 し て
く だ さ い。
continued
LdapSearchCriteria で
pageSize を定義 し て リ ソ ース
を検索す る 場合にのみ使用 し ま
す。 こ のパ ラ メ ー タ は、 返 さ れ
る エ ン ト リ が ま だあ る か ど う か
を示 し ます。 true の場合、 次の
ページ を読み込むために、
LdapSearchCriteria で
continuedID と し て こ の リ
ソ ース の resourcePath を使
用で き ます。
省略可
デフ ォ ル ト 値は false です。
ResourceServer
ResourceServer は、 Policy Builder の [ リ ソ ース サーバー ] のサーバーに該当 し ます。 定義は次
の と お り です。
192
第9章
<complexType name="ResourceServer">
<sequence>
<element name="url" nullable="true" type="string"/>
<element name="representative" type="boolean"/>
</sequence>
</complexType>
ResourceServer のパラ メ ー タ
ResourceServer のパ ラ メ ー タ を次の表に示 し ます。
表 12
ResourceServer のパラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可 値
url
こ の リ ソ ース サーバーの
URL。
必須
representative
こ のサーバーが代表サーバー 必須
の場合、 true です。 こ の リ
ソ ース サーバーで リ ソ ース検
出を実行す る と 、 こ の代表
サーバーのみが ス キ ャ ン さ れ
ます。 詳細は、 『HP
OpenView Select Access 6.2
Policy Builder ガ イ ド 』 を参照
し て く だ さ い。
Null にす る こ と も で き ます。
true ま たは false
プ ログ ラ ム例
プ ロ グ ラ ム例はすべて、 Axis フ レーム ワー ク に基づいた Java プ ロ グ ラ ム です。
public void getResourceSample() throws Exception {
// WsadminSoapBindingStub is generated from the WSDL by Axis's
wsdl2java tool
com.hp.ov.selectaccess.adminserver.wsadmin.client.WsadminSoapBindingStub
adminApi;
// WsadminServiceLocater is generated from the WSDL by Axis's
wsdl2java tool
try {
adminApi = (com.hp.ov.selectaccess.adminserver.wsadmin.
client.WsadminSoapBindingStub)
new
com.hp.ov.selectaccess.adminserver.wsadmin.client.WsadminServiceLocator
().getwsadmin();
}
catch (javax.xml.rpc.ServiceException jre) {
if(jre.getLinkedCause()!=null)
jre.getLinkedCause().printStackTrace();
Administration API
193
}
// Time out after a minute
adminApi.setTimeout(60000);
// set the credentials of Admin API call
// The user id used in the call must be delegated through Policy
Builder and has necessary permissions
adminApi.setUsername("adminApi_user_id");
adminApi.setPassword("adminApi_user_password");
// Resource is generated from the WSDL by wsdl2java
// See above for the definition of Resource
com.hp.ov.selectaccess.adminserver.wsadmin.client.Resource
value = null;
try {
value = adminApi.getResource("/network/http");
String charset = value.getCharSet();
String path = value.getResourcePath();
// ResourceType is created from WSDL by wsdl2java
ResourceType type = value.getType();
if (type.equals(ResourceType.Service)) {
ResourceServer[] servers = value.getServer();
for (int i = 0; i < servers.length; i++) {
ResourceServer server = servers[i];
String url = server.getUrl();
boolean isRepresentative = server.isRepresentative();
}
}
} catch
(com.hp.ov.selectaccess.adminserver.wsadmin.client.AdminFault e1) {
System.err.println("Error code:" + e1.getErrorCode());
System.err.println("Error message:" + e1.getErrorMessage());
}
}
setResource
setResource は、 リ ソ ース を変更す る ために使用 し ます。
入力
setResource は、 2 つの入力フ ィ ール ド を取 り ます。 入力の値に よ り 、 結果は異な り ます。 入力
の定義は次の と お り です。
<complexType>
<sequence>
<element name="oldResource" nullable="true" type="impl:Resource"/>
<element name="newResource" nullable="true" type="impl:Resource"/>
</sequence>
</complexType>
194
第9章
setResource の入力パラ メ ー タ
setResource の入力パ ラ メ ー タ を次の表に示 し ます。
表 13
setResource の入力パ ラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可
値
oldResource
変更の対象 と な る リ ソ ース を
表す リ ソ ース イ ン ス タ ン ス。
必須
Null にす る こ と も で き ます。
newResource
変更後の リ ソ ース を表す リ
ソ ース イ ン ス タ ン ス。
必須
Null にす る こ と も で き ます。
setResource の動作
setResource の動作を次の表に示 し ます。
表 14
setResource の動作
oldResource の値
newResource の値
処理内容
Null
Null
例外を ス ロ ー し 、 引数が無効であ る こ
と を示す メ ッ セージ を表示 し ます。
Null
有効な非 Null 値
新 し い リ ソ ース を作成 し ます。
存在す る リ ソ ース を
示す非 Null 値
Null
oldResource を削除 し ます。
存在す る リ ソ ース を
示す非 Null 値
有効な非 Null 値
oldResource を newResource に変
更 し ます。
入力に渡す こ と ので き る のは、 ネ ッ ト ワ ー ク リ ソ ース のみです。 newResource には、 有効な先
祖が必要です。 た と え ば、 /network/node/http を newResource と し て 定義す る に は、 /
network/node がすでに存在す る こ と が必要です。
出力
setResource は、 文字列を返 し ます。 返 さ れ る 文字列の定義は次の と お り です。
<simpleType name="ReturnString">
<restriction base="string">
<enumeration value="SUCCESS" />
<enumeration value="FAILURE" />
<enumeration value="PENDING_WORKFLOW" />
</restriction>
</simpleType>
Administration API
195
setResource の出力パラ メ ー タ
setResource の出力パ ラ メ ー タ を次の表に示 し ます。
表 15
setResource の出力パ ラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可
値
SUCCESS
setResource が正 し く 実行 さ れた
こ と を示 し ます。
適用外
適用外
FAILURE
処理が失敗 し た こ と を示 し ます。
適用外
適用外
PENDING_WORKFLOW
要求が送信 さ れた も のの、 承認
待ちであ る こ と を示 し ます。
適用外
適用外
プ ログ ラ ム例
新 し い リ ソ ース を作成す る ためのプ ロ グ ラ ム例を示 し ます。
protected void setResourceSample() {
// WsadminSoapBindingStub is created by wsdl2java
com.hp.ov.selectaccess.adminserver.wsadmin.client.WsadminSoap
BindingStub adminApi;
// WsadminServiceLocator is created by wsdl2java
try {
adminApi = (com.hp.ov.selectaccess.adminserver.wsadmin.
client.WsadminSoapBindingStub)
new com.hp.ov.selectaccess.adminserver.wsadmin.
client.WsadminServiceLocator().getwsadmin();
}
catch (javax.xml.rpc.ServiceException jre) {
if(jre.getLinkedCause()!=null)
jre.getLinkedCause().printStackTrace();
}
// Time out after a minute
adminApi.setTimeout(60000);
adminApi.setUsername(username);
adminApi.setPassword(password);
try {
// ReturnString is generated by wsdl2java
ReturnString value = null;
Resource resource = new Resource();
resource.setCharSet(“UTF-8”);
resource.setResourcePath(“/network/http”);
resource.setType(ResourceType.Service);
ResourceServer resourceServer = new ResourceServer();
resourceServer.setRepresentative(true);
resourceServer.setUrl(“http://localhost:80”);
resource.setServer(new ResourceServer[] { resourceServer });
value = adminApi.setResource(null, resource);
} catch (com.hp.ov.selectaccess.adminserver.wsadmin.
client.AdminFault e1) {
System.err.println(“Error:“ + e1.getErrorMessage());
196
第9章
} catch (RemoteException e) {
e.printStackTrace();
}
}
searchResources
searchResources は、 リ ソ ース の リ ス ト を検索す る ために使用 し ます。
入力
searchResources は、 入力 と し て LdapSearchCriteria を取 り ます。 詳細は、 187 ページの
「LdapSearchCriteria」 を参照 し て く だ さ い。
出力
searchResources は、 リ ソ ース の リ ス ト を返 し ます。 リ ソ ース API の詳細は、 191 ページの 「 リ
ソ ース固有の API」 を参照 し て く だ さ い。
プ ログ ラ ム例
public void searchResourcesSample() throws Exception {
// WsadminSoapBindingStub is generated by wsdl2java
com.hp.ov.selectaccess.adminserver.wsadmin.client.WsadminSoapBindingStub
adminApi;
try {
adminApi = (com.hp.ov.selectaccess.adminserver.wsadmin.
client.WsadminSoapBindingStub)
new com.hp.ov.selectaccess.adminserver.wsadmin.client.
WsadminServiceLocator().getwsadmin();
}
catch (javax.xml.rpc.ServiceException jre) {
if(jre.getLinkedCause()!=null)
jre.getLinkedCause().printStackTrace();
}
// Time out after a minute
adminApi.setTimeout(60000);
adminApi.setUsername(username);
adminApi.setPassword(password);
com.hp.ov.selectaccess.adminserver.wsadmin.client.Resource[]
value = null;
try {
// LdapSearchCriteria is generated by wsdl2java
LdapSearchCriteria filter = new LdapSearchCriteria();
filter.setThreshold(new Integer(3));
filter.setBaseID("/network");
// LdapSearchCriteriaScope is generated by wsdl2java
filter.setScope(LdapSearchCriteriaScope.SUB);
value = adminApi.searchResources(filter);
Administration API
197
}
catch (Exception e1) {
e1.printStackTrace();
}
try {
LdapSearchCriteria filter = new LdapSearchCriteria();
filter.setBaseID(“/network”);
filter.setScope(LdapSearchCriteriaScope.BASE);
value = adminApi.searchResources(filter);
} catch (Exception e1) {
e1.printStackTrace();
}
try {
// example of name search
LdapSearchCriteria searchCriteria = new LdapSearchCriteria();
searchCriteria.setBaseID("/network");
searchCriteria.setScope(LdapSearchCriteriaScope.SUB);
// LdapSearchCriteriaFilter is generated by wsdl2java
LdapSearchCriteriaFilter filter = new
LdapSearchCriteriaFilter();
// LdapSearchCriteriaFilterType is generated by wsdl2java
filter.setType(LdapSearchCriteriaFilterType.NAME);
// use wildcard
filter.set_value("*");
searchCriteria.setFilter(filter);
value = adminApi.searchResources(searchCriteria);
} catch (Exception e1) {
e1.printStackTrace();
}
}
ポ リ シー固有の API
getPolicies
getPolicies は、 ポ リ シー グ リ ッ ド の部分を返 し ます。
入力
getPolicies は、 2 つの入力フ ィ ール ド を取 り ます。 最初の フ ィ ール ド では リ ソ ース の範囲を定
義 し 、 2 つ目の フ ィ ール ド ではア イ デン テ ィ テ ィ の範囲を定義 し ま す。 入力の定義は次の と お り
です。
<complexType>
<sequence>
<element name="resourceCriteria" type="impl:LdapSearchCriteria"/>
<element name="identityCriteria" type="impl:LdapSearchCriteria"/>
</sequence>
</complexType>
198
第9章
resourceCriteria と identityCriteria は、 ど ち ら も LdapSearchCriteria の イ ン ス タ
ン ス です。 ページ ン グ も 使用で き ます。
出力
getPolicies は、ResourceRow の リ ス ト を返 し ます。検索で リ ソ ース ま たはア イ デン テ ィ テ ィ
が見つか ら ない場合、 AdminFault がエ ラ ー コ ー ド と エ ラ ー メ ッ セージ を返 し ます。
ResourceRow の定義は次の と お り です。
<complexType name="ResourceRow">
<sequence>
<element name="identityColumn" type="impl:IdentityColumn"
minOccurs="0" maxOccurs="unbounded"/>
<element name="continued" type="boolean"/>
</sequence>
<attribute name="resourcePath" type="string" />
</complexType>
getPolicies のパラ メ ー タ
getPolicies のパ ラ メ ー タ を次の表に示 し ます。
表 16
getPolicies のパ ラ メ ー タ
必須 / 省略可
値
identityColumn IdentityColumn の リ ス ト 。
IdentityColumn について
は、 199 ページの
「IdentityColumn」 を参照 し て
く だ さ い。 各
IdentityColumn はポ リ シー
グ リ ッ ド です。
省略可
IdentityColumn の リ ス
ト 。 詳細は、 199 ページの
「IdentityColumn」 を参照 し
て く だ さ い。
continued
返すエ ン ト リ が ま だあ る か ど
う か を示 し ます。
resourceCriteria でペー
ジ ン グが設定 さ れてい る 場合
にのみ使用 さ れ ます。
必須
デフ ォ ル ト は false です。
resourcePath
詳細は、 184 ページの
必須
「resourcePath」 を参照 し て く だ
さ い。
resourcePath は、 ペー
ジ ン グ ナビ ゲーシ ョ ン で使
用で き ます。
パラ メ ー タ
処理内容
IdentityColumn
返 さ れ る 各 ResourceRow には、 IdentityColumn の リ ス ト が格納 さ れ ます。
各 IdentityColumn には、 identityDN と こ のア イ デン テ ィ テ ィ のポ リ シーが格納 さ れます。
IdentityColumn の定義は次の と お り です。
<complexType name="IdentityColumn">
<sequence>
Administration API
199
<element name="policy" type="impl:Policy"/>
<element name="continued" type="boolean"/>
</sequence>
<attribute name="identityDN" type="string" />
</complexType>
IdentityColumn のパラ メ ー タ
IdentityColumn のパ ラ メ ー タ を次の表に示 し ます。
表 17
IdentityColumn のパ ラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可 値
policy
こ のグ リ ッ ド のポ リ シー。
必須
詳細は、 199 ページの
「IdentityColumn」 を参照 し て く
だ さ い。
continued
返すエ ン ト リ が ま だあ る か ど
う か を示 し ます。
resourceCriteria でペー
ジ ン グが設定 さ れてい る 場合
にのみ使用 さ れ ます。
必須
デフ ォ ル ト は false です。
identityDN
詳細は、 187 ページの
「identityDN」 を参照 し て く だ
さ い。
必須
詳細は、 200 ページの 「Policy」
を参照 し て く だ さ い。
Policy
policy の基本的な定義は次の と お り です。
<complexType name="Policy" abstract="true">
<sequence>
<element name="state" type="string"/>
<element name="inherited" type="boolean"/>
</sequence>
</complexType>
Policy のパラ メ ー タ
policy のパ ラ メ ー タ を次の表に示 し ます。
表 18
200
Policy のパラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可
値
state
ポ リ シーの状態。
必須
サブ タ イ プに よ り 異な り ます。
inherited
ポ リ シーが継承 さ れ る か ど う
か を示 し ます。
必須
true は、 ポ リ シーが継承 さ れ
る ( 明示的に定義 さ れない ) こ
と を示 し ます。
第9章
Policy は抽象型であ る ため直接入力に渡す こ と はで き ません。 policy には、 次の 4 つのサブ タ イ
プがあ り ます。
•
AccessPolicy
•
WorkflowPolicy
•
AdminPolicy
•
SelectAuthPolicy
AccessPolicy
ネ ッ ト ワ ー ク リ ソ ー ス にはア ク セ ス ポ リ シーがあ り ます。 AccessPolicy の定義は次の と お り
です。
<complexType name="AccessPolicy">
<annotation>
<documentation>When setting AccessPolicy state, AccessPolicyState
should be used.</documentation>
</annotation>
<complexContent>
<extension base="impl:Policy">
<sequence>
<element name="rule" nullable="true" type="impl:Rule"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
AccessPolicy のパラ メ ー タ
AccessPolicy のパ ラ メ ー タ を次の表に示 し ます。
表 19
AccessPolicy のパ ラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可 値
state
ポ リ シーの状態。 policy か
ら 継承 さ れ ます。
必須
state は、 ALLOW、 DENY、 RULE
のいずれかです。 RULE は、 リ
ソ ース に条件付 き ルールが適用
さ れ る こ と を示 し ます。
inherited
ポ リ シーが継承 さ れ る か ど う
か を示 し ます。
必須
true は、 ポ リ シーが明示的に
定義 さ れない こ と を示 し ます。
rule
ルールの リ ス ト 。
省略可
state が RULE の場合、 こ のパ ラ
メ ー タ は条件付 き ルールに関す
る 情報を持ち ます。
Rule
rule の定義は次の と お り です。
Administration API
201
<complexType name="Rule">
<sequence>
<element name="state">
<simpleType>
<annotation>
<documentation>A rule state can be one of VALID, INVALID,
and MISSING</documentation>
</annotation>
<restriction base="string">
<enumeration value="VALID" />
<enumeration value="INVALID" />
<enumeration value="MISSING"/>
</restriction>
</simpleType>
</element>
<element name="name" type="string"/>
</sequence>
</complexType>
Rule のパラ メ ー タ
rule のパ ラ メ ー タ を次の表に示 し ます。
表 20
Rule のパラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可
値
state
ルールの状態。
必須
VALID、 INVALID、 ま たは
MISSING です。
name
ルール名。
必須
•
VALID は、 ルールが有効
であ る こ と を示 し ます。
•
INVALID は、 ルールの形
式に誤 り があ る こ と を示 し
ます。
•
MISSING は、 指定 さ れた
名前のルールがない こ と を
示 し ます。
ルール名。
WorkflowPolicy
WorkflowPolicy では、 管理 リ ソ ース に ワー ク フ ロ ーを適用す る 方法を設定 し ます。 こ れは、 次
の よ う に定義 さ れ ます。
<complexType name="WorkflowPolicy">
<annotation>
<documentation>When setting WorkflowPolicy state,
WorkflowPolicyState should be used.</documentation>
</annotation>
<complexContent>
202
第9章
<extension base="impl:Policy">
<sequence>
<element name="rule" nullable="true" type="impl:Rule"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
WorkflowPolicy のパラ メ ー タ
WorkflowPolicy のパ ラ メ ー タ を次の表に示 し ます。
表 21
WorkflowPolicy のパ ラ メ ー タ
必須 / 省略可 値
パラ メ ー タ
処理内容
state
ワ ーク フ ロ ー ポリ シーの状態。 必須
ENABLED ま たは DISABLED の
いずれかです。
inherited
ポ リ シーが継承 さ れ る か ど う
か を示 し ます。
ワー ク フ ロ ー ポ リ シーが明示的
に定義 さ れていない場合、 true
です。
rule
有効な ワ ーク フ ロ ー ルールの 必須
リ ス ト 。 詳細は、 201 ページの
「Rule」 を参照 し て く だ さ い。
必須
Null にす る こ と も で き ます。
AdminPolicy
AdminPolicy は、 管理 リ ソ ース のポ リ シーです。 定義は次の と お り です。
<complexType name="AdminPolicy">
<annotation>
<documentation>When setting AdminPolicy state, AdminPolicyState
should be used.</documentation>
</annotation>
<complexContent>
<extension base="impl:Policy">
<sequence>
<element name="workflowPolicy" nullable="true"
type="impl:WorkflowPolicy"/>
</sequence>
</extension>
</complexContent>
</complexType>
Administration API
203
AdminPolicy のパラ メ ー タ
AdminPolicy のパ ラ メ ー タ を次の表に示 し ます。
表 22
AdminPolicy のパラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可 値
state
管理ポ リ シーの状態。
必須
取 り う る 値は、 FULL、
READ_ONLY、 POLICY_ONLY、
ADMIN_ONLY、 お よ び NONE で
す。 有効な値は、 ポ リ シーの適
用先 リ ソ ース の種類に よ り 、 次
の よ う に異な り ます。
•
ア イ デン テ ィ テ ィ 管理 リ
ソ ース の場合、 FULL、
POLICY_ONLY、
ADMIN_ONLY、 NONE のみ
が有効です。
•
ス キーマ リ ソ ース の場合、
FULL と READ_ONLY のみ
が有効です。
•
機能お よ びネ ッ ト ワ ー ク 管
理 リ ソ ース の場合、 FULL
と NONE を使用で き ます。
inherited
ポ リ シーが継承 さ れ る か
ど う か を示 し ます。
必須
管理ポ リ シーが明示的に定義 さ
れていない場合、 true です。
workflowPolicy
グ リ ッ ド のワーク フ ロー
ポ リ シーを定義 し ます。
必須
Null にす る こ と も で き ます。 詳
細は、 202 ページの
「WorkflowPolicy」 を参照 し て く
だ さ い。
SelectAuthPolicy
SelectAuthPolicy は、 特 定 の リ ソ ー ス で の 認 証 サ ー ビ ス を 定 義 す る た め に 使 用 し ま す。
SelectAuthPolicy の定義は次の と お り です。
<complexType name="SelectAuthPolicy">
<annotation>
<documentation>When setting SelectAuthPolicy state,
SelectAuthPolicyState should be used.</documentation>
</annotation>
<complexContent>
<extension base="impl:Policy">
<sequence>
<element name="property" type="impl:SelectAuthPropertyType"
minOccurs="0" maxOccurs="1" nullable="true"/>
</sequence>
</extension>
</complexContent>
</complexType>
204
第9章
SelectAuthPolicy のパラ メ ー タ
SelectAuthPolicy のパ ラ メ ー タ を次の表に示 し ます。
表 23
SelectAuthPolicy のパラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可
値
state
SeletAuth ポ リ シーの状態。
必須
ENABLED ま たは DISABLED の
いずれかです。
inherited
ポ リ シーが継承 さ れ る か ど う
か を示 し ます。
必須
SelectAuth ポ リ シーが明示的に
定義 さ れていない場合、 true
です。
property
リ ソ ース の認証サービ ス。
省略可
詳細は、 205 ページの
「SelectAuthPropertyType」 を参
照 し て く だ さ い。
SelectAuthPropertyType
SelectAuthPropertyType は、Select Access のルール コ ン ポーネ ン ト と 認証 コ ン ポーネ ン ト の
XML ス キーマ定義です。 ド キ ュ メ ン ト 要素 COMPONENT の定義は次の と お り です。
<complexType name="ComponentType">
<annotation>
<documentation>The XML schema of Select Access rule and
authentication component</documentation>
</annotation>
<sequence>
<element ref="impl:PROPERTYLIST" minOccurs="1" maxOccurs="1"/>
</sequence>
<attribute name="TYPE" type="string" use="required" />
<attribute name="CONDITION" type="string" use="required"/>
<attribute name="NAME" type="string" use="required"/>
<attribute name="DESCRIPTION" type="string" use="required"/>
<attribute name="EVALUATOR" type="string" use="required"/>
<attribute name="CONFIGURATOR" type="string" use="required"/>
</complexType>
Administration API
205
SelectAuthPropertyType のパラ メ ー タ
SelectAuthPropertyType のパ ラ メ ー タ を次の表に示 し ます。
表 24
SelectAuthPropertyType のパ ラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可
値
PROPERTYLIST
プ ロ パテ ィ の リ ス ト 。
必須
詳細は、 207 ページの
「PROPERTYLIST」 を参照 し て
く だ さ い。
TYPE
コ ン ポーネ ン ト の タ イ プ。
必須
コ ン ポーネ ン ト を
SelectAuthPolicy で使用す る 場合
は、 decision にす る 必要があ
り ます。
CONDITION
こ の コ ン ポーネ ン ト の使用
条件。
必須
コ ン ポーネ ン ト を
SelectAuthPolicy で使用す る 場合
は、 any にす る 必要があ り ま
す。
NAME
コ ン ポーネ ン ト の名前。
必須
コ ン ポーネ ン ト を
SelectAuthPolicy で使用す る 場合
は、 authentication にす る
必要があ り ます。
DESCRIPTION
コ ン ポーネ ン ト の説明。
必須
コ ン ポーネ ン ト を
SelectAuthPolicy で使用す る 場合
は、 Authenticate Users に
す る 必要があ り ます。
EVALUATOR
コ ン ポーネ ン ト のエバ リ ュ
エー タ 。
必須
コ ン ポーネ ン ト を
SelectAuthPolicy で使用す る 場合
は、 authentication にす る
必要があ り ます。
CONFIGURATOR
コ ン ポーネ ン ト を設定す る
ために使用す る Java ク ラ ス
(GUI 画面 )。
必須
コ ン ポーネ ン ト を
SelectAuthPolicy で使用す る 場合
は、
com.hp.ov.selectaccess.r
ulebuilder.screens.AuthP
ropertiesDlg にす る 必要があ
り ます。
COMPONENT
各 COMPONENT に は、 PROPERTYLIST が 1 つだ け 存在 し ま す。 こ の PROPERTYLIST の名前は
authentication でなければな り ません。 こ の PROPERTYLIST 内の PROPERTY は、 有効な認証
サービ ス であ る こ と が必要です。 PROPERTYLIST の定義は次の と お り です。
<complexType name="PropertyListType" mixed="false">
<annotation>
<documentation>PropertyList may have Property and PropertyList
children</documentation>
206
第9章
</annotation>
<sequence>
<element ref="impl:PROPERTYLIST" minOccurs="0"
maxOccurs="unbounded"/>
<element ref="impl:PROPERTY" minOccurs="0" maxOccurs="unbounded"
/>
</sequence>
<attribute use="required" name="NAME" type="string" />
</complexType>
COMPONENT のパラ メ ー タ
COMPONENT のパ ラ メ ー タ を次の表に示 し ます。
表 25
COMPONENT のパラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可
値
PROPERTYLIST
各 PROPERTYLIST は、
PROPERTYLIST を 1 つ以上
持つ こ と がで き ます。
省略可
適用外
PROPERTY
詳細は、 207 ページの
「PROPERTY」 を参照 し て く
だ さ い。
省略可
適用外
name
こ の PROPERTYLIST の名前。 必須
適用外
PROPERTYLIST
各 PROPERTYLIST は名前属性を持つ必要があ り ます。 ま た、 各 PROPERTYLIST は、
PROPERTYLIST や PROPERTY を 1 つ以上持つ こ と も 、 持たない こ と も 可能です。 PROPERTY は、
基本的に、 XML 形式の名前 と 値のペアです。 定義は次の と お り です。
<complexType name="PropertyType">
<annotation>
<documentation>
This is a generic property element.
</documentation>
</annotation>
<simpleContent>
<extension base="string">
<attribute use="required" name="NAME" type="string" />
</extension>
</simpleContent>
</complexType>
PROPERTY
PROPERTY が認証サービ ス を参照す る 場合、 NAME 属性の値は有効な認証方式で、 PROPERTY の
テ キ ス ト は有効な認証サービ ス名であ る こ と が必要です。
Administration API
207
SelectAuthProperty XML の例
一般的な SelectAuthProperty XML は次の と お り です。
<?xml version="1.0" encoding="UTF-8"?>
<!—DON’T change anything in the root document->
<COMPONENT TYPE="decision" CONDITION="any" NAME="authentication"
DESCRIPTION="Authenticate Users" EVALUATOR="authentication"
CONFIGURATOR="com.hp.ov.selectaccess.rulebuilder.screens.
AuthPropertiesDlg">
<!—NAME attribute must be “authentication”->
<PROPERTYLIST NAME="authentication">
<!—for P13n propertylist, the NAME must be “Personalization”->
<PROPERTYLIST NAME="Personalization">
<!—NAME must be “UserAttributes” to define identity
attribute->
<PROPERTYLIST NAME="UserAttributes">
<!—In identity attribute, the NAME must be valid LDAP
attribute, the text value is the environment variable
name->
<PROPERTY NAME="member">id13n2</PROPERTY>
</PROPERTYLIST>
<!—to define group attribute, the NAME must be
“GroupAttributes”->
<PROPERTYLIST NAME="GroupAttributes">
<!—the NAME must be valid LDAP attribute, and the text
value is the environment variable->
<PROPERTY NAME="aliasedObjectName">group13n2</PROPERTY>
</PROPERTYLIST>
<!—to define dynamic group attribute, the NAME must be
“RoleAttributes”->
<PROPERTYLIST NAME="RoleAttributes">
<!—the NAME must be valid LDAP attribute, and the text
value is environment variable name ‡
<PROPERTY NAME="associatedDomain">role13n2</PROPERTY>
</PROPERTYLIST>
<!—to define identity DN, the NAME must be “UserDN”, and the
text value is the environment variable used to store identity
DN->
<PROPERTY NAME="UserDN">id13n</PROPERTY>
<!—to define group name, the NAME must be “GroupNames”, and
the text value is the environment variable to store group
names->
<PROPERTY NAME="GroupNames">groupp13n</PROPERTY>
<!—to define dynamic group names, the NAME must be
“RoleNames”, and the text value is the environment variable
to store dynamic group names->
<PROPERTY NAME="RoleNames">rolep13n</PROPERTY>
</PROPERTYLIST>
<!—PROPERTY in this level must refer to authentication
service, the value of NAME attribute must be valid
authentication method, and the text value is the
authentication service name.->
208
第9章
<PROPERTY NAME="password">password</PROPERTY>
<PROPERTY NAME="registration">Reg</PROPERTY>
</PROPERTYLIST>
</COMPONENT>
プ ログ ラ ム例
public void getPoliciesSample() throws Exception {
com.hp.ov.selectaccess.adminserver.wsadmin.client.WsadminSoapBindingStub
adminApi;
try {
adminApi = (com.hp.ov.selectaccess.adminserver.wsadmin.
client.WsadminSoapBinding Stub)
new com.hp.ov.selectaccess.adminserver.wsadmin.client.
WsadminServiceLocator ().getwsadmin();
}
catch (javax.xml.rpc.ServiceException jre) {
if(jre.getLinkedCause()!=null)
jre.getLinkedCause().printStackTrace();
}
// Time out after a minute
adminApi.setTimeout(60000);
adminApi.setUsername(username);
adminApi.setPassword(password);
com.hp.ov.selectaccess.adminserver.wsadmin.client.ResourceRow[]
value = null;
// Get a portion of grids
try {
LdapSearchCriteria resourceFilter = new LdapSearchCriteria();
resourceFilter.setBaseID("/network");
resourceFilter.setScope(LdapSearchCriteriaScope.SUB);
LdapSearchCriteria subjectFilter = new LdapSearchCriteria();
subjectFilter.setBaseID(auth_dn);
subjectFilter.setScope(LdapSearchCriteriaScope.SUB);
value = adminApi.getPolicies(resourceFilter, subjectFilter);
IdentityColumn idCol = value[0].getIdentityColumn(0);
Policy policy = idCol.getPolicy();
}
catch (Exception e1) {
System.err.println("Error:" + e1.getErrorMessage());
}
// get only one grid
try {
LdapSearchCriteria resourceFilter = new LdapSearchCriteria();
resourceFilter.setBaseID(resource_path);
Administration API
209
resourceFilter.setScope(LdapSearchCriteriaScope.BASE);
LdapSearchCriteria subjectFilter = new LdapSearchCriteria();
subjectFilter.setBaseID(auth_dn);
subjectFilter.setScope(LdapSearchCriteriaScope.BASE);
value = adminApi.getPolicies(resourceFilter, subjectFilter);
assertNotNull("getPolicies returns null", value);
IdentityColumn idCol = value[0].getIdentityColumn(0);
Policy policy = idCol.getPolicy();
}
catch (Exception e1) {
System.err.println("Error:" + e1.getErrorMessage());
}
}
setPolicy
setPolicy は、 特定の リ ソ ース にポ リ シーを設定 し ます。
入力
setPolicy には、 4 つの入力フ ィ ール ド があ り ます。 setPolicy の入力フ ィ ール ド の定義は次
の と お り です。
<complexType>
<sequence>
<element name="resourcePath" type="string"/>
<element name="identityDN" type="string"/>
<element name="oldPolicy" type="impl:Policy"/>
<element name="newPolicy" type="impl:Policy"/>
</sequence>
</complexType>
210
第9章
setPolicy のパラ メ ー タ
setPolicy のパ ラ メ ー タ を次の表に示 し ます。
表 26
Administration API
setPolicy のパ ラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可
値
resourcePath
ポ リ シーの適用先 と な る リ
ソ ース。
必須
詳細は、 184 ページの
「resourcePath」 を参照 し て く だ
さ い。
identityDN
ポ リ シーの適用先 と な る 人の
idenityDN。
必須
詳細は、 187 ページの
「identityDN」 を参照 し て く だ
さ い。
oldPolicy
既存のポ リ シー。
必須
リ ソ ース に よ り 異な り ます。
oldPolicy には、
AccessPolicy、
AdminPolicy、
WorkflowPolicy、
SelectAuthPolicy のイ ン ス
タ ン ス を 指定でき ま す。 有効な
値を 指定する 必要があ り ま す。
newPolicy
新 し く 適用す る ポ リ シー。
必須
リ ソ ース に よ り 異な り ます。
newPolicy には、
AccessPolicy、
AdminPolicy、
WorkflowPolicy、
SelectAuthPolicy のイ ン ス
タ ン ス を 指定でき ま す。 有効な
値を 指定する 必要があ り ま す。
211
Select Access は、 複数の管理セ ッ シ ョ ン を サポー ト し てい ます。 セ キ ュ リ テ ィ ホールがで き ない
よ う に全セ ッ シ ョ ン で一貫 し たポ リ シーを適用す る ために、Select Access は oldPolicy を使用 し
てポ リ シーの状態 と 設定を検証 し ます。 newPolicy を作成す る には、 oldPolicy 全体を コ ピー
( 複製 ) し 、 その上に変更を加え ます。 setResource と 異な り 、 setPolicy ではポ リ シーの変
更のみが可能であ り 、 ポ リ シーの削除や作成を行 う こ と はで き ません。
管理ポ リ シー と ワー ク フ ロ ー ポ リ シーは 1 回の関数呼び出 し で設定で き ますが、実装は 2 段階で
行われ ます。 第 1 段階では管理ポ リ シーが設定 さ れ、 第 2 段階では ワー ク フ ロ ー ポ リ シーが設定
さ れ ます。 こ れ ら の処理に原子性はないため、 結果は次の 7 と お り にな り ます。
第 1 段階の状態 = failure ( 失敗 )、 第 2 段階に進む こ と がで き ない → 例外がエ ラ ー メ ッ セージ と
共に返 さ れます。
第 1 段階の状態 = sccess ( 正常終了 )、 第 2 段階 = sccess → sccess が返 さ れ ます。
第 1 段階の状態 = sccess、 第 2 段階 = failure → 例外がエ ラ ー メ ッ セージ と 共に返 さ れます。
第 1 段階の状態 = sccess、第 2 段階 = workflow_pending ( 保留 ) → workflow_pending が返 さ れます。
第 1 段階の状態 = workflow_pending、 第 2 段階 = sccess → workflow_pending が返 さ れ ます。
第 1 段階の状態 = workflow_pending、 第 2 段階 = workflow_pending → workflow_pending が返 さ れ
ます。
第 1 段階の状態 = workflow_pending、 第 2 段階 = failure → 例外がエ ラ ー メ ッ セージ と 共に返 さ れ
ます。
失敗す る と 例外が ス ロ ー さ れ ますが、 第 1 段階の変更は ロ ールバ ッ ク さ れません。 こ れは、 ロ ー
ルバ ッ ク に よ り 、 さ ら に失敗を招 く おそれがあ る ためです。 こ の状況に最 も 適 し た処理方法は自
分で決定す る 必要があ り ます。
出力
setPolicy は、 SUCCESS、 FAILURE、 ま たは PENDING_WORKFLOW のいずれかの文字列を返 し
ます。 定義については、 194 ページの 「setResource」 の 「出力」 を参照 し て く だ さ い。
プ ログ ラ ム例
次のプ ロ グ ラ ム 例は、 wsdl2java に よ り 生成 さ れ る Administration API Java ク ラ ス を 使用 し て
SelectAuthPolicy を設定す る 方法を示 し ます。
public void setPolicySample() throws Exception {
com.hp.ov.selectaccess.adminserver.wsadmin.client.Wsadmin
SoapBindingStub adminApi;
try {
adminApi = (com.hp.ov.selectaccess.adminserver.wsadmin.
client.WsadminSoapBindingStub)
new com.hp.ov.selectaccess.adminserver.wsadmin.
client.WsadminServiceLocator().getwsadmin();
}
catch (javax.xml.rpc.ServiceException jre) {
if(jre.getLinkedCause()!=null)
jre.getLinkedCause().printStackTrace();
}
212
第9章
// Time out after a minute
adminApi.setTimeout(60000);
adminApi.setUsername(username);
adminApi.setPassword(password);
ReturnString value = null;
// get old SelectAuthPolicy
// define resource scope
LdapSearchCriteria resourceFilter = new LdapSearchCriteria();
resourceFilter.setBaseID(resource_path);
resourceFilter.setScope(LdapSearchCriteriaScope.BASE);
// define identity scope
LdapSearchCriteria subjectFilter = new LdapSearchCriteria();
subjectFilter.setBaseID(auth_dn);
subjectFilter.setScope(LdapSearchCriteriaScope.BASE);
ResourceRow[] oldPolicies = null;
Policy oldPolicy = null;
try {
subjectFilter.setBaseID(SpecialIdentity.select_auth
.getValue());
// get grid policy
oldPolicies = adminApi.getPolicies(resourceFilter,
subjectFilter);
SelectAuthPolicy oldSelectAuthPolicy = (SelectAuthPolicy)
oldPolicies[0].getIdentityColumn(0).getPolicy();
SelectAuthPolicy newPolicy = new SelectAuthPolicy();
newPolicy.setState(SelectAuthPolicyState.ENABLED.getValue());
// copy old policy properties
newPolicy.setInherited(oldSelectAuthPolicy.isInherited());
// build SelectAuthProperty
SelectAuthPropertyType selectAuthProperty = new
SelectAuthPropertyType();
ComponentType component = new ComponentType();
selectAuthProperty.setCOMPONENT(component);
component.setCONDITION("any");
component.setCONFIGURATOR("com.hp.ov.selectaccess.
rulebuilder.screens.AuthPropertiesDlg");
component.setDESCRIPTION("Authenticate Users");
component.setEVALUATOR("authentication");
component.setNAME("Authentication");
component.setTYPE("decision");
PropertyListType propertyList = new PropertyListType();
component.setPROPERTYLIST(propertyList);
propertyList.setNAME("authentication");
Administration API
213
PropertyType subProperty1 = new PropertyType();
subProperty1.setNAME("password");
subProperty1.set_value("password");
PropertyType subProperty2 = new PropertyType();
subProperty2.setNAME("certificate");
subProperty2.set_value("cert");
PropertyType[] subProperties = new PropertyType[]
{subProperty1, subProperty2};
propertyList.setPROPERTY(subProperties);
PropertyListType p13n = new PropertyListType();
p13n.setNAME("Personalization");
propertyList.setPROPERTYLIST(new PropertyListType[]{p13n});
PropertyType p13nProperty1 = new PropertyType();
p13nProperty1.setNAME("UserDN");
p13nProperty1.set_value("id13n");
p13n.setPROPERTY(new PropertyType[] {p13nProperty1});
PropertyListType p13nPropertyList1 = new PropertyListType();
p13nPropertyList1.setNAME("UserAttributes");
p13n.setPROPERTYLIST(new
PropertyListType[]{p13nPropertyList1});
PropertyType attributeProperty1 = new PropertyType();
attributeProperty1.setNAME("dn");
attributeProperty1.set_value("foo");
p13nPropertyList1.setPROPERTY(new
PropertyType[]{attributeProperty1});
// SelectAuthProperty is built, set to newPolicy
newPolicy.setProperty(selectAuthProperty);
// call admin api to set the policy
value = adminApi.setPolicy(resource_path,
SpecialIdentity.select_auth.getValue(), oldSelectAuthPolicy,
newPolicy);
}
catch (com.hp.ov.selectaccess.adminserver.wsadmin.client.
AdminFault e1) {
System.err.println("Error:" + e1.getErrorMessage());
}
}
214
第9章
ヘルパ API
refreshValidators
refreshValidators は、Validator のキ ャ ッ シ ュ を ク リ ア し ます。こ の API は入力を取 り ません。
getAuthServiceNames
getAuthServiceNames は、 Policy Builder で定義 さ れたすべての認証サービ ス の名前を返 し ま
す。 こ の API は入力を取 り ません。
getRuleNames
getRuleNames はルール名の リ ス ト を返 し ます。
入力
getRuleNames は RuleType を取 り ます。 RuleType は POLICY_RULE か WORKFLOW_RULE の
いずれかです。
出力
入力の RuleType が POLICY_RULE の場合、 すべてのポ リ シー ルールの名前が返 さ れます。 入力
の RuleType が WORKFLOW_RULE の場合、 すべての ワ ー ク フ ロ ー ルールの名前が返 さ れます。
パスワー ド の変更
Administration API では、 ユーザーのセル フ 管理、 パ ス ワ ー ド の リ セ ッ ト 、 ま たは Administration
API で作成 さ れたユーザー パ ス ワー ド に変更を加え る こ と がで き ます。
ユーザー パスワー ド の変更
パ ス ワ ー ド を変更す る には、 ユーザーが ク ラ イ ア ン ト アプ リ ケーシ ョ ンに ロ グ イ ンす る 必要があ
り ます。 ユーザーは、 自分の LDAP DN、 正確な古いパ ス ワー ド 、 新 し いパ ス ワ ー ド を入力す る 必
要があ り ます。
多 く の 場 合、 ユ ー ザ ー は、 authenticated_dn を あ ら か じ め 提 供 す る (servletfilter、
axisfilter) Enforcer プ ラ グ イ ン を使用 し てすでに Select Access に ロ グ イ ン し てい ます。
アプ リ ケーシ ョ ン がユーザーのパ ス ワ ー ド を変更す る ために Administration API を呼び出 し ます。
Web サービ ス サーバーにユーザーの認証情報を送信す る のは ク ラ イ ア ン ト ア プ リ ケーシ ョ ン の
役割です。 Web サービ ス サーバーは、 認証 さ れた DN を使用 し て Administration Server に RMI 呼
び出 し を行い ます。
Administration API
215
setUserPassword
setUserPassword は、 ユーザー パ ス ワー ド を変更 し ます。
入力
入力フ ィ ール ド は次の と お り です。
<complexType>
<sequence>
<element name="identityName" type="string"/>
<element name="oldPassword" type="string"/>
<element name="newPassword" type="string"/>
</sequence>
</complexType>
setUserPassword のパラ メ ー タ
setUserPassword のパ ラ メ ー タ を次の表に示 し ます。
表 27
setUserPassword のパラ メ ー タ
パラ メ ー タ
処理内容
必須 / 省略可 値
identityName
パ ス ワ ー ド を変更す る 必要の
あ る ア イ デン テ ィ テ ィ 。 現
在、 identityDN のみがサ
ポー ト さ れてい ます。
必須
identiyDN。 詳細は、 187 ペー
ジの 「identityDN」 を参照 し て
く だ さ い。
oldPassword
古いパ ス ワー ド 。
必須
古いパ ス ワー ド
newPassword
新 し いパ ス ワ ー ド 。 パ ス ワ ー 必須
ド ポ リ シーが設定 さ れてい る
場合、 特定の制限を持つポ リ
シーに基づいて新 し いパ ス
ワー ド が検証 さ れ ます。 パ ス
ワー ド ポ リ シーについては、
『HP OpenView Select Access
6.2 Policy Builder ガ イ ド 』 を
参照 し て く だ さ い。
新 し いパ ス ワ ー ド
出力
パ ス ワ ー ド が 正 常 に 変 更 さ れ る と 、 何 も 戻 り ま せ ん。 正 常 に 変 更 さ れ な か っ た 場 合 は、
AdminFault がエ ラ ー メ ッ セージ と 共に ス ロ ー さ れ ます。
プ ログ ラ ム例
public void setPasswordSample() throws Exception {
com.hp.ov.selectaccess.adminserver.wsadmin.client.Wsadmin
SoapBindingStub adminApi;
try {
216
第9章
adminApi = (com.hp.ov.selectaccess.adminserver.wsadmin.
client.WsadminSoapBindingStub)
new com.hp.ov.selectaccess.adminserver.wsadmin.
client.WsadminServiceLocator().getwsadmin();
}
catch (javax.xml.rpc.ServiceException jre) {
if(jre.getLinkedCause()!=null)
jre.getLinkedCause().printStackTrace();
}
// Time out after a minute
adminApi.setTimeout(60000);
adminApi.setUsername(username);
adminApi.setPassword(password);
String id_DN = "cn=foo, ou=bar, O=foobar";
try {
adminApi.setUserPassword(id_DN, "oldPassword",
"newPassword");
}
catch (com.hp.ov.selectaccess.adminserver.wsadmin.client.
AdminFault e1) {
System.err.println("Error:" + e1.getErrorMessage());
}
エ ラ ー処理
指定 さ れた DN と 古いパ ス ワー ド が LDAP で認証 さ れない場合、返 さ れ る AdminFault は DN が
有効か ど う か を示 し ません。 API はエ ラ ー 「ユーザーを認証で き ませんで し た。」 を返 し ます。 こ
れは、 こ の API が、 ユーザー名 / パ ス ワー ド を類推す る イ ン タ ーフ ェ イ ス と し て使用 さ れ る の を
防 ぐ た め で す。 新 し い パ ス ワ ー ド が拒否 さ れ る と 、 API は メ ッ セ ー ジ 「failed to change
password」 を返 し ます。
Administration API
217
218
第9章
10 管理サーブ レ ッ ト : Web 管理
イ ン ターフ ェ イス
Policy Builder アプ レ ッ ト のほか、 Select Access では、 管理者が Web ブ ラ ウ ザを使用 し て委任管理
や ワ ー ク フ ロ ー タ ス ク を実行す る ための Web 管理 イ ン タ ーフ ェ イ ス を提供 し てい ます。 こ の章で
は、 サーブ レ ッ ト を使用 し た イ ン タ ーフ ェ イ ス のカ ス タ マ イ ズ方法 と 、 Web 管理 イ ン タ ーフ ェ イ
ス について説明 し ます。
こ の章の概要
こ の章では、 Web 管理 イ ン タ ーフ ェ イ ス の紹介、 お よ び委任管理者に対 し て イ ン タ ーフ ェ イ ス を
カ ス タ マ イ ズす る 方法について説明 し ます。
•
Web 管理 イ ン タ ーフ ェ イ ス について (219 ページ )
•
Web 管理 イ ン タ ーフ ェ イ ス のカ ス タ マ イ ズ (221 ページ )
•
JSP コ ン テナ と JAR フ ァ イ ルについて (235 ページ )
Web 管理イ ン タ ー フ ェ イ スについて
Web 管理 イ ン タ ーフ ェ イ ス は管理 タ ス ク のサブセ ッ ト を提供す る ク ラ ス の集合です。現時点では、
イ ン タ ーフ ェ イ ス はア イ デン テ ィ テ ィ 属性、 グループ メ ンバシ ッ プ、 お よ びフ ォ ルダの作成 / 削
除 / 管理を実行す る ク ラ ス お よ び メ ソ ッ ド を提供 し てい ます。 ま た、 Web 管理 イ ン タ ーフ ェ イ ス
では、 ワ ー ク フ ロ ー要求の送信や承認 も 可能です。
Web 管理 イ ン タ ーフ ェ イ ス は次の ク ラ ス か ら 構成 さ れてい ます。
•
Admin : こ の ク ラ ス は、 デ ィ レ ク ト リ エ ン ト リ を検索 / 追加 / 修正 / 名前変更 / 削除す る さ ま
ざ ま な メ ソ ッ ド を 提 供 し ま す。 各 メ ソ ッ ド で は、 HttpServletRequest
および
HttpServletResponse パ ラ メ ー タ を使用 し て、 管理者の認証情報を内部の Enforcer プ ラ グ
イ ンに提供 し ます。
•
Attribute : LDAP エ ン ト リ の属性を表 し ます。 属性の種類を決定 し 、 属性の値にア ク セ ス
す る ための メ ソ ッ ド を提供 し ます。
•
Entry : LDAP オブジ ェ ク ト の属性を表 し ます。 Entry は属性の集合が格納 さ れます。 こ の ク
ラ ス は、 エ ン ト リ の属性にア ク セ ス し て グループ メ ンバシ ッ プ を処理す る ための メ ソ ッ ド を
提供 し ます。
•
ErrorException : エ ラ ーが発生 し た こ と を示 し ます。
•
Node : Node は、LDAP オブジ ェ ク ト の表示お よ び移動に使用 さ れ る ツ リ ーを表 し ます。Node
は、 ツ リ ーを表示す る 際に分岐を展開す る か、 縮小す る か を決定 し ます。 ア イ デン テ ィ テ ィ 、
グループ、フ ォ ルダ、お よ びダ イ ナ ミ ッ ク グループ用に異な る ア イ コ ン を表示す る には、Node
タ イ プ を使用 し ます。
219
•
SearchResults : こ の ク ラ ス は、デ ィ レ ク ト リ サーバーの ク エ リ か ら 返 さ れたデ ィ レ ク ト リ
エ ン ト リ を表 し ます。
SetCharacterEncodingFilter : こ の ク ラ ス は、 受け取っ た要求の解析で使用す る 文字のエ ン
コ ー ド を設定す る サーブ レ ッ ト フ ィ ル タ です。
Admin ク ラ スの メ ソ ッ ド の例
Web 管理 イ ン タ ーフ ェ イ ス の中心的要素は Admin ク ラ ス です。 以下の コ ー ド 例では、 頻繁に使用
さ れ る メ ソ ッ ド が示 さ れてい ます。 Admin をは じ め と す る ク ラ ス の詳細は、 『HP OpenView Select
Access 6.2 開発者向け リ フ ァ レ ン ス ガ イ ド 』 を参照 し て く だ さ い。
Admin getWebAdmin()
void logout(HttpServletRequest request, HttpServletResponse response)
Entry getEntry
(
HttpServletRequest request,
HttpServletResponse response,
String entryDN
)
Node getNode
(
HttpServletRequest request,
HttpServletResponse response,
String entryDN
)
boolean setEntry
(
HttpServletRequest request,
HttpServletResponse response,
Hashtable attrList
Hashtable pwdResetList
)
boolean deleteEntry
(
HttpServletRequest request,
HttpServletResponse response,
Entry entry
)
SearchResults searchTree
(
HttpServletRequest request
HttpServletResponse response,
220
第 10 章
String startFolder,
String searchFilter,
boolean includeSubFolders,
int sizeLimit,
boolean withFolders,
boolean withUserser,
boolean withGroups,
boolean withRoles,
int pageSize,
int pageIndex
)
Admin.getWebAdmin() は静的 メ ソ ッ ド で、 Admin ク ラ ス の イ ン ス タ ン ス の取得に使用 さ れ ま
す。 Admin.logout() は管理者のセ ッ シ ョ ン を終了 し ます。 それ以外の Admin ク ラ ス の メ ソ ッ
ド は、 そ の大部分が、 ア イ デ ン テ ィ テ ィ 、 グ ループ、 フ ォ ルダ、 お よ びダ イ ナ ミ ッ ク グ ループ
デー タ へのア ク セ ス を提供す る ために使用 さ れ ます。 各 メ ソ ッ ド は、 HttpServletRequest を
使用 し て、 管理者のセ ッ シ ョ ン を確認 し ます。 HttpServletResponse は、 Web 管理 Enforcer プ
ラ グ イ ン が必要に応 じ て 管理者 を ロ グ イ ン ペー ジ に リ ダ イ レ ク ト す る 場合に使用 さ れ ま す。
getNode() お よ び getEntry() では、 オブジ ェ ク ト の DN を含んだ文字列パ ラ メ ー タ が使用 さ
れ ます。 それ以外の メ ソ ッ ド では、 Entry オブジ ェ ク ト が使用 さ れ ます。
Web 管理イ ン タ ー フ ェ イ スのカ ス タ マ イ ズ
Web 管理サーバーは Jetty の Web サーバーお よ びサーブ レ ッ ト コ ン テナ上で稼働 し ます。 Web 管
理 イ ン タ ーフ ェ イ ス を カ ス タ マ イ ズす る には、 Web 管理サーバー上でサーブ レ ッ ト を作成 し て配
置 し ます。 他のサーバーか ら Web 管理 イ ン タ ーフ ェ イ ス にア ク セ スす る こ と はで き ません。 サー
バ ー の ド キ ュ メ ン ト の ル ー ト は <SA_install_path>/shared/jetty/java/webadmin で
す。 サーブ レ ッ ト は WEB-INF\lib デ ィ レ ク ト リ の Java アーカ イ ブ フ ァ イ ルに格納 さ れてい ま
す。 サーブ レ ッ ト の配置は WEB-INF/web.xml フ ァ イ ルに よ っ て指定 さ れ ます。
Jetty サーバーの詳細は、 http://jetty.mortbay.org を参照 し て く だ さ い。
Web 管理は、 Struts と 呼ばれ る オープ ン ソ ース フ レーム ワ ー ク に基づいてい ます。 詳細について
は、 http://struts.apache.org を参照 し て く だ さ い。
サーブ レ ッ ト は HTML ページの作成お よ び管理要求の処理を実行 し ます。 サーブ レ ッ ト は、 Web
管理 イ ン タ ーフ ェ イ ス に よ り 取得 し た ア イ デン テ ィ テ ィ 、 グループ、 フ ォ ルダ、 お よ び ワ ー ク フ
ロ ー デー タ を含む HTML ページ を動的に作成 し ま す。 管理者がア イ デン テ ィ テ ィ プ ロ フ ァ イ ル
修正な ど の動作 を実行す る と 、 HTML フ ォ ーム デー タ がサーブ レ ッ ト に送信 さ れ ま す。 サーブ
レ ッ ト は こ のデー タ に基づ き 、 Web 管理 イ ン タ ーフ ェ イ ス を使用 し て、 ポ リ シー ス ト ア のプ ロ
フ ァ イ ルの更新をは じ め と す る 処理を実行 し ます。
フ ォ ーム ベース の委任管理ア ク シ ョ ン ク ラ ス を例に、 Struts フ レーム ワ ー ク を使用 し た Web 管理
イ ン タ ーフ ェ イ ス のカ ス タ マ イ ズ方法を説明 し ます。 JSP ソ ース フ ァ イ ルはビ ジネ ス プ ロ セ ス を
処理 し ないため、 ア ク シ ョ ン ロ ジ ッ ク はア ク シ ョ ン ク ラ ス ま たはヘルパ ク ラ ス を使用 し て実装
さ れ ます。Web 管理を カ ス タ マ イ ズす る には、 こ れ ら の Java フ ァ イ ルを修正す る 必要があ り ます。
管理サーブ レ ッ ト : Web 管理イ ン タ ー フ ェ イ ス
221
ビル ド プ ロ セスおよび山か っ こ (>< または >#<)
こ の SDK に含 ま れ る Java ソ ー ス コ ー ド を 参照 ま たは編集す る と き 、 一部の文字列の先頭に山
か っ こ がついてい る こ と に注意 し て く だ さ い。 >< お よ び >#< の 2 種類があ り ます。 こ れ ら は HP
の開発チーム で内部的に 「バ タ ーフ ラ イ ( 蝶々 )」 と 呼ばれ ます。 バ タ ーフ ラ イ は以下の場所で使
用 さ れ ます。
•
>< バ タ ーフ ラ イ は Web 管理 ソ ース コ ー ド に出現 し ます。
•
>#< バ タ ーフ ラ イ は ロ グ メ ッ セージに出現 し ます。
警告 Java ソ ース コ ー ド を編集す る 場合、 以下の操作を行わないで く だ さ い。
•
バ タ ーフ ラ イ で接頭 さ れていない文字列を変更す る 。 こ れ ら は Web アプ リ ケーシ ョ ンが必要
と す る 定数です。 一切変更 し てはな り ません。
•
バ タ ーフ ラ イ を削除す る 。 ビル ド プ ロ セ ス は、 必要な ス ト リ ン グに接頭す る バ タ ーフ ラ イ を
自動的に削除 し ます。
使用 さ れる JSP フ ァ イル
委任管理 イ ン タ ーフ ェ イ ス は次の JSP フ ァ イ ルを使用 し ます。
•
add.jsp : ア イ デン テ ィ テ ィ 、 グループ、 ま たは フ ォ ルダ を追加 し ます。
•
browse.jsp : デ ィ レ ク ト リ ノ ー ド を表示 し ます。
•
common.jsp : CSS ス タ イ ルシー ト リ ン ク を含みます。
•
delete.jsp : ア イ デン テ ィ テ ィ 、 グループ、 ま たはフ ォ ルダ を削除 し ます。
•
errorpage.jsp : エ ラ ー メ ッ セージ を表示 し ます。
•
logout.jsp : セ ッ シ ョ ン Cookie を削除 し 、 管理者のセ ッ シ ョ ン を終了 し ます。
•
main.jsp : 管理 タ ス ク を含む メ イ ン メ ニ ュ ー ページ を表示 し ます。
•
membership.jsp : グループ メ ンバシ ッ プ を管理 し ます。
•
modify.jsp : ア イ デン テ ィ テ ィ 、 グループ、 ま たはフ ォ ルダ属性を編集 し ます。
•
navigate.jsp : デ ィ レ ク ト リ ノ ー ド のナビ ゲーシ ョ ン ツ リ ーを表示 し ます。
•
pagetitle.jsp : ページの タ イ ト ルを表示 し ます。
•
register.jsp : ア イ デン テ ィ テ ィ を セルフ登録に追加 し ます。
•
rename.jsp : デ ィ レ ク ト リ サーバー オブジ ェ ク ト の名前を変更 し ます。
•
search.jsp : デ ィ レ ク ト リ のユーザー、 グループ、 フ ォ ルダ を検索 し ます。
•
view.jsp : デ ィ レ ク ト リ ノ ー ド お よ びエ ン ト リ を表示 し ます。
管 理 者 が Web イ ン タ ー フ ェ イ ス に 接 続 す る と 、 Web サ ー バ ー は 静 的 な HTML フ ァ イ ル
index.html を表示 し ます。 ページには、 フ ォ ーム ベース の委任管理お よ び ワ ー ク フ ロ ー管理 と
い う 2 つのオプシ ョ ン があ り ます。 委任管理の リ ン ク は controller.do の URL を呼び出 し ま
す。 URL は、 struts-config.xml フ ァ イ ルで設定 さ れ る controllAction.java にマ ッ ピ ン
グ さ れます。
222
第 10 章
後続の要求はすべて controller.do ア ク シ ョ ン ク ラ ス にルーテ ィ ン グ さ れ、 こ のサーブ レ ッ ト
が タ ス ク を他のサーブ レ ッ ト に委任 し ます。 controller_jsp サーブ レ ッ ト は、 次のパ ラ メ ー タ
を使用 し て、 動作を処理す る サーブ レ ッ ト を決定 し ます。
•
type : 動作が user、 group、 folder、 all_subjects の中のいずれを対象に し て行われ る
のか を示 し ます。
•
action : 指定 さ れたオブジ ェ ク ト に対 し て ADD、 DELETE、 LOGOUT、 MODIFY、 RENAME、
VIEW の中のいずれの動作を行 う のか を示 し ます。
sub_action : 付随的に実行 さ れ る 動作を示 し ます。 例 と し ては、 主動作が VIEW であ る 場合、 そ
れに続いて BROWSE、 SEARCH、 SHOW_ALL な ど が実行 さ れます。
図 16 は、 フ ォ ーム ベース の委任管理での フ ロ ー ダ イ ア グ ラ ム を示 し てい ます。 こ のセ ク シ ョ ン
では、 引 き 続 き main.jsp、 search.jsp、 modify.jsp を取 り 上げ、 Web 管理 イ ン タ ーフ ェ イ
ス を使用 し たデ ィ レ ク ト リ エ ン ト リ の検索、 検索結果の表示、 ア イ デン テ ィ テ ィ の選択、 現在の
属性の表示、 お よ び属性の修正な ど について説明 し ます。 JSP ページお よ び JAR フ ァ イ ルの詳細
については、 235 ページの 「JSP コ ン テナ と JAR フ ァ イ ルについて」 を参照 し て く だ さ い。
HTTP 要求
サーブ レ ッ ト フ ィ ル タ
ACTION を指定 し て
サーブ レ ッ ト を
選択
controlAction.do
common.jsp
modify.jsp
エ ン ト リ を検索、 参照、
追加、 削除、 ま たは
名前変更
Web 管理
イ ン タ ーフ ェース
検索結果、
デ ィ レ ク ト リ エン ト リ
標準的な HTML
ウィジェ ッ ト を
生成
HTTP 応答
図 16
フ ォ ーム ベースの委任管理ツールの フ ロー ダ イ アグ ラ ム
管理サーブ レ ッ ト : Web 管理イ ン タ ー フ ェ イ ス
223
メ ニ ュ ーの表示
フ ォ ーム ベー ス の委任管理サーブ レ ッ ト で最初に表示 さ れ る ページは メ イ ン メ ニ ュ ー ページで
す。 ページ内の動的な要素は、 以前の動作結果を示す状態の表示のみです。 メ ニ ュ ー オプシ ョ ン
自体は変化 し ません。 図 17 は、 Web ブ ラ ウ ザで表示 さ れ る メ ニ ュ ーを示 し てい ます。
図 17
main.jsp
HTML メ イ ン メ ニ ュ ー
次 に 示す部分的 な HTML コ ー ド は、 control.do に よ っ て 作成 さ れ る も の で す。 URL に は
control.do が タ ス ク の委任に使用す る パ ラ メ ー タ が含ま れてい ます。 た と えば、 管理者がア イ
デン テ ィ テ ィ を追加す る リ ン ク を ク リ ッ ク す る と 、 AddAction.java が呼び出 さ れ、 新 し いア イ
デン テ ィ テ ィ プ ロ フ ァ イ ルを追加す る フ ォーム を生成 し ます。
<html>
<body>
... Select Access ユーザー管理のヘッダー ...
<!-- Display a status string if one is found -->
<!-- Display all permitted operations -->
<div align="left">
Please select from the following tasks:
<h4><img src="images/user.gif">Users:<br></h4>
<a href="controller.jsp?type=user&action=ADD">Add</a>
<a href="controller.jsp?type=user&action=MODIFY">Modify</a>
<a href="controller.jsp?type=user&action=RENAME">Rename</a>
<a href="controller.jsp?type=user&action=DELETE">Delete</a>
... グループに関す る タ ス ク ...
... フ ォ ルダに関す る タ ス ク ...
224
第 10 章
<h4><img src="images/search.gif">Search:<br></h4>
<form NAME="SEARCH_FORM" METHOD="POST">
<input type="text" name="filter" value="*" size="40">
<input type="hidden" name="type" value="all_subjects">
<input type="hidden" name="action" value="VIEW">
<input type="hidden" name="sub_action" value="SEARCH">
<a href="#" onClick="document.SEARCH_FORM.submit();"> Find
Entry</a>
<br><br>
... オプションの表示 ...
... すべてのオプシ ョ ン の確認 ...
</form>
... ロ グ ア ウ ト のオプシ ョ ン ...
... 静的な フ ッ タ ー ...
</body>
</html>
MainAction.java は メ ニ ュ ーの生成 を 実行す る のみで、 要求は処理 し ま せん。 Web 管理 イ ン
タ ーフ ェ イ ス を使用 し ないため、 本書では特に説明 し ません。
デー タ の表示 : デ ィ レ ク ト リ サーバーの検索結果
Web 管理サーブ レ ッ ト が表示す る デー タ の タ イ プには、 Node お よ び Entry の 2 つがあ り ま す。
デ ィ レ ク ト リ ノ ー ド はデ ィ レ ク ト リ サーバー エ ン ト リ の場所を表 し 、 通常、 エ ン ト リ への移動
やエ ン ト リ の選択に使用 さ れ ま す。 た と えば、 デ ィ レ ク ト リ サーバー プ ロ フ ァ イ ルの追加、 修
正、 名前変更、 削除な ど を行 う 場合、 サーブ レ ッ ト は まず対象 と な る エ ン ト リ の保存場所を確認
す る 必要があ り ます。
組み込みの Web 管理 イ ン タ ーフ ェ イ ス の [Search] オプシ ョ ンは、 デ ィ レ ク ト リ を検索 し て返 さ れ
た ノ ー ド を表示 し ます。 図 18 は、 デ ィ レ ク ト リ サーバーの検索結果を示 し てい ます。
管理サーブ レ ッ ト : Web 管理イ ン タ ー フ ェ イ ス
225
図 18
デ ィ レ ク ト リ サーバーの検索結果
デ ィ レ ク ト リ サーバーの検索
HTMLSearchFormatter.java フ ァ イ ルの showSubjects() メ ソ ッ ド に よ り 検索が開始 さ れ、
デ ィ レ ク ト リ サーバーの検索フ ィ ル タ が提供 さ れます。 showSubjects() メ ソ ッ ド は、 実行す
る 動作に基づいて、 検索対象にア イ デン テ ィ テ ィ 、 グループ、 ダ イ ナ ミ ッ ク グループ、 ま たは
フ ォ ルダのいずれを含め る か を判断 し ます。 次の例で示す よ う に、 Admin オブジ ェ ク ト が作成
さ れ、 searchTree() メ ソ ッ ド に よ り 、 LDAP の検索が実行 さ れます。 searchTree() の
includeSubFolders パ ラ メ ー タ は、 デ ィ レ ク ト リ の検索範囲の制御に使用 さ れ ます。
startFolderId パ ラ メ ー タ は、 検索を開始す る デ ィ レ ク ト リ 階層を指定 し ます。
public static void showSubjects(HttpSession session,
HttpServletRequest request, HttpServletResponse response,
String searchFilter, String action, String entryType,
String subAction, String membershipSubAction, String currentDN,
String searchDN, StringBuffer content) throws Exception {
String startFolderId = null;
boolean includeSubFolders = true;
int pageSize = Common.getPageSize();
boolean withFolders = false;
boolean withUsers = false;
boolean withGroups = false;
boolean withRoles = false;
if (action.equals(Common.ADD_ACTION)) {
if (membershipSubAction == null) {
withFolders = true;
226
第 10 章
} else {
if (entryType.equals(Common.SUBJECT_USER)) {
withGroups = true;
} else if (entryType.equals(Common.SUBJECT_GROUP)) {
withGroups = true;
withUsers = true;
}
}
} else if (entryType.equals(Common.SUBJECT_USER)) {
if (membershipSubAction != null) {
withGroups = true;
} else {
withUsers = true;
}
} else if (entryType.equals(Common.SUBJECT_GROUP)) {
if (membershipSubAction != null) {
withGroups = true;
withUsers = true;
} else {
withGroups = true;
}
} else if (entryType.equals(Common.SUBJECT_FOLDER)) {
withFolders = true;
} else if (entryType.equals(Common.SUBJECT_ALL)) {
withUsers = true;
withGroups = true;
withFolders = true;
withRoles = true;
}
Admin webAdmin = Admin.getWebAdmin();
ディ レク ト リ
サーバーの
検索を
実行 し ます
SearchResults result = null;
try {
result = webAdmin.searchTree(request, response, startFolderId,
searchFilter, includeSubFolders, Common.getSearchLimit(),
withFolders, withUsers, withGroups, withRoles, pageSize,
searchDN);
} catch (Error e) {
result = null;
log.error(e);
return;
}
String operation;
Hashtable pairs = new Hashtable();
pairs.put(Common.ACTION, action);
pairs.put(Common.TYPE, entryType);
管理サーブ レ ッ ト : Web 管理イ ン タ ー フ ェ イ ス
227
if (membershipSubAction != null && membershipSubAction.length() > 0) {
pairs.put(Common.SUBJECT_DN, request.getParameter
(Common.SUBJECT_DN));
pairs.put(Common.MEMBERSHIP_SUB_ACTION, membershipSubAction);
if (membershipSubAction.equals(Common.ADD_MEMBER_ACTION)) {
Entry currentEntry = webAdmin.getOriginalEntry(request,response);
Node currentNode = currentEntry.getNode();
// We don't allow to select already existing members.
for (Enumeration en = result.getPageData().elements();
en.hasMoreElements();) {
Node node = (Node) en.nextElement();
boolean isEnabled = false;
if (currentNode.getIsGroup()) {
isEnabled = !currentEntry.isHasGroupMember(node);
} else if (currentNode.getIsUser()) {
isEnabled = !currentEntry.isMemberOfGroup(node);
}
node.setIsEnabled(isEnabled);
}
デ ィ レ ク ト リの
検索結果から
ノード を
取得 し ます
}
operation = Common.MEMBER_DN;
} else {
for (Enumeration en = result.getPageData().elements();
en.hasMoreElements();) {
Node node = (Node) en.nextElement();
boolean isEnabled = node.getIsGroup() || node.getIsUser() ||
node.getIsFolder();
node.setIsEnabled(isEnabled);
}
operation = Common.SUBJECT_DN;
}
formatSimpleList(null, result.getPageData(), operation, pairs,
content);
if (searchFilter != null) {
pairs.put(Common.SEARCH_FILTER, searchFilter);
}
HtmlPageNavigationFormatter.appendPrevNextPagingControls(
request,
currentDN,
result.getFirstDN(),
result.getContinuedDN(),
228
第 10 章
pairs,
content);
}
デ ィ レ ク ト リ の Node 情報の表示
以下の例で示す よ う に、 検索結果の取得後、 HTMLSearchFormatter() が呼び出 さ れ、 結果を
表示 し ます。 こ の メ ソ ッ ド は ノ ー ド DN お よ びパ ス にア ク セ ス し ます。
public static void formatSimpleList(HttpServletRequest request,
Vector data, String operation, Hashtable pairs, StringBuffer result)
throws Exception {
StringBuffer cmd = new StringBuffer();
Common.constructBasicControllerAction(request, Common.CONTROL_PAGE,
pairs, operation, cmd);
HtmlFormatter.writeDivBegin(result, "center");
HtmlFormatter.writeTableBegin(result);
ディ レク ト リ
の検索結果
から ノ ー ド を
取得 し ます
for (Enumeration et = data.elements(); et.hasMoreElements();) {
Node childData = (Node) et.nextElement();
String nodeDn = childData.getDN();
String nodeName = childData.getNodePath();
ノードの
場所に
ア ク セス し ます
HtmlFormatter.writeRowBegin(result);
HtmlFormatter.writeImage(childData, result);
ノ ー ド を利用
可能にすべきか
ど う かを
判断 し ます
if (childData.getIsEnabled()) {
HtmlFormatter.writeHyperLink(result, cmd, nodeDn, nodeName);
} else if(!childData.getIsRole()){
HtmlFormatter.writeHyperLink(result, null, null, nodeName);
}else if(childData.getIsRole()){
HtmlFormatter.writeHyperLink(result, null, null, nodeName,true);
}
result.append("<br/>");
HtmlFormatter.writeRowEnd(result);
}////end-if
if (result.length() > 0)
result.append("\n");
HtmlFormatter.writeTableEnd(result);
HtmlFormatter.writeDivEnd(result);
}
管理サーブ レ ッ ト : Web 管理イ ン タ ー フ ェ イ ス
229
DN お よ びパ ス がハ イ パーテ キ ス ト リ ン ク に組み込ま れ ます。 こ れに よ り 、 管理者が リ ン ク を選
択 し た場合、 ノ ー ド の場所がサーブ レ ッ ト に渡 さ れ、 その ノ ー ド の Entry 属性が表示 さ れます。
デー タ の表示 : ア イ デン テ ィ テ ィ プ ロ フ ァ イル と し ての
デ ィ レ ク ト リ エン ト リ
デ ィ レ ク ト リ サーバーの ノ ー ド を選択す る と 、 その ノ ー ド に関す る エ ン ト リ が表示 さ れます。 エ
ン ト リ は、 デ ィ レ ク ト リ サーバーのエ ン ト リ お よ び属性を表 し ます。 管理者に よ る エ ン ト リ の修
正を許可す る 前に、 ModifyAction.java フ ァ イ ルに よ っ てデ ィ レ ク ト リ サーバー エ ン ト リ の
現在の属性が表示 さ れ ま す。 図 19 は、 任意のア イ デン テ ィ テ ィ プ ロ フ ァ イ ルに関す る 、 デ ィ レ
ク ト リ サーバーのエ ン ト リ の内容を示 し てい ます。
図 19
プ ロ フ ァ イルの編集
デ ィ レ ク ト リ サーバー エ ン ト リ の場所の確認
Entry の属性を表示す る 場合、サーブ レ ッ ト は まず Entry の場所を確認す る 必要があ り ます。場
所の確認は、 前のセ ク シ ョ ン で取 り 上げた、 Node オブジ ェ ク ト か ら 取得 さ れた Entry の DN を
使用 し て実行 し ます。 以下の コ ー ド 例は、 サーブ レ ッ ト が Entry の DN を使用 し て、 Admin オブ
ジ ェ ク ト に よ っ て Entry を抽出す る 方法を示 し てい ます。
Admin
オブ ジ ェ ク ト を
作成 し ます
230
StringBuffer pageContents = new StringBuffer();
StringBuffer statusMessage = new StringBuffer();
String method = (String)request.getMethod();
String type = request.getParameter(Common.TYPE);
String POST_PREFIX = "modify_";
int ID_LENGTH = 3;
Admin webAdmin = Admin.getWebAdmin();
String subjectDN = (String)request.getParameter(Common.SUBJECT_DN);
第 10 章
DN から エ ン ト リ
を作成 し ます
String action = request.getParameter(Common.ACTION);
HtmlModifyFormatter.SimpleTableFormatStatus formatStatus = null;
String formName = "MODIFY_FORM";
// User has already modified the entry, so now attempt to write to
LDAP.
if ( method.equalsIgnoreCase(Common.POST_METHOD) )
{
... Update the object (discussed in next section).....
}
else
{
// Build content to represent the entry to be modified.
// This status message is used in two places below, so create it
just
once here.
if ( subjectDN != null )
{
// Display the properties of object specified by subjectDN
// Note 1:: Using this version of getEntry(..) automatically
stores the
// entry represented by subjectDN in a session variable for later
use.
Entry entry = webAdmin.getEntryCached(request, response,
subjectDN);
エ ン ト リ の属性
を表示 し ます
if ( entry != null )
formatStatus =
HtmlModifyFormatter.formatSimpleTableForModify(entry,
POST_PREFIX, ID_LENGTH, true, true, pageContents);
request.setAttribute(Common.RESULT,pageContents.toString());
request.setAttribute(Common.FORMAT_STATUS,formatStatus);
}
... 処理の成功 / 失敗を表示 ...
デ ィ レ ク ト リ サーバー エ ン ト リ を プ ロ フ ァ イル と し て表示
以下のサン プルで示す よ う に、 エ ン ト リ オブジ ェ ク ト を イ ン ス タ ン ス化す る と 、 サーブ レ ッ ト は
エ ン ト リ の属性を ア ク セ ス で き る よ う にな り ます。 こ れは、formatSimpleTableForModify()
メ ソ ッ ド に よ っ て実行 さ れます。
public static SimpleTableFormatStatus formatSimpleTableForModify
(
Entry entry,
管理サーブ レ ッ ト : Web 管理イ ン タ ー フ ェ イ ス
231
String prefix,
int idLength,
boolean skipHiddenOrPwdAttribs,
boolean useDescriptiveName,
StringBuffer result
) throws Exception
{
SimpleTableFormatStatus status = new SimpleTableFormatStatus();
result.append("\n");
result.append("<table>");
プ ロ フ ァ イルの
属性を
取得 し ます
属性を
抽出 し ます
隠 し 属性が
設定 さ れているか
ど う か判断 し ます
boolean attrFound = false;
Vector attributes= entry.getAttributes(prefix, idLength);
for ( Enumeration ea = attributes.elements(); ea.hasMoreElements(); )
{
Attribute attr = (Attribute)ea.nextElement();
if ( skipHiddenOrPwdAttribs )
{
// do not display operational, 'objectClass' and password
attributes
if ( attr.isHidden() || attr.isPassword()) {
continue;
}
}
String val = attr.getStringValue();
if ( val == null )
val = "";
result.append("\n");
result.append("<tr>");
result.append("<td>");
属性の記述名を
抽出 し ます
属性の必要性を
判断 し ます
if ( useDescriptiveName )
result.append(attr.getAttributeDescriptiveName());
else
result.append(attr.getName());
if ( attr.isRequired() || attr.isUid() || attr.isUserPrincipalName())
result.append(" * ");
result.append("</td>");
result.append("<td>");
result.append("<input");
//QXCR1000226667 - Web interface Adminserver SelfManagement , can't
change
232
第 10 章
Common name
if (attr.isReadOnly()||attr.isRdnAttribute())
result.append(" disabled");
result.append(" type=\"");
if (attr.isPassword()) {
result.append("password");
} else {
result.append("text");
}
相対識別名
および読み取 り
専用の属性を
無効に し ます
属性の値を
抽出 し ます
String fieldName = attr.getFormFieldName();
if (attr.isPassword())
status.passwordFieldName = fieldName;
if ( attr.isRequired() || attr.isUid() || attr.isUserPrincipalName())
{
RequiredFieldStatus fieldStatus = new RequiredFieldStatus();
fieldStatus.fieldName = fieldName;
fieldStatus.attrName = attr.getAttributeDescriptiveName();
status.requiredFieldNames.addElement(fieldStatus);
}
result.append("\" name=\"");
result.append(fieldName);
result.append("\" value=\"");
result.append(val);
result.append("\" size=\"40\" />");
result.append("</td>");
result.append("</tr>");
attrFound = true;
}
result.append("\n");
result.append("</table>");
result.append("\n");
result.append("<br><br>");
if (attrFound)
result.append("><Fields marked with a * are required");
else
result.append("><You do not have the required permissions to modify
any
attributes in your identity profile. Contact your administrator to
make
any changes you require.");
result.append("<br><br>");
管理サーブ レ ッ ト : Web 管理イ ン タ ー フ ェ イ ス
233
result.append("\n");
return status;
}
編集で き ない属性は無効化 さ れ ます。 ま た、 隠 し 属性は HTML 出力には含め ら れ ません。 隠 し 属
性は表示対象 と はな り ません。 こ れは、隠 し フ ォ ーム要素に組み込まれ る か、 ま たは HTTP のセ ッ
シ ョ ン変数に格納 さ れ ます。
プ ロ フ ァ イルの編集
Admin ク ラ ス を 使用し て、 エン ト リ の追加、 削除、 修正、 ま たは名前変更を 行う こ と ができ ま す。
前のセク シ ョ ン で説明し た ModifyAction.java が、 エン ト リ を 更新する modifyEntry() メ
ソ ッ ド を 呼び出し ま す。 modifyEntry() メ ソ ッ ド は、 formatSimpleTableForModify() に
よ っ て作成さ れた、 修正さ れた値を 含むフ ォ ーム データ を 使用し ま す。 次に示す例は、 230 ページ
の「 デ ィ レ ク ト リ サーバー エ ン ト リ の場所の確認」 と 同じ メ ソ ッ ド を 使用し たコ ード の一部です。
プ ロ フ ァ イルのデ ィ レ ク ト リ サーバー エ ン ト リ の編集
以下の コ ー ド 例は、 デ ィ レ ク ト リ サーバーのエ ン ト リ を編集す る メ ソ ッ ド を示 し ます。
Admin
オブ ジ ェ ク ト を
作成 し ます
StringBuffer pageContents = new StringBuffer();
StringBuffer statusMessage = new StringBuffer();
String method = (String)request.getMethod();
String type = request.getParameter(Common.TYPE);
String POST_PREFIX = "modify_";
int ID_LENGTH = 3;
Admin webAdmin = Admin.getWebAdmin();
String subjectDN = (String)request.getParameter(Common.SUBJECT_DN);
String action = request.getParameter(Common.ACTION);
HtmlModifyFormatter.SimpleTableFormatStatus formatStatus = null;
String formName = "MODIFY_FORM";
// User has already modified the entry, so now attempt to write to
LDAP.
if ( method.equalsIgnoreCase(Common.POST_METHOD) )
{
//Admin.TRACE("Modify.jsp::Got a post:: attempt to update
"+type);
HTML フ ォ ーム
デー タ を使用 し
てデ ィ レ ク ト リ
サーバー
エン ト リ を
修正 し ます
Hashtable postDataList = webAdmin.getPostData(request, response,
POST_PREFIX, ID_LENGTH);
boolean bRetVal = webAdmin.setEntry(request, response,
postDataList,
null);
if ( bRetVal ) //success
234
第 10 章
statusMessage.append(HtmlModifyFormatter.getStatusMessage(request));
else // failure
{
statusMessage.append(DataStrings.getI18nString("><Failed to
modify an entry at DN = \"{0}\".", subjectDN));
statusMessage.append("\n<br>\n");
statusMessage.append("><Please try again or contact your
administrator.");
}
}
else
{
... エ ン ト リ の属性の表示 ( 前のセ ク シ ョ ン を参照 ) ...
}
ModifyAction.java のすべての コ ー ド リ ス ト は、 JavaScript を使用 し て、 必要なすべての属性
が HTML フ ォ ーム デー タ に含まれてい る こ と を確認 し ます。
JSP コ ン テナ と JAR フ ァ イルについて
Select Access の Jetty JSP コ ン テナは <SA_install_path>\shared\jetty\policy_builder\
webadmin フ ォ ルダに格納 さ れてい る すべての JAR フ ァ イ ルを ロ ー ド す る ため、 サーブ レ ッ ト が
正 し く パ ッ ケージ化 さ れてい る こ と を確認す る 必要があ り ます。 よ っ て、 以下を確認す る こ と を
お勧め し ます。
•
編集済み、 再 コ ンパ イ ル済みサーブ レ ッ ト フ ァ イ ルが配布ス テージ ン グ デ ィ レ ク ト リ の
webadmin フ ォ ルダに移動 さ れてい る こ と を確認 (24 ページの 「Windows ま たは UNIX で
Web 管理 イ ン タ ーフ ェ イ ス を作成お よ び イ ン ス ト ールす る には」 を参照 )。 webadmin フ ォ ル
ダに フ ァ イ ルがない場合、 必ず移動 し て く だ さ い。
•
Select Access SDK に付属す る デフ ォ ル ト の フ ァ イ ルを追加ま たは削除 し た場合は、 カ ス タ マ
イ ズの状況に応 じ て、 次のいずれかの フ ォ ルダに web.xml を手動で コ ピー し て く だ さ い。
<SA_install_path>\shared\jetty\policy_builder\webadmin\
delegated_admin\WEB-INF\lib
ま たは
<SA_install_path>\shared\jetty\policy_builder\webadmin\
self_management\WEB-INF\lib
ま たは
<SA_install_path>\shared\jetty\policy_builder\webadmin\
self_registration\WEB-INF\lib
ア ク シ ョ ン ク ラ ス フ ァ イ ルの内容を変更 し て も 、 名前を変更 し ない こ と をお勧め し
ま す。 名前を変更 し た場合、 struts-config.xml を適切に編集す る 必要が あ り ま
す。
管理サーブ レ ッ ト : Web 管理イ ン タ ー フ ェ イ ス
235
236
第 10 章
11 ログのカ ス タ マ イ ズ : Logger API
Select Access は、 Java アプ リ ケーシ ョ ンや C++ アプ リ ケーシ ョ ン に よ る 安全かつ構造化 さ れた方
法での イ ベン ト 報告を可能にす る 、Logger API を提供 し ます。Logger API は、名前付 き の ロ グ チ ャ
ネル、 ロ グの重要度レベル、 お よ び ロ グの出力先を提供す る Select Access の ロ グ ク ラ ス を使用 し
ます。 こ の章では、 ロ グ を アプ リ ケーシ ョ ン に統合す る 方法を説明 し ます。
こ の章の概要
こ の章では、Select Audit お よ び Logger API の詳細 と 、サー ド パーテ ィ の ロ グ をデフ ォ ル ト の Select
Access コ ン ポーネ ン ト ではないアプ リ ケーシ ョ ン と 統合す る 方法について説明 し ます。
•
Logger API について (237 ページ )
•
Logger API の使用 (238 ページ )
•
C++ の Logger API (239 ページ )
•
Java の Logger API (242 ページ )
Logger API について
Logger API の メ ソ ッ ド には、 ロ グ フ ィ ル タ を作成す る メ ソ ッ ド と ロ グ イ ベン ト を記録す る メ ソ ッ
ド の 2 種類があ り ます。 ロ グ フ ィ ル タ には次の よ う な内容が含まれ ます。
•
出力先 : イ ベン ト メ ッ セージの書 き 込み先。現時点では、 ロ グ エ ン ト リ は、標準出力ス ト リ ー
ム、 シ ス テ ム ロ グ、 フ ァ イ ル、 ま たは Select Audit に書 き 込む こ と がで き ます。
•
チ ャ ネル : Logger.ADMIN_CHANNEL、 Logger.CONFIG_CHANNEL の よ う な、 監査 イ ベン ト
の種類を識別す る 任意の文字列。 こ の フ ィ ル タ ですべての ロ グ チ ャ ネルを受け入れ る こ と を
示す場合は 「*」 が使用 さ れ ます。 各チ ャ ネルでは重要度レベルを指定す る 必要があ り ます。
•
重要度レベル : チ ャ ネルが受け入れ る 重要度の最低レベル。こ れ よ り も 重要度が低い メ ッ セー
ジ は無視 さ れ ま す。 現時点では、 ロ グ メ ッ セー ジ の レ ベルは、 DEBUG、 INFO、 WARNING、
ERROR、 FATAL のいずれかにな り ます。
Logger API では、 複数の ロ グ フ ィ ル タ を設定で き ます。 た と えば、 あ る ロ グ フ ィ ル タ ではすべて
の ロ グ チ ャ ネルの FATAL メ ッ セージ を シ ス テ ム ロ グに書 き 込み、 別の ロ グ フ ィ ル タ ではテ ス ト
用チ ャ ネルの DEBUG メ ッ セージ を ロ ーカル フ ァ イ ルに書 き 込む よ う に設定す る こ と がで き ます。
ア プ リ ケーシ ョ ン は、 イ ベン ト の記録を行 う 際、 イ ベン ト レ ベル、 ロ グ チ ャ ネル、 お よ び メ ッ
セージ を指定 し ます。 Logger ク ラ ス は、 チ ャ ネルお よ びレベルを ロ グ フ ィ ル タ と 照合 し 、 メ ッ
セージの出力先を指定 し ます。
237
Logger は、 適切な ロ グ チ ャ ネルお よ び重要度 レ ベルが設定 さ れた ロ グ フ ィ ル タ を見つけ た場
合、 メ ッ セージ を その フ ィ ル タ に指定 さ れた出力先に書 き 込みます。 メ ッ セージ を受け付け る フ ィ
ル タ が複数存在す る 場合、 Logger は、 それ ら で指定 さ れたすべての出力先に メ ッ セージ を書 き
込みます。 メ ッ セージ を受け付け る フ ィ ル タ がない場合、 その メ ッ セージは無視 さ れ ます。
記録 さ れ る ロ グ エ ン ト リ には、 日付、 時刻、 チ ャ ネル名、 お よ び メ ッ セージのテ キ ス ト が含ま れ
ま す。 ロ グ エ ン ト リ のサ ン プルは、 Web サーバーか ら の ロ グ エ ン ト リ を 示 し て い ま す。 Select
Audit が メ ッ セージ を XML と し て フ ォーマ ッ ト す る こ と に注意 し て く だ さ い。こ の動作は、Logger
API に よ る も のではな く 、 Select Audit の機能です。
ロ グ エ ン ト リ のサン プル
次の例では、 サン プル イ ベン ト が Logger API に よ っ て ロ グに記録 さ れてい ます。
2004/01/16
requests
2004/01/16
2004/01/16
2004/01/16
2004/01/16
11:45:23 myApplicationChannel System startup, ready to accept
11:45:24
11:45:25
11:45:26
11:45:45
myApplicationChannel
myApplicationChannel
myApplicationChannel
myApplicationChannel
admin /index.html 200
admin /images/icon.gif 200
admin /banner.html 200
jdoe /Secure/paylist.html 403
Logger API を 使用 し て監査 イ ベ ン ト を 管理す る ア プ リ ケ ーシ ョ ン には、 Policy Validator お よ び
Enforcer プ ラ グ イ ン があ り ます。 こ れ ら は、 Policy Builder に よ っ て格納 さ れた XML 設定を使用 し
て、 ロ グ フ ィ ル タ を 初期化 し ま す。 フ ィ ル タ の初期化後、 コ ン ポーネ ン ト お よ びプ ラ グ イ ン の
メ ッ セージが記録 さ れ ます。 プ ラ グ イ ン の詳細は、 第 4 章、 「認証方式 と 認証ルールのカ ス タ マ イ
ズ : Validator API」 お よ び第 5 章、 「セキ ュ リ テ ィ サービ ス のカ ス タ マ イ ズ : Enforcer API」 を参照
し て く だ さ い。
Logger API の使用
イ ベン ト を 記録す る 前に、 ア プ リ ケーシ ョ ン で ロ グ フ ィ ル タ を 設定す る 必要が あ り ま す。 ロ グ
フ ィ ル タ を設定す る 場合、 手動に よ る 方法 と XML を使用す る 方法の 2 通 り があ り ま す。 こ の章
では、 C++ Logger API で ロ グ フ ィ ル タ を手動に よ り 設定す る 方法 と 、 Java Logger API で XML 設
定を使用す る 方法を説明 し ます。
こ の章で取 り 上げ る 例では、 監査 メ ッ セージは署名 さ れ ません。 署名 さ れた監査 メ ッ セージが必
要な場合は、 プ ロ フ ェ ッ シ ョ ナル サービ ス にお問い合わせ く だ さ い。
手動で C++ ログ フ ィ ル タ を設定するには
238
1
Logger::init() メ ソ ッ ド を使用 し て、 Logger API を初期化 し ます。
2
LogFilter ク ラ ス を イ ン ス タ ン ス化 し て、 1 つ以上の ロ グ フ ィ ル タ を作成 し ます。
3
setFilter() メ ソ ッ ド を使用 し て、 フ ィ ル タ の出力先を設定 し ます。 単一の出力先オブ
ジ ェ ク ト を setFilter() に提供す る 必要があ り ます。 239 ページの 「C++ の Logger API」
では、 静的な フ ァ ク ト リ メ ソ ッ ド に よ っ て、 ロ グの出力先を作成す る 方法を説明 し ます。
LogSystem::FactoryFunc()、 LogStderr::FactoryFunc()、
LogFile::CreateFileLogger() な ど を使用 し ます。
第 11 章
4
1 つ以上のチ ャ ネルを フ ィ ル タ に追加 し ます。 チ ャ ネルはチ ャ ネル名 と 重要度レベルで構成
さ れてい ます。 チ ャ ネル名 「*」 は、 すべてのチ ャ ネルを表 し ます。 重要度レベルは、
DEBUG、 INFO、 WARNING、 ERROR、 FATAL のいずれかにな り ます。
5
フ ィ ル タ を ロ ーカルの ロ グ設定に追加 し ます。
XML を使用 し て Java ログ フ ィ ル タ を設定するには
1
XML 設定を作成 し ます。 XML が文字列ま たはフ ァ イ ルに格納 さ れてい る 場合は、 パーサ を
使用 し て XML ド キ ュ メ ン ト を作成 し て く だ さ い。
2
SyslogConfig.configure() を使用 し て、 XML 設定か ら ロ グ フ ィ ル タ を作成 し ます。
C++ の Logger API
C++ の Logger API は、 Logger.h ヘ ッ ダー フ ァ イ ルで定義 さ れ ます。 手動で フ ィ ル タ の設定を実
行す る 場合、 LogFilter.h ヘ ッ ダー フ ァ イ ルを イ ン ク ルー ド す る 必要があ り ます。 使用す る 出
力先の種類に よ っ ては、 LogStderr.h、 LogSystem.h、 お よ び LogFile.h も イ ン ク ルー ド す
る 必要があ り ます。 多 く の Logger メ ソ ッ ド が静的 メ ソ ッ ド であ る 点に注意 し て く だ さ い。
デ フ ォル ト の出力先を使用 し た メ ッ セージの記録
Logger::log() には、 使用す る チ ャ ネル名、 メ ッ セージの重要度レベル、 ロ グ メ ッ セージ自体
と い う 、 3 つのパ ラ メ ー タ があ り ます。 フ ィ ル タ の初期化前は、 デフ ォ ル ト のシ ス テ ム ロ グが使
用 さ れ、 重要度が WARNING 以上の メ ッ セージが記録 さ れます。 次の コ ー ド 例では、 デフ ォ ル ト の
フ ィ ル タ と 出力先を使用 し て メ ッ セージの記録を実行 し てい ます。 EnforcerSocketInit() メ
ソ ッ ド に よ っ て、 Windows プ ラ ッ ト フ ォ ーム で winsock が初期化 さ れてい ます。 なお、 UNIX プ
ラ ッ ト フ ォ ーム では、 こ の メ ソ ッ ド は何 も 行い ません。
#include <iostream>
#include "Logger.h"
#include "LogStderr.h"
#include "LogSystem.h"
#include "LogFilter.h"
#include "LogFile.h"
#ifdef SYS_UNIX
#define LOGFILE_NAME "/tmp/logtest"
#endif
#ifdef SYS_WINDOWS
#define LOGFILE_NAME "C:\\temp\\logtest"
#endif
int main(int argc, char *argv[])
{
// Initialize winsock if needed
winsock を
EnforcerSocketInit();
初期化 し ます
// First, try logging to the default destination
ログのカ ス タ マ イ ズ : Logger API
239
Logger::log("LogTestChannel", ENFORCER_LOG_WARNING,
">#<Test 1::default output channel");
Logger::log(LogTestChannel, ENFORCER_LOG_INFO, ">#<Test 2::Should
not be logged");
デ フ ォル ト の
出力先にロ グ を
記録 し ます
... 手動に よ る 設定 ...
... 手動で設定 し たチ ャ ネルの動作確認 ...
}
手動に よ る ログ フ ィ ル タ の設定
LogTest.java は、 デフ ォ ル ト の フ ィ ル タ の動作確認後、 Logger::init() メ ソ ッ ド を使用 し
て、 Logger API を初期化 し ます。 こ の静的 メ ソ ッ ド は、 その時点で設定 さ れてい る すべての フ ィ
ル タ を消去 し 、 デフ ォ ル ト の ロ グの出力先に よ っ て API を初期化 し ます。 次に、 LogTest.java
は新 し い フ ィ ル タ を作成 し て、 出力先 と チ ャ ネルを追加 し ます。
LogFilter::LogFilter() コ ン ス ト ラ ク タ は空の フ ィ ル タ を作成 し ます。 コ ー ド 例では、
setDestination() メ ソ ッ ド を使用 し て、 出力先の参照を追加 し てい ます。 パ ラ メ ー タ では、
出力先を指定 し ます。 こ れは通常、 使用す る 出力の種類に対応す る フ ァ ク ト リ メ ソ ッ ド に よ っ
て作成 さ れ ます。 た と えば、 LogStderr::FactoryFunc() メ ソ ッ ド は標準エ ラ ーに記録す る
オブジ ェ ク ト 、 LogSystem::FactoryFunc() はシ ス テ ム ロ グに記録す る オブジ ェ ク ト 、
LogFile::CreateFileLogger() はフ ァ イ ルに記録す る オブジ ェ ク ト を作成 し ます。 各フ ァ
ク ト リ メ ソ ッ ド が異な る パ ラ メ ー タ を持つ点に注意 し て く だ さ い。 ロ グ フ ァ イ ルにはフ ァ イ ル
名 と 、 フ ァ イ ルの最大サ イ ズ を指定す る パ ラ メ ー タ 、 監査要素には Select Audit のホ ス ト と ポー
ト が必要です。
各 フ ィ ル タ に は 1 つ以上 の チ ャ ネ ル を 追加す る 必要 が あ り ま す。 チ ャ ネ ル を 追加す る に は、
LogFilter::addChannel() メ ソ ッ ド を使用 し ます。 こ の メ ソ ッ ド には、 チ ャ ネル名 と ロ グ レ
ベル と い う 2 つのパ ラ メ ー タ があ り ます。 NULL をチ ャ ネル名 と し て使用す る と 、 すべてのチ ャ ネ
ルが受け入れ ら れ ます。 記録 さ れ る メ ッ セージは、 設定 さ れた重要度レベル以上の も ののみ と な
り 、 それ以外の メ ッ セージはすべて無視 さ れます。 すべてのチ ャ ネルが フ ィ ル タ に追加 さ れ る と 、
LogTest.java は、 Logger::addFilter() メ ソ ッ ド を使用 し て、 フ ィ ル タ を Logger ク ラ ス
に追加 し ます。
カ ス タ ム ロ グ フ ィ ル タ の設定例
次の コ ー ド 例では、 シ ス テ ム ロ グ、 標準エ ラ ー、 ロ グ フ ァ イ ルの フ ィ ル タ を設定 し てい ます。
... ヘ ッ ダー ...
int main(int argc, char *argv[])
{
... デフ ォ ル ト チ ャ ネルの動作確認 ...
Logger を
初期化 し ます
フ ィ ルタ を
作成 し ます
240
// Now, try building an interesting log channel
Logger::init("LogTest");
// Build a filter for stderr
LogFilter *filt = new LogFilter();
第 11 章
filt->setDestination(LogStderr::FactoryFunc("LogTest", NULL));
filt->addChannel("LogTestChannelError", ENFORCER_LOG_ERROR);
filt->addChannel("LogTestChannelDebug", ENFORCER_LOG_DEBUG);
filt->addChannel(NULL, ENFORCER_LOG_FATAL);
標準エ ラ ーの
出力先を
設定 し ます
// Give the filter to the logger; the logger will delete it later
Logger::addFilter(filt);
フ ィ ルタ を
Logger に追加
し ます
// Build another filter for syslog
filt = new LogFilter();
filt->setDestination(LogSystem::FactoryFunc("LogTest", NULL));
filt->addChannel(NULL, ENFORCER_LOG_WARNING);
Logger::addFilter(filt);
シ ス テム ログの出
力先を設定 し ます
// And another filter for an output file
filt = new LogFilter();
フ ァ イルの出力
先を設定 し ます
filt->setDestination(LogFile::CreateFileLogger("LogTest",
LOFGFILE_NAME, 100));
filt->addChannel("LogTestChannelDebug", ENFORCER_LOG_DEBUG);
Logger::addFilter(filt);
... カ ス タ ム チ ャ ネルへの ロ グ エ ン ト リ の送信 ...
... ク リ ーン ア ッ プ ...
}
メ ッ セージの記録
次の コ ー ド 例に示す よ う に、 ロ グ フ ィ ル タ の設定後、 LogTest.java は、 Logger::log() を
使用 し て監査 イ ベン ト の記録を実行 し ます。 メ ッ セージは複数の出力先に書 き 込 ま れ ます。 こ の
メ ソ ッ ド には、 チ ャ ネル名、 重要度レベル、 メ ッ セージ と い う 3 つのパ ラ メ ー タ があ り ます。 メ
ソ ッ ド は、 チ ャ ネ ル 名 と 重 要 度 レ ベ ル を 基 に、 メ ッ セ ー ジ の 出 力 先 を 決 定 し ま す。
Logger::log() は printf と 同様に機能 し ます。 「%」 変数を含む文字列は、 フ ォ ーマ ッ ト さ れ
メ ッ セージに挿入 さ れ る 追加のパ ラ メ ー タ を受け付け ます。
... ヘ ッ ダー ...
int main(int argc, char *argv[])
{
... デフ ォ ル ト チ ャ ネルの動作確認 ...
... カ ス タ ム チ ャ ネルの設定 ...
チ ャ ネルの
メ ッ セージ を
記録 し ます
// Now, some interesting messages
Logger::log("LogTestChannelError", ENFORCER_LOG_ERROR, ">#<test 3 ::
%s", "logged");
ログのカ ス タ マ イ ズ : Logger API
241
Logger::log("LogTestChannelError", ENFORCER_LOG_WARNING, ">#<test 4
:: %s", "only to system log");
Logger::log("LogTestChannelDebug", ENFORCER_LOG_DEBUG, "test 5 ::
%s", "logged");
Logger::log("UndefinedChannel", ENFORCER_LOG_INFO, ">#<test 6 ::
%s", "not logged");
// You should have seen test messages 3 and 5
// Messages 1, 3, and 4 should be in the system log;
// Messages 3 and 4 should be in /tmp/logtest.1
別のチ ャ ネル
の メ ッ セージ
を記録 し ます
ログ フ ァ イルの
ロール オーバー
を テ ス ト し ます。
サイ ズが上限に
達 し た場合は
新 し いロ グ を
作成 し ます
// Now, try to force /tmp/testlog to roll
for (int i = 0 ; i < 100 ; i++)
{
Logger::log("LogTestChannelDebug", ENFORCER_LOG_DEBUG, "Roll test
%d", i);
}
}
Java の Logger API
LogTest.java プロ グ ラ ム は Java の Logger API で す。 こ のア プリ ケ ーシ ョ ン を 実行する には、
Enforcer JAR フ ァ イ ルおよ び従属する アーカ イ ブがク ラ ス パス に組み込ま れている 必要があ り ま す。
Java Logger API は Logger ク ラ ス に よ っ て定義 さ れ ます。XML ク ラ ス も イ ン ポー ト す る 必要があ
り ます。 多 く の Logger メ ソ ッ ド が静的 メ ソ ッ ド であ る 点に注意 し て く だ さ い。
デ フ ォル ト の出力先を使用 し た メ ッ セージの記録
logClient 要素に出力先の要素が含まれていない場合、 デフ ォ ル ト の出力先が設定 さ れます。 レ
ベルが WARNING 以上であ る メ ッ セージのデフ ォ ル ト の出力先は、 デフ ォ ル ト のシ ス テ ム ロ グで
す。 次の XML に よ り 、 デフ ォ ル ト の出力先を使用す る よ う に Logger が設定 さ れ ます。
<logClient></logClient>
XML を使用 し た ログ フ ィ ル タ の設定
Java の Logger API では、フ ィ ル タ を直接作成す る メ ソ ッ ド は公開 さ れてい ません。そのため、XML
ド キ ュ メ ン ト を使用 し て、 Java の Logger ク ラ ス を設定す る 必要があ り ます。 次に XML に よ る
設定の例 を 示 し ま す。 こ の例では、 シ ス テ ム ロ グ、 標準エ ラ ー、 ロ グ フ ァ イ ル、 お よ び Select
Audit の出力先を設定 し てい ます。 こ の XML ド キ ュ メ ン ト を SyslogConfig.configure() に
渡す こ と に よ っ て、 4 つの フ ィ ル タ が設定 さ れ ま す。 標準エ ラ ー フ ィ ル タ が、 1 つの出力先に対
し て複数の ロ グ チ ャ ネルを設定す る 点に注意 し て く だ さ い。
<logClientConfig>
<destination>
<systemLog />
<channel level="DEBUG" name="*" />
242
第 11 章
</destination>
<destination>
<file unixName="/tmp/sa.log" windowsName="c:\temp\sa.log\"
maxSize="5000"/>
<channel name = "*" level="DEBUG" />
</destination>
<destination>
<stderr/>
<channel name="applicationLog" level="ERROR"/>
<channel name="debugLog" level="DEBUG"/>
</destination>
<destination>
<logServer host="127.0.0.1" port="9989"/>
<channel name="*" level="WARNING"/>
</destination>
</logClientConfig>
XML の設定
次の コ ー ド 例は、 Java Logger API への ア ク セ ス に必要 な ク ラ ス の イ ン ポー ト を 示 し て い ま す。
Logger を初期化す る には、 Logger API パ ッ ケージの他に XML パ ッ ケージ を使用す る 必要があ り
ます。
package examples.logtest;
// Import the Logging API classes
import com.hp.ov.auditserver.*;
import com.hp.ov.auditserver.config.*;
import com.hp.ov.selectaccess.util.Logger;
// Import other helper classes
import java.io.StringReader;
import com.sun.xml.tree.XmlDocument;
import com.hp.ov.selectaccess.util.XmlDocumentFactory;
import com.hp.ov.selectaccess.util.XmlElement;
public class LogTest
{
// Test configuration (as XML)
public static final String SampleConfig;
public static final String ClientName = "LogTest";
... ロ グ を設定す る メ ソ ッ ド の宣言 ...
... メ ッ セージ を記録す る メ ソ ッ ド の宣言 ...
}
SampleConfig 文字列は、 前の例に示 し た よ う な XML 設定を格納 し ます。 LogTest は XML 文
字列の前後に StringReader を 作成 し 、 こ れ を 使用 し て LogClientConfiguration を 取得
し 、 さ ら に LogClientConfiguration.validate() を使用 し て設定を確認 し ます。 確認結果
ログのカ ス タ マ イ ズ : Logger API
243
が有効であ っ た場合、 こ の設定を使用 し て、 ロ グ フ ィ ル タ の配列を取得 し ます。 取得 さ れた ロ グ
フ ィ ル タ の配列、 デ フ ォ ル ト の シ ス テ ム ロ グ、 名前 を 使用 し 、 SyslogConfig.configure()
メ ソ ッ ド に よ っ て、 Logger を設定 し ます。 次の コ ー ド 例は、 こ の メ ソ ッ ド の通常の使用例を示
し てい ます。
public LogTest
{
... 定数の定義 ...
// Create and run a logging test.
public static void main(String[] args)
{
try
{
LogTest test = new LogTest(SampleConfig);
// Run tests.
test.runTests();
} catch (Exception e) {
}
}
// Create a LogTest instance, and configure logging.
public LogTest(String configStr) throws Exception
{
StringReader reader = new StringReader(configStr);
XML か ら
StringReader を
作成 し ます
Destination[] destinations = null;
XML から ログ
フ ィ ル タ 設定を
作成 し ます
LogClientConfig logClientConfig =
LogClientConfig.unmarshal(reader);
logClientConfig.validate();
if (logClientConfig != null)
destinations = logClientConfig.getDestination();
SyslogConfig.configure
(
ClientName,
// Name of program doing the logging
false,
// always false, internal only
destinations,
// an array of log filters
Logger.getInstance().getSyslogLogger(), // the default system
logger
false,
// useXML, should always be false
null,
// always false, used for signing
0
// always 0, used for signing
);
SyslogConfig を
使用 し て、 Logger
のログ フ ィ ル タ
を設定 し ます
}
... サ ンプル デー タ を記録す る メ ソ ッ ド の定義 ...
}
244
第 11 章
メ ッ セージの記録
ロ グ フ ィ ル タ の設定後、 LogTest.java は、 Logger.log() を使用 し て、 監査 イ ベン ト の記録
を実行 し ます。 メ ッ セージは複数の出力先に書 き 込ま れます。 メ ソ ッ ド には、 Logger の ク ラ イ ア
ン ト 名、 チ ャ ネル名、 可読 メ ッ セージ ( 判読可能な テ キ ス ト )、 拡張 メ ッ セージ、 お よ びレベル と
い う 5 つのパ ラ メ ー タ があ り ます。 メ ソ ッ ド は、 チ ャ ネル名 と 重要度レベルを基に、 メ ッ セージ
の出力先を決定 し ます。 拡張 メ ッ セージは null で も 構い ません。 アプ リ ケーシ ョ ンは必ず可読
メ ッ セージ を提供す る 必要があ り ます。
カ ス タ ム チ ャ ネルへのログ
次の例では、静的な Logger.log() メ ソ ッ ド を使用 し て メ ッ セージ を記録 し てい ます。 メ ソ ッ ド
runTests() は、 設定 さ れた各チ ャ ネルの重要度 レ ベルで監査 イ ベ ン ト を 生成 し ま す。 ア プ リ
ケーシ ョ ンはカ ス タ ム チ ャ ネルを作成で き ますが、必ず Logger で定義 さ れた ロ グ レベルを使用
す る 必要があ り ます。
public LogTest
{
... 定数の定義 ...
... Logger を設定す る メ ソ ッ ド の定義 ...
あ らか じ め
定義 さ れた ログ
チ ャ ネルの リ ス ト
あ らか じ め
定義 さ れた ログ
レ ベルの リ ス ト
ログ レ ベルの
判読可能な名前
すべてのチ ャ ネル
を テ ス ト し ます
// Run tests.
public void runTests()
{
String channels[] = {
Logger.ADMIN_CHANNEL,
Logger.POLICY_CHANNEL,
Logger.OPERATION_CHANNEL,
Logger.CONFIG_CHANNEL,
Logger.ENFORCER_PLUGIN_CHANNEL,
Logger.WORKFLOW_CHANNEL
};
int levels[] = {
Logger.LOG_LEVEL_DEBUG,
Logger.LOG_LEVEL_INFO,
Logger.LOG_LEVEL_WARNING,
Logger.LOG_LEVEL_ERROR,
Logger.LOG_LEVEL_FATAL
};
String levelNames[] = {
"debug",
"info",
"warning",
"error",
"fatal"
};
for (int ic=0; ic<channels.length; ++ic)
{
ログのカ ス タ マ イ ズ : Logger API
245
String channel = channels[ic];
for (int il=0; il<levels.length; ++il)
{
int level = levels[il];
String levelName = levelNames[il];
String shortMsg = "short(" + channel + ", " + levelName +
")";
String longMsg
= "long(" + channel + ", " + levelName +
テ ス ト チ ャ ネル ")";
Logger.log(ClientName, channel, shortMsg, longMsg, level);
の メ ッ セージ を
記録 し ます
}
}
}
}
246
第 11 章
12 プ ロパテ ィ エデ ィ タ のカ ス タ マ イ ズ :
サブ ジ ェ ク ト エデ ィ タ API
サブジ ェ ク ト エデ ィ タ API では、 ユーザー、 グループ、 ダ イ ナ ミ ッ ク グループ、 お よ びフ ォ ルダ
のプ ロ パテ ィ を編集す る 設定画面のカ ス タ マ イ ズが可能です。 デフ ォ ル ト のプ ロ パテ ィ パネルは
こ の API を使用 し て作成 さ れてい ます。こ の章では、サブジ ェ ク ト エデ ィ タ API を使用 し て Policy
Builder のプ ロ パテ ィ エデ ィ タ パネルを カ ス タ マ イ ズす る 方法について説明 し ます。
こ の章の概要
こ の章では、 サブジ ェ ク ト エデ ィ タ API を使用 し て、 ア イ デン テ ィ テ ィ プ ロ フ ァ イ ル用のカ ス タ
ム サブジ ェ ク ト エデ ィ タ を作成す る 方法について説明 し ます。
•
サブジ ェ ク ト エデ ィ タ API について (247 ページ )
•
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン の作成 (248 ページ )
•
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン の イ ン ス ト ール と 削除 (255 ページ )
サブ ジ ェ ク ト エデ ィ タ API について
サブ ジ ェ ク ト エ ディ タ API はポ リ シ ー ス ト ア か ら データ を 取得し ま す。 取得さ れた データ は
SubjectEditorPluginScreen に表示さ れ、そこ で編集さ れま す。こ のク ラ ス は、JTabbedPane
で表示さ れる 拡張さ れた JPanel です。サブジェ ク ト エディ タ API は、エン ト リ の objectClass
属性およ び XML 設定フ ァ イ ルに基づいて、ディ レ ク ト リ プロ フ ァ イ ルに対応し たサブジェ ク ト エ
ディ タ プラ グ イ ン を 表示し ま す。 次に XML によ る 設定の例を 示し ま す。
<?xml version='1.0' encoding="UTF-8"?>
<SubjectEditorPluginConfig pluginDescription="Employee properties
plugin" >
<SubjectEditorPluginMapping
objectClass="inetOrgPerson"
screenClass="EmployeeSubjectEditorPanel"
/>
<SubjectEditorPluginMapping
objectClass="organizationalPerson"
screenClass="EmployeeSubjectEditorPanel"
/>
</SubjectEditorPluginConfig>
247
Policy Builder は設定を検索 し 、 デ ィ レ ク ト リ エ ン ト リ の objectClass に基づいて、 サブジ ェ
ク ト エデ ィ タ プ ラ グ イ ン を作成 し ます。 上記の例は、 organizationalPerson お よ び
inetOrgPerson オブジ ェ ク ト の LDAP エ ン ト リ を編集す る 際、
EmployeeSubjectEditorPanel を追加 し ます。 こ の screenClass には、 パ ッ ケージ を含む
完全な ク ラ ス名を組み込む必要があ り ます。 プ ラ グ イ ン の説明は [ サブ ジ ェ ク ト エデ ィ タ プ ラ グ イ
ンの設定 ] ダ イ ア ロ グに表示 さ れ ます。
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン を使用 し て、 言語指定子 (cn;lang-fr な ど ) を含んだ属性を
持つプ ロ フ ァ イ ルのア イ デン テ ィ テ ィ デー タ を設定 し ないで く だ さ い。
サブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ンの作成
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ンは、 JPanel を拡張す る 抽象 ク ラ ス
SubjectEditorPluginScreen を拡張す る Java ク ラ ス です。 プ ラ グ イ ン では次の抽象 メ ソ ッ
ド を オーバー ラ イ ド し ます。
•
getScreenName(): タ ブの タ イ ト ル と し て表示す る 名前を返 し ます。
•
createScreen(): Policy Builder で画面を最初に作成す る 際に呼び出 さ れます。 1 つのセ ッ
シ ョ ン で 1 回だけ呼び出 さ れます。
•
openScreen(): エ ン ト リ を編集す る ために画面が最初に開かれ る 際に呼び出 さ れ ます。
•
loadScreenData(): タ ブの選択が行われ る たびに呼び出 さ れ ます。
•
validateScreenData(): saveScreenData() の前に呼び出 さ れ ます。
•
saveScreenData(): [OK] ボ タ ンが押 さ れた時点で呼び出 さ れ ます。
•
closeScreenData(): [OK] ま たは [ 取消 ] ボ タ ンが押 さ れた時点で呼び出 さ れます。
•
showHelp(): [ ヘルプ ] ボ タ ン が押 さ れ、 サブジ ェ ク ト エデ ィ タ プ ラ グ イ ンの JPanel が選
択 さ れてい る 場合に呼び出 さ れます。
こ れ ら の メ ソ ッ ド は、 デ ィ レ ク ト リ サーバー エ ン ト リ の修正時に Policy Builder に よ っ て呼び出
さ れ ます。
新 し いサブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ン を作成するには
1
SubjectEditorPluginScreen を作成 し 、 デ ィ レ ク ト リ エ ン ト リ の属性を設定 し ます。
2
上記の抽象 メ ソ ッ ド を オーバー ラ イ ド し ます。
3
プ ラ グ イ ン を コ ンパ イ ル し 、 Java アーカ イ ブ (JAR) フ ァ イ ルを作成 し ます。
4
プ ラ グ イ ン の XML 設定フ ァ イ ルを作成 し ます。
5
プ ラ グ イ ン を ロ ー ド し ます。
6
プ ラ グ イ ン を テ ス ト し ます。 グ ラ フ ィ カル コ ン ポーネ ン ト が正 し く 動作 し 、 ア イ デン テ ィ
テ ィ 、 グループ、 ダ イ ナ ミ ッ ク グループ、 ま たはフ ォ ルダの属性が適切に更新 さ れてい る こ
と を確認 し ます。
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ンは 1 つのアプ レ ッ ト のセ ッ シ ョ ン で 1 回だけ初期
化 さ れ る ため、プ ラ グ イ ン を テ ス ト す る 前に Policy Builder で実行中のセ ッ シ ョ ン をす
べて終了す る 必要があ り ます。
248
第 12 章
サブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ンのプ レ ビ ュ ー
次のサン プルは、 標準的なプ ラ グ イ ン の構造を示 し てい ます。 こ の章では、 サブジ ェ ク ト エデ ィ
タ API について、 EmployeeSubjectEditorPanel を使用 し て説明 し ます。
import com.hp.ov.selectaccess.adminserver.interfaces.*;
import com.hp.ov.selectaccess.policybuilder.interfaces.*;
import com.hp.ov.selectaccess.policybuilder.common.*;
public class EmployeeSubjectEditorPanel extends
SubjectEditorPluginScreen
implements ActionListener
{
public EmployeeSubjectEditorPanel() {...}
public void createScreen(SubjectEditorPluginMainFrame mainFrame)
throws Exception {...}
public void closeScreen() {...}
public String getScreenName() throws Exception {...}
public void loadScreenData() throws Exception {...}
public void openScreen
(
SubjectNodeData sourceData,
SubjectEntry originalEntryData,
SubjectEntry entryData
) throws Exception {...}
public void saveScreenData() throws Exception {...}
public void showHelp() throws Exception {...}
public boolean validateScreenData(javax.swing.JTabbedPane
tabbedPane) throws {...}
}
画面のイ ン タ ー フ ェ イ スの作成
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン を作成す る には、 まず、 LDAP のプ ロ パテ ィ の編集に使用す る
グ ラ フ ィ カル イ ン タ ーフ ェ イ ス を設計 し ます。 開発環境を使用 し てい る 場合、 JPanel コ ン ポー
ネ ン ト を設計 し 、 ク ラ ス を修正 し て SubjectEditorPluginScreen を拡張で き ます。 図 20 は、
EmployeeSubjectEditorPanel ク ラ ス のグ ラ フ ィ カル イ ン タ ーフ ェ イ ス を示 し てい ます。 こ
の イ ン タ ーフ ェ イ ス は 1 つ以上の JTextField を動的に割 り 当て、属性値の変更を表示お よ び取
得 し ます。 複数の値を持つ属性の場合、 複数の フ ィ ール ド が表示 さ れ ます。 employeeType な ど
の複数の値を持つ属性値を追加お よ び削除す る には、[Add Value] お よ び [Delete Value] ボ タ ン を使
用 し ます。
プ ロパテ ィ エデ ィ タ のカ ス タ マ イ ズ : サブ ジ ェ ク ト エデ ィ タ API
249
図 20
カ ス タ マ イ ズ さ れたサブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ンの作成
getScreenName() メ ソ ッ ド のオーバー ラ イ ド
getScreenName() メ ソ ッ ド にはパ ラ メ ー タ は不要です。 こ の メ ソ ッ ド を使用 し て、 タ ブ パネル
に表示 さ れ る タ ブのテ キ ス ト を取得 し ます。次の コ ー ド は、タ ブのテ キ ス ト 「Employee Information」
を表示 し ます。
public String getScreenName() throws Exception
{
return inl8n.getString(SCREEN_NAME);
}
createScreen() メ ソ ッ ド のオーバー ラ イ ド
次 に 示 す よ う に、 Policy Builder は 初 め て サ ブ ジ ェ ク ト エ デ ィ タ プ ラ グ イ ン を 使 用 す る 際、
createScreen() を呼び出 し ます。 こ の メ ソ ッ ド はパ ラ メ ー タ mainFrame を 1 つ持ち ます。 こ
のパ ラ メ ー タ は将来的な ア ク セ ス に備え て保存 し てお く 必要があ り ます。た と えば、こ のパ ラ メ ー
タ を使用 し て、 displayMessageBox() な ど のヘルパー メ ソ ッ ド にア ク セ ス し ます。
public void createScreen(SubjectEditorPluginMainFrame mainFrame) throws
Exception
{
this.mainFrame = mainFrame;
// Remove any attribute value fields
250
第 12 章
clearData();
}
openScreen() メ ソ ッ ド のオーバー ラ イ ド
Policy Builder はサブ ジ ェ ク ト エ ン ト リ の編集が行われ る たびに openScreen() を 呼び出 し ま
す。 こ の メ ソ ッ ド の 3 つのパ ラ メ ー タ は、 現在の属性の表示、 属性の確認、 お よ び属性の更新に
必要なデ ィ レ ク ト リ エ ン ト リ デー タ を提供 し ます。 こ れ ら の値は、 他の メ ソ ッ ド が使用で き る よ
う に保存 し てお く 必要があ り ます。 次の コ ー ド サン プルに例を示 し ます。
public void openScreen(SubjectNodeData sourceData, SubjectEntry
originalEntryData, SubjectEntry entryData) throws Exception
{
this.sourceData = sourceData;
this.originalEntryData = originalEntryData;
this.entry = entryData;
}
loadScreenData() メ ソ ッ ド のオーバー ラ イ ド
画面が作成 さ れ開かれた後、 Policy Builder は loadScreenData() を呼び出 し て、 グ ラ フ ィ カル
イ ン タ ーフ ェ イ ス の状態を設定 し ます。 次のサ ン プルに示す よ う に、 こ の メ ソ ッ ド は初めて画面
が 開 か れ た 際、 お よ び、 管 理 者 が タ ブ を 切 り 替 え る 際 に 呼 び 出 さ れ ま す。
EmployeeSubjectEditorPanel は各属性値の JTextField を動的に作成す る ため、 次に示す
メ ソ ッ ド ではフ ラ グ を使用 し て、 GUI が複数回作成 さ れ る こ と を防ぎ ます。 isConfigured フ ラ
グ を使用 し ない場合、管理者が タ ブ を切 り 替え る たびに新 し い JTextField が属性に追加 さ れ る
こ と にな り ます。
public void loadScreenData() throws Exception
{
if (isConfigured)
return;
// Remove any attribute value fields
clearData();
SubjectEntryData entryData = (SubjectEntryData)
entryData.getEntryData();
AttributeData attr = entryData.getAttribute(DESCRIPTION_ATTR);
attr
Vector values;
values = attr.getAttributeStringValues(DESCRIPTION_ATTR);
setFieldValues(descriptionPanel, values,
attr.isSingleValuedAttribute());
values = entryData.getAttributeValues(EMPLOYEE_NUMBER_ATTR);
setFieldValues(employeeNumberPanel, values,
attr.isSingleValuedAttribute());
values = entryData.getAttributeStringValues(EMPLOYEE_TYPE_ATTR);
setFieldValues(employeeTypePanel, values,
attr.isSingleValuedAttribute());
isConfigured = true;
}
プ ロパテ ィ エデ ィ タ のカ ス タ マ イ ズ : サブ ジ ェ ク ト エデ ィ タ API
251
private void setFieldValues(javax.swing.JPanel panel, Vector values,
boolean isMulti)
{
// No value, so provide an empty attribute value text field
if ((values == null) || (values.size() == 0))
{
addAttributeTextField(panel);
return;
}
Iterator iter = values.iterator();
if (isMulti)
{
// Add a text field for each attribute value
while (iter.hasNext())
{
addAttributeTextField(panel, (String) iter.next());
}
}
else
// Attribute is single valued, so Vector should have only one
value
addAttributeTextField(panel, (String) iter.next());
}
EmployeeSubjectEditorPanel.loadScreenData() は openScreen() か ら 取 得 さ れ た
SubjectEntryData を使用 し ます。 ま た、 エ ン ト リ デー タ を使用 し て、 AttributeData を取
得 し ます。 こ れに よ り 、 属性値へのア ク セ ス が提供 さ れ、 属性が複数の値を持つか ど う か を確認
で き ます。 setFieldValues() メ ソ ッ ド は、 各属性値の JTextField を作成 し ます。 属性に値
が存在 し ない場合、 ま たは値が 1 つ し かない場合、 setFieldValues() はテ キ ス ト フ ィ ール ド
を 1 つ作成 し ます。
validateScreenData() メ ソ ッ ド のオーバー ラ イ ド
Policy Builder は、 [OK] ボ タ ンが押 さ れた時点で validateScreenData() を呼び出 し ます。すべ
てのサブジ ェ ク ト エデ ィ タ パネルで画面デー タ の確認が正常に完了 し た場合、
saveScreenData() メ ソ ッ ド が呼び出 さ れ ま す。 こ の メ ソ ッ ド は、 すべ て の属性値が適切に
フ ォ ーマ ッ ト さ れた値を持っ てい る こ と を確認 し ま す。 必須の属性は、 適切な値を少な く と も 1
つ持っ てい る 必要があ り ます。
public boolean validateScreenData(javax.swing.JTabbedPane tabbedPane)
throws Exception
{
// error handling
SubjectEntryData entryData = (SubjectEntryData)
entry.getEntryData();
boolean success = true;
for (int i = 0; ((i < panels.length) && i < (attributeNames.length));
i++)
{
252
第 12 章
AttributeData attr = entryData.getAttribute(attributeNames[i]);
Vector values = getProperties(panels[i]);
if ((attr.isRequiredAttribute()) && (values.size() < 1))
{
mainFrame.showMessageBox(inl8n.getString(MUST_HAVE_VALUE);
success = false;
}
else if ((attr.isSingleValuedAttribute()) && (values.size() > 1))
{
mainFrame.showMessageBox(inl8n.getString(TOO_MANY_VALUES);
success = false;
}
}
return success;
}
saveScreenData() メ ソ ッ ド のオーバー ラ イ ド
サブジ ェ ク ト エデ ィ タ のすべての タ ブでデー タ が確認 さ れた後、 Policy Builder は
saveScrenData() を呼び出 し て、 属性値を更新 し ます。 属性値を追加す る 際、 空すなわち null
の値について考慮す る 必要があ り ます。 属性が値を持たない場合、 その属性をデ ィ レ ク ト リ エ ン
ト リ か ら 削除す る 必要があ り ます。 不適切な属性や読み取 り 専用の属性は更新で き ません。
public void saveScreenData() throws Exception
{
SubjectEntryData entryData = (SubjectEntryData)
entry.getEntryData();
for (int i = 0; ((i < panels.length) && i < (attributeNames.length));
i++)
{
AttributeData attr = entryData.getAttribute(attributeNames[i]);
if ((!attr.isReadOnly) && (attr.isPreferredAttribute))
{
Vector values = getProperties(panels[i]);
if (values.size() < 1)
entryData.removeAttribute(attributeNames[i])
else
entryData.setAttributeValues(attributeNames[i], values);
}
}
}
closeScreen() メ ソ ッ ド のオーバー ラ イ ド
画面の使用を終了す る 際、 Policy Builder は closeScreen() を呼び出 し ます。 こ れは、 管理者が
[OK] ま たは [ 取消 ] を ク リ ッ ク し た と き に呼び出 さ れます。 EmployeeSubjectEditorPanel プ
ラ グ イ ンは、動的に作成 さ れたすべての JTextField を削除 し 、isConfigured フ ラ グ を リ セ ッ
ト し ます。
public void closeScreen()
プ ロパテ ィ エデ ィ タ のカ ス タ マ イ ズ : サブ ジ ェ ク ト エデ ィ タ API
253
{
isConfigured = false;
clearData();
}
showHelp() メ ソ ッ ド のオーバー ラ イ ド
Policy Builder は、 タ ブ付き のパネルが選択さ れている 状態で管理者が [ ヘルプ ] ボタ ン を ク リ ッ ク
し た場合に、 showHelp() メ ソ ッ ド を 呼び出し ま す。 次に示す showHelp() メ ソ ッ ド は、 Java の
HelpSet ク ラ ス を 使用し て、 ヘルプ ウ ィ ン ド ウ を 作成し ま す。 HelpSet の ド キ ュ メ ン ト は、
<SA_install_path>/shared/jetty/policy_builder/protected ディ レ ク ト リ ま たはサ
ブディ レ ク ト リ に配置する 必要があ り ま す。 提供さ れている HelpSet ド キ ュ メ ン ト と 区別する た
めに、 作成し たヘルプ フ ァ イ ルは help/plugins ディ レ ク ト リ に格納する こ と を お勧めし ま す。
Java の HelpSet ク ラ ス は Policy Builder に よ っ て使用 さ れ る ため、 各 ク ラ ス はあ ら か じ めプ ラ グ
イ ンの ク ラ ス パ ス に配置 さ れてい ます。 Policy Builder では、 専用の ク ラ ス ロ ーダー
ClassLoaderFromJarBytes が使用 さ れ る 点に注意 し て く だ さ い。 こ の ク ラ ス ロ ーダーはプ ラ
グ イ ン の イ ン ス タ ン ス の作成に使用 さ れ ます。 ク ラ ス の場所を確認後、 イ ン ス タ ン ス が作成 さ れ
ます。 ただ し 、 getResource() お よ び getResourceAsStream() メ ソ ッ ド のオーバー ラ イ ド
は行い ません。 よ っ て、 ク ラ ス の JAR フ ァ イ ルで HelpSet ド キ ュ メ ン ト をパ ッ ケージす る こ と
はで き ません。 ド キ ュ メ ン ト を Administration Server に配置 し 、 URL を作成す る 必要があ り ます。
ヘルプの表示
次の コ ー ド サン プルは、 JApplet を使用 し て、 Administration Server へのベース URL を取得す る
方法を示 し てい ます。 ベース URL に ド キ ュ メ ン ト の相対パ ス を追加 し 、 HelpSet の イ ン ス タ ン
ス 化 を 行い ま す。 ド キ ュ メ ン ト が Administration Server 上に配置 さ れて い ない場合、 メ ソ ッ ド は
Select Access が提供す る HelpSet ド キ ュ メ ン ト の場所を検索 し て表示 し ます。
public void showHelp() throws Exception
{
if (helpSet == null)
{
// Locate and initialize the HelpSet for this panel
createHelpSet();
if (helpSet == null)
{
// Display error message, could not create HelpSet or default
HelpSet
mainFrame.showMessageBox(inl8n.getString(ERROR_DEFAULT_HELP));
return;
}
// Create a HelpBroker to display the HelpSet
helpBroker = helpSet.createHelpBroker();
// Set the help modal based on current JDialog
WindowPresentation win =
(DefaultHelpBroker) helpBroker).getWindowPresentation();
win.setActivationWindow(this.getParentDialog());
}
254
第 12 章
// Display the HelpSet
helpBroker.setViewDisplayed(true);
helpBroker.setDisplayed(true);
}
private void createHelpSet()
{
ClassLoader loader = getClass().getClassLoader();
URL url = null;
URL baseUrl = null;
try
{
// Get the URL to the Policy Builder
baseUrl = mainFrame.getMainApplet().getCodeBase();
// Add the relative path of the documentation
url = new URL (baseUrl, HELP_SET_URL);
if (url != null)
helpSet = new HelpSet(loader, url);
else
{
mainFrame.showMessageBox(inl8n.getString(ERROR_HELP_LOCATE));
}
}
catch (Exception e)
{
mainFrame.showMessageBox(inl8n.getString(ERROR_HELP_CREATE));
getDefaultPolicyBuilderHelpSet(loader, baseUrl);
}
catch (ExceptionInInitializerError ex)
{
mainFrame.showMessageBox(inl8n.getString(ERROR_HELP_INIT));
getDefaultPolicyBuilderHelpSet(loader, baseUrl);
}
}
サブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ンのイ ン ス ト ール と 削除
作成し たサブジェ ク ト エディ タ プラ グ イ ン は、 イ ン ス ト ールおよ び削除が可能です。 サブジェ ク
ト エディ タ プラ グ イ ン を 削除する と 、イ ン タ ーフ ェ イ ス は Select Access のデフ ォ ルト に戻り ま す。
サブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ン を イ ン ス ト ールするには
1
変更内容を コ ンパ イ ル し ます。
2
必要な ク ラ ス を Java アーカ イ ブに追加 し ます。
3
XML 設定を作成 し ます。
プ ロパテ ィ エデ ィ タ のカ ス タ マ イ ズ : サブ ジ ェ ク ト エデ ィ タ API
255
4
Policy Builder か ら [ ツール ] → [ サブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ンの設定 ] の順に ク リ ッ ク し て、
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン を ア ッ プ ロ ー ド し ます。 詳細は、 『HP OpenView Select
Access 6.2 Policy Builder ガ イ ド 』 を参照 し て く だ さ い。
5
Policy Builder を再起動 し ます。
Policy Builder は、 セ ッ シ ョ ン ご と に 1 度だけサブジ ェ ク ト エデ ィ タ プ ラ グ イ ン を初期化 し
ます。 以降のセ ッ シ ョ ン では、 デ ィ レ ク ト リ プ ロ フ ァ イ ルを編集す る タ ブ付 き のパネルに、
作成 し たプ ラ グ イ ンの画面が表示 さ れ ます。
Select Access は、 それぞれのケー ス に対 し て最 も 適切な アルゴ リ ズ ム を使用 し て、 タ
ブ ペ イ ンに表示す る プ ラ グ イ ンの順序を決定 し ます。順序を明示的に指定す る こ と は
で き ません。
サブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ン を削除するには
256
1
Policy Builder で [ ツール ] → [ サブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ンの設定 ] の順に ク リ ッ ク し ます。
2
[サブ ジ ェ ク ト エデ ィ タ プ ラ グ イ ンの設定] 画面でプ ラ グ イ ン を選択 し 、[削除] を ク リ ッ ク し ます。
第 12 章
A ク エ リ : ア ク セスの理解 と 評価
Policy Validator の ク エ リ は、 Select Access のア ク セ ス制御シ ス テ ムの重要な要素です。 デー タ のエ
ン コ ー ド と 送信の際に XML を使用す る こ と に よ り 、 あ ら ゆ る フ ォ ームや種類のデー タ を ク エ リ
に含め る こ と がで き ます。 こ の付録では、 こ れ ら の ク エ リ の フ ォ ーマ ッ ト の詳細を理解 し 、 実装
す る 方法を説明 し ます。
付録の概要
表 28 に こ の付録で取 り 上げ る 主な ト ピ ッ ク を示 し ます。
表 28
ク エ リ 関連 ト ピ ッ ク
ト ピ ッ ク 内容
参照箇所
Enforcer プ ラ グ イ ン が XML ク エ リ を Policy
Validator に送信す る プ ロ セ ス の概要。
ク エ リ と は (257 ページ )
XML ク エ リ と 応答の構造。
XML ク エ リ の構造 (258 ページ )
特定の目的のためのプ ラ グ イ ン を持たない ク エ リ
プ ロ パテ ィ タ グの リ ス ト 。
ク エ リ に含まれ る プ ロ パテ ィ (260 ページ )
ク エ リ ユーテ ィ リ テ ィ の概要お よ びユーテ ィ リ
テ ィ を使用 し て環境内の Select Access コ ン ポーネ
ン ト のパフ ォ ーマ ン ス を評価す る 方法。
ク エ リ ユーテ ィ リ テ ィ (261 ページ )
クエ リ とは
ク エ リ と は、 ア イ デン テ ィ テ ィ が Enforcer で保護 さ れた Web サーバー上の特定の リ ソ ース を要求
し た際に Enforcer プ ラ グ イ ンが作成す る 、XML に よ っ てエ ン コ ー ド さ れた要求を指 し ます。Policy
Validator は、 こ の要求を受け取 る と 、 ポ リ シー ス ト ア で ア イ デン テ ィ テ ィ のア ク セ ス ポ リ シー
を評価 し て、 ネ ッ ト ワー ク リ ソ ースへのア イ デン テ ィ テ ィ のア ク セ ス を許可す る か ど う か を判定
し ます。 判定後、 Policy Validator は Enforcer プ ラ グ イ ンに判定結果を返 し ます。
ク エ リ の使用方法
Policy Validator お よ び Enforcer プ ラ グ イ ン がア イ デン テ ィ テ ィ のア ク セ ス 要求を評価す る プ ロ セ
ス の概要を次に示 し ます。
1
ア イ デン テ ィ テ ィ か ら 受信 し た ア ク セ ス要求に関す る 情報を Enforcer プ ラ グ イ ン が収集 し 、
XML ク エ リ と し て認めたデー タ を Policy Validator に送信 し ます。
257
2
Policy Validator は、 ク エ リ を受け取 る と 暗号を解読 し 、 該当のア イ デン テ ィ テ ィ と リ ソ ース
のペアに関 し て、 デー タ の参照が さ ら に必要か ど う か を判断 し ます。
3
Policy Validator は、 ア イ デン テ ィ テ ィ と リ ソ ース のペアに関 し て必要なポ リ シー情報を ポ リ
シー ス ト アか ら 入手 し 、 要求に関連す る ポ リ シーの ロ ジ ッ ク お よ び条件を確認 し ます。 こ の
情報は、 将来必要にな っ た と き のためにキ ャ ッ シ ュ に格納 さ れ ます。
4
条件付 き ポ リ シーが確認 さ れた場合は、 Policy Validator は 1 つま たは複数の条件付 き ルール
内で定義 さ れたルールの基準をチ ェ ッ ク し て評価お よ び判定を実行 し ます。 そ し て、 判定結
果を導 き 出 し ます。
5
Policy Validator は、 要求を行っ た Enforcer プ ラ グ イ ン にポ リ シー ロ ジ ッ ク の結果を送信 し ま
す。 Enforcer プ ラ グ イ ンはその判定結果を実行 し ます。
XML ク エ リ の構造
Policy Validator は、 各 Enforcer プ ラ グ イ ンか ら XML 形式の ク エ リ を受け取 り ます。 Enforcer プ ラ
グ イ ンは、 Policy Validator に対す る ク エ リ を XML を使用 し てエ ン コ ー ド し ます。 XML は ク エ リ
構造の情報を変更で き る 点で非常に拡張性が高いため、 ク エ リ に属性 と 値の新 し いペア を自由に
追加で き ます。
Select Access は不要な属性はすべて無視 し ます。
こ の よ う に し て、 承認ルール と 同様に、 あ ら ゆ る 種類のデー タ を Policy Validator に渡す こ と がで
き ます。 た と えば、 次のデー タ を渡す こ と がで き ます。
•
X.509 デジ タ ル証明書な ど のバ イ ナ リ オブジ ェ ク ト
•
電子 メ ール全体な ど の複雑なオブジ ェ ク ト
•
標準テ キ ス ト な ど の単純なオブジ ェ ク ト
た と えば、Lance Mountain のために Enforcer プ ラ グ イ ンが送信す る XML ク エ リ を以下のサ ンプル
に示 し ま す。 こ の ク エ リ か ら 、 Enforcer プ ラ グ イ ン の [ ク エ リ 詳細 ] パ ラ メ ー タ の設定が
[Maximal] で あ っ た こ と がわか り ま す。 さ ら に、 こ の ク エ リ は、 連携パー ト ナーか ら 転送 さ れた
Lance の個別化の詳細 と 、 デ ィ レ ク ト リ サーバーの Steve Smith に関す る 一連の情報 も 示 し ます。
次の タ グのペアがデー タ を ど の よ う に囲んでい る か を確認 し て く だ さ い。
•
<PolicyValidatorQuery> と </PolicyValidatorQuery> は、 ク エ リ 全体 と ク エ リ に含
まれ る デー タ 全体を囲んでい ます。
•
<PROPERTY NAME="name"></PROPERTY> は、 プ ロ パテ ィ "name" に対する値を囲んでいま
す。
•
<PROPERTYLIST NAME="name"> は、 プ ロ パテ ィ リ ス ト "name" ( こ の場合、 ネ ス ト し たプ
ロ パテ ィ リ ス ト ) の値を囲んでい ます。
<PolicyValidatorQuery>
<PROPERTY NAME="service">http://mymenu.foodcompany.com:8070</PROPERTY>
<PROPERTY NAME="path">/test/auth/submit.cgi</PROPERTY>
<PROPERTY NAME="dstIP">10.10.10.30</PROPERTY>
<PROPERTY NAME="srcIP">10.10.10.110</PROPERTY>
<PROPERTY NAME="dstPort">8070</PROPERTY>
<PROPERTY NAME="srcPort">4001</PROPERTY>
<PROPERTY NAME="dstHost">mymenu.foodcompany.com</PROPERTY>
<PROPERTY NAME="protocol">http</PROPERTY>
258
付録 A
<PROPERTY NAME="srcHost">user_isp.com</PROPERTY>
<PROPERTY NAME="nonce">AgAAAAAAPl5SEQAAAAA+XlRqc29sMDAxLmNhLmJhb
HRpbW9yZS5jb206OTk5OABwYXNzAGNuPXN0ZXZlIGtvdHNvcG91bG9zLG91
PXN0ZXZlLGRjPWNhLGRjPWJhbHRpbW9yZSxkYz1jb20AAGp790LYZin
TvdZ8UhpWv4CfkXtmu8885S0AeHA3vX7qrF353ASKBJ5RS2bJz1qCJXGfzK4v
QqfVTT0mcE8yIgJQefoFX+GnVV092WaFYtiOe7QjfpSqXtaQmShZC1QlRnAYJV
wo5Gx5s4B/THU5BgPKZyvUEJnK/pcsb2hOqCOd</PROPERTY>
<PROPERTYLIST NAME="post_data_list">
<PROPERTY NAME="fullname">Lance Mountain</PROPERTY>
<PROPERTY NAME="arrived">10am</PROPERTY>
</PROPERTYLIST>
<PROPERTY NAME="native_nonce">enable</PROPERTY>
<PROPERTY NAME="http_query">hungry=yes&amp;lunch=pizza</PROPERTY>
<PROPERTYLIST NAME="http_query_list">
<PROPERTY NAME="hungry">yes</PROPERTY>
<PROPERTY NAME="lunch">pizza</PROPERTY>
</PROPERTYLIST>
<PROPERTY NAME="method">POST</PROPERTY>
<PROPERTYLIST NAME="http_header_list">
<PROPERTY NAME="Host">dev01:8070</PROPERTY>
<PROPERTY NAME="User-Agent">Mozilla/5.0 (Windows; U; en-US;
rv:1.0.1) Gecko/20020823 Netscape/7.0</PROPERTY>
<PROPERTY NAME="Accept">text/xml,application/xml,application/
xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/
x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/
*;q=0.1</PROPERTY>
<PROPERTY NAME="Accept-Language">en-us, en;q=0.50</PROPERTY>
<PROPERTY NAME="Accept-Encoding">gzip, deflate, compress;q=0.9
</PROPERTY>
<PROPERTY NAME="Accept-Charset">ISO-8859-1, utf-8;q=0.66, *;q=0.66
</PROPERTY>
<PROPERTY NAME="Keep-Alive">300</PROPERTY>
<PROPERTY NAME="Connection">keep-alive</PROPERTY>
<PROPERTY NAME="Referer">http://dev01:8070/test/allow/postfix.html
</PROPERTY>
<PROPERTY NAME="Cookie">PolicyUser=AgAAAAAAPl5SEQAAAAA+XlRqc29sMDA
xLmNhLmJhbHRpbW9yZS5jb206OTk5OABwYXNzAGNuPXN0ZXZlIGtvdHNvcG91b
G9zLG91PXN0ZXZlLGRjPWNhLGRjPWJhbHRpbW9yZSxkYz1jb20AAGp790LYZin
TvdZ8UhpWv4CfkXtmu8885S0AeHA3vX7qrF353ASKBJ5RS2bJz1qCJXGfzK4v
QqfVTT0mcE8yIgJQefoFX+GnVV092WaFYtiOe7QjfpSqXtaQmShZC1QlRnAYJV
wo5Gx5s4B/THU5BgPKZyvUEJnK/pcsb2hOqCOd</PROPERTY>
<PROPERTY NAME="Content-Type">application/x-www-form-urlencoded
</PROPERTY>
<PROPERTY NAME="Content-Length">54</PROPERTY>
</PROPERTYLIST>
<PROPERTY NAME="server">Apache/2.0.40 (Unix) DAV/2</PROPERTY>
<PROPERTY NAME="queryID">2</PROPERTY>
</PolicyValidatorQuery>
259
ク エ リ に含まれる プ ロパテ ィ
次の表は、 文字列演算を使用 し て評価で き る ク エ リ プ ロ パテ ィ タ グの概要を示 し てい ます。 いず
れかの ク エ リ プ ロ パテ ィ を頻繁に使用 し 、 その カ ス タ ム判定ポ イ ン ト プ ラ グ イ ン が必要な場合
は、 Select Access の拡張アーキ テ ク チ ャ を利用 し て、 独自のプ ラ グ イ ン を作成で き ます。 詳細は、
第 4 章、 「認証方式 と 認証ルールのカ ス タ マ イ ズ : Validator API」 を参照 し て く だ さ い。
表 29
ク エ リ プ ロパテ ィ の構文
プ ロパテ ィ
解説
値
cert
証明書判定ポ イ ン ト が必要 と す
る 情報を送信す る プ ロ パテ ィ 。
PEM エ ン コ ーデ ィ ン グ X.509 デジ タ ル証
明書。
client
ク ラ イ ア ン ト ソ フ ト ウ ェ アか ら
の情報を送信す る プ ロ パテ ィ 。
要求を開始 し た ク ラ イ ア ン ト ソ フ ト ウ ェ
アの名前 と バージ ョ ン番号。
注記 : こ のデー タ は、 標準の
サーバー判定ポ イ ン ト に よ っ て
使用 さ れ る こ と はあ り ません。
dstHost
srcHost
1 台の コ ン ピ ュ ー タ が複数の仮
想ホ ス ト 名を サポー ト す る 場合
に、 ホ ス ト 名を明示的にす る プ
ロ パテ ィ 。
要求送信先ホ ス ト の名前。
注記 : こ のデー タ は、 標準の
サーバー判定ポ イ ン ト に よ っ て
使用 さ れ る こ と はあ り ません。
dstIP
宛先 IP 情報を取得す る プ ロ パ
ティ。
要求送信先の IP ア ド レ ス。
宛先ポー ト 情報を取得す る プ ロ
パテ ィ 。 ポー ト 判定ポ イ ン ト で
は、 こ のデー タ は必須です。
要求の送信先ポー ト 。
protocol
ブ ラ ウ ザ と サーバーの間での
デー タ 転送に使用 さ れ る 形式を
説明す る プ ロ パテ ィ 。
任意の使用可能プ ロ ト コ ル。 た と えば、
http、 https な ど
method
デー タ のカプセル化に使用 さ れ 任意の有効な HTTP ヘ ッ ダー コ マ ン ド 。
た HTTP ヘ ッ ダー コ マ ン ド を説 た と えば、 GET、 POST、 HEAD な ど。
明す る プ ロ パテ ィ 。
server
使用 さ れ る Web サーバーの種類 サポー ト さ れ る 任意の Web/ アプ リ ケー
を説明す る プ ロ パテ ィ 。
シ ョ ン サーバー (iPlanet Web サーバーな
ど )。
srcIP
dstPort
srcPort
XML ク エ リ に対する Policy Validator の応答
応答 も XML 形式です。 応答には、 次のデー タ が含ま れます。
•
260
Enforcer プ ラ グ イ ン で実行す る 次の処理。 通常の処理は次の と お り です。
付録 A
— ア ク セ ス を許可ま たは拒否す る 。
— フ ォ ーム を表示 し て、 さ ら に詳細な情報を ユーザーか ら 取得す る 。
•
Web サーバー上のアプ リ ケーシ ョ ンに送信す る 必要のあ る デー タ 。た と えば、Java アプ リ ケー
シ ョ ンは、 ア イ デン テ ィ テ ィ エ ク スペ リ エ ン ス を個別化す る ための情報を必要 と し ます。
•
セ ッ シ ョ ン情報 (Cookie ま たは nonce)。 設定済みの 1 つ以上の Cookie ド メ イ ンにそのア イ デ
ン テ ィ テ ィ が以後ア ク セ ス す る と き 、 ア イ デン テ ィ テ ィ を識別 し ます。 Cookie と nonce の詳
細は、 『HP OpenView Select Access 6.2 ネ ッ ト ワ ー ク 統合ガ イ ド 』 を参照 し て く だ さ い。
Policy Validator か ら 送信 さ れ る XML 応答の例を以下のサ ン プルに示 し ま す。 次の タ グ のペア が
デー タ を ど の よ う に囲んでい る か を確認 し て く だ さ い。
•
<PolicyValidatorReply> と </PolicyValidatorReply> は、応答全体 と 応答に含ま れ
る デー タ 全体を囲んでい ます。
•
<PROPERTY NAME="name"></PROPERTY> は、 プ ロ パテ ィ "name" に対する値を囲んでいま
す。
<PolicyValidatorReply>
<PROPERTY NAME="queryID">2</PROPERTY>
<PROPERTY NAME="authenticated_dn">cn=Lance Mountain,ou=customer,
dc=com,dc=user_isp</PROPERTY>
<PROPERTYLIST NAME="personalization">
<PROPERTY NAME="User">lmountain</PROPERTY>
<PROPERTY NAME="Phone">504%2D2325</PROPERTY>
<PROPERTY NAME="Fax">504%2D2399</PROPERTY>
<PROPERTY NAME="DName">cn%3Dlance%20mountain%2Cou%3Dlance%2Cdc
%3Dcom%2Cdc%3Duser_isp%2Cdc</PROPERTY>
<PROPERTY NAME="Groups">customer%20people</PROPERTY>
</PROPERTYLIST>
<PROPERTY NAME="login_time">Thu Feb 27 12:59:45 2003
</PROPERTY>
<PROPERTYLIST NAME="authentication_server_types">
<PROPERTY NAME="authentication_method">password</PROPERTY>
</PROPERTYLIST>
<PROPERTY NAME="action">ALLOW</PROPERTY>
</PolicyValidatorReply>
ク エ リ ユーテ ィ リ テ ィ
ク エ リ ユーテ ィ リ テ ィ は、Policy Validator に ク エ リ を送信す る コ マ ン ド ラ イ ン アプ リ ケーシ ョ ン
です。 次の 2 つのオプシ ョ ン があ り ます。
•
C++ 実装について (262 ページ )
•
Java 実装について (265 ページ )
261
C++ 実装について
ク エ リ ユーテ ィ リ テ ィ を使用す る と 、 Policy Validator で大規模な テ ス ト を行 う こ と がで き ま す。
ユーテ ィ リ テ ィ の C++ 版 (query.cpp) を使用す る と 、 以下を実行で き ます。
•
1 つの ク エ リ の結果を確認す る 。
•
環境内でのパフ ォーマ ン ス を評価す る 。
•
簡単な認証お よ び高度な認証の結果を確認す る 。
こ の ク エ リ プ ロ グ ラ ムは <install_path>/query デ ィ レ ク ト リ にあ り ます。
コ マ ン ド ラ イ ンの構文
Windows では、 ク エ リ ユーテ ィ リ テ ィ を起動す る と き 、 次の ど ち ら かの コ マ ン ド を入力 し ます。
•
query [options] url
•
query [options] file1.xml file2.xml ...
UNIX では、 ク エ リ ユーテ ィ リ テ ィ を起動す る と き 、 次の ど ち ら かの コ マ ン ド を入力 し ます。
•
./query [options] url
•
./query [options] file.xml file2.xml ...
こ こで
•
url は、 XML ク エ リ を作成す る ために解析 さ れて使用 さ れ る 、 リ ソ ース のネ ッ ト ワー ク 上の
場所を示す完全修飾 URL です。 Policy Validator は URL 全体を必要 と す る ため、 URL の一部
のみを入力す る と 、 ク エ リ は失敗 し ます。 た と えば次の と お り です。
http://www.perftest.com:80/index.html
こ の URL の構成要素は次の と お り です。
— http はプ ロ ト コ ルです。
— www.perftest.com はホ ス ト です。
— 80 はポー ト です。
— index.html は リ ソ ース です。
•
file.xml は、 XML 形式の ク エ リ が 1 つま たは複数格納 さ れた フ ァ イ ルです。
•
[ オプシ ョ ン ] には、 表 30 に記載 さ れてい る 項目を ほぼ自由に組み合わせて指定す る こ と が
で き ます。
Policy Validator の ス ト レ ス テ ス ト には、 -f、 -t、 お よ び -l オプシ ョ ン を使用 し て く
だ さ い。
他のパ ラ メ ー タ と 組み合わせ る こ と ので き ないパ ラ メ ー タ も あ り ます。 た と えば、 -A
パ ラ メ ー タ と -u パ ラ メ ー タ は併用で き ません ( 組み合わせ自体が意味を持た ないた
めです )。
262
付録 A
.
表 30
C++ の ク エ リ プ ロ グ ラ ム オプ シ ョ ン
オプ シ ョ ン
使用法
-A user password
各 ク エ リ にユーザー名 と パ ス ワー ド を追加 し ます。 こ のパ
ラ メ ー タ を使用 し て、 Policy Validator の認証プ ロ セ ス を確
認 し ます。
-a <user><password>
ユーザー名 と パ ス ワー ド の情報を それぞれ別個の引数 と し
て各 ク エ リ に追加 し ます。 ユーザー名やパ ス ワー ド に コ ロ
ンが含まれてい る 場合に、 Policy Validator の認証プ ロ セ ス
を確認す る には、 こ のパ ラ メ ー タ を使用 し ます。
-C filename
使用す る 証明書を定義 し ます。 filename には PEM 形式
の証明書の名前お よ びパ ス を指定 し ます。
-c filename
Enforcer プ ラ グ イ ン の設定フ ァ イ ルを指定 し ます。
filename には設定フ ァ イ ルの名前お よ びパ ス を指定 し ま
す。 フ ァ イ ル名 を指定 し ない場合、 デフ ォ ル ト が使用 さ
れ ます。
-d
内部デバ ッ グ を有効に し ます。 使用す る 各パ ラ メ ー タ に対
し て、 デバ ッ グ レベルを 1 ずつ増やす こ と がで き ます。
た と えば、- dd はデバ ッ グ レベルを レベル 2 ( ト レース を
有効にす る ) に上げ ます。
-e number
Policy Validator か ら 受け取 る 結果の タ イ プ を定義 し ます。
使用で き る オプシ ョ ンは、 次の と お り です。
•
0—ALLOW
•
1—DENY
•
2—ERROR
•
3—USER_DEFINED
-f number
UNIX 専用。 ク エ リ を number で指定 し た数の並列プ ロ セ
ス に フ ォ ー ク し ます。
-h
パ ラ メ ー タ に関す る 説明 と ヘルプ を表示 し ます。
-l number
ク エ リ の送信回数を指定 し ます。
-M
送信 さ れ る ク エ リ が管理目的に よ る も のであ る こ と を示 し
ます ( た と えば、 Policy Validator が自身を再設定す る ため
の情報が ク エ リ に含まれてい る 場合な ど )。
-m
nonce の結合を有効に し ます。 有効に し た場合、 Policy
Validator か ら の応答に使用 さ れ る nonce は、 後続の ク エ リ
に結合 さ れます。 こ のオプシ ョ ンは、 認証プ ロ セ ス のテ ス
ト に使用 し ます。
こ のオプシ ョ ンは、- n オプシ ョ ン を指定す る 場合にのみ使
用で き ます。
263
表 30
C++ の ク エ リ プ ロ グ ラ ム オプ シ ョ ン ( 続き )
オプ シ ョ ン
使用法
-n
nonce のサポー ト を有効に し ます。 再認証を不要にす る た
め、 Select Access は、 すでに認証 さ れてい る ア イ デン テ ィ
テ ィ を追跡す る nonce を作成 し ます。 こ の よ う な nonce は
Policy Validator の認証プ ラ グ イ ンに よ っ て作成 さ れます。
-r filename
行ご と に URL が 1 つずつ含まれた リ ソ ース フ ァ イ ルを指
定 し ます。 ク エ リ プ ロ グ ラ ムは、 フ ァ イ ルに記載 さ れて
い る 各 リ ソ ース の ク エ リ を送信 し ます。
-q
実行の終了時に、1 秒間に実行さ れたク エリ の数を 出力し ま
す。 単一のコ マン ド によ っ て 多く のク エリ を 送信する 場合
は、 こ のオプショ ン を -r ま たは -u と 併用し てく ださ い。
-s sourceHost sourceIp
送信元のホ ス ト 名お よ び IP ア ド レ ス を含んだ XML フ ィ ー
ル ド を指定 し ます。 こ れに よ り 、 メ ッ セージが異な る IP
ア ド レ ス ま たはホ ス ト か ら 生成 さ れた よ う に装 う こ と がで
き ます。
た と えば、 Policy Validator が認証ルールを正 し く 評価 し て
い る こ と を確認す る 目的で、 管理者が各ア イ デン テ ィ テ ィ
に対 し て設定 し たルールを テ ス ト す る 場合に、 こ のオプ
シ ョ ン を使用で き ます。
-t number
各プ ロ セ ス内の ス レ ッ ド 数を指定 し ます。 各ス レ ッ ド は、
要求を別々に送信 し ます。
-u filename
複数のユーザー名 と パ ス ワー ド を ま と めて各 ク エ リ に追加
す る ための フ ァ イ ルを指定 し ます。 フ ァ イ ル名にはユー
ザー フ ァ イ ルの名前お よ びパ ス を指定 し ます。 こ のパ ラ
メ ー タ を使用 し て、 Policy Validator の認証プ ロ セ ス を確認
し ます。
-V
ク エ リ ユーテ ィ リ テ ィ のバージ ョ ン を返 し 、 終了 し ます。
-v
各 ク エ リ の結果を常に出力 し ます。
-x
ク エ リ のいずれかでエ ラ ーが発生 し た場合に も 、 ク エ リ
プ ロ グ ラ ム を継続 し ます。
使用のシナ リ オ
ビ ジネ ス環境 と ク エ リ ユーテ ィ リ テ ィ の使用目的に よ り 、 コ マ ン ド ラ イ ン で使用す る オプシ ョ ン
は異な り ます。 こ こ で、 一般的な使用例を い く つか示 し ます。
1 つの ク エ リ の結果確認
1 つの ク エ リ を テ ス ト す る には、 ク エ リ ユーテ ィ リ テ ィ を実行す る と き 、 デバ ッ グ レベル 2 お よ
び予想 さ れ る 結果を指定 し ます。 た と えば、 Windows で次の コ マ ン ド を実行 し ます。
query -dd -e 0 http://www.mycompany.com:80/demo
こ の例では、 1 つの ス レ ッ ド を含む単一の ク エ リ が作成 さ れ、 Policy Validator への送信は 1 回行わ
れ ます。
264
付録 A
簡単なパ フ ォ ーマ ン ス と ス ト レ スのテ ス ト
ス ト レ ス テ ス ト を行い、 Policy Validator のパフ ォ ーマ ン ス を測定す る には、 フ ォー ク (UNIX のみ
) お よ びループ オプシ ョ ン を使用 し て ク エ リ ユーテ ィ リ テ ィ を実行 し 、 最大値を確認 し ます。 た
と えば、 Solaris で次の コ マ ン ド を実行 し ます。
./query -f 16 -l 2000 -e 0 http://www.mycompany.com:80/demo
こ の例では、1 つの ス レ ッ ド を含む並列プ ロ セ ス が 16 作成 さ れ、Policy Validator への送信では 2000
回のループが実行 さ れ ます。 ク エ リ ユーテ ィ リ テ ィ が動作を終了す る と 、 パフ ォーマ ン ス に関す
る サマ リ が提供 さ れ ま す。 た と えば 「66206 queries per minute: 32000 queries in
29 seconds.」 の よ う な結果が確認で き ます。
簡単な認証テ ス ト
Select Auth が有効に設定 さ れてい る リ ソ ー ス に ク エ リ を行 う 場合、 認証オプシ ョ ン を有効に し て
ク エ リ ユーテ ィ リ テ ィ を実行 し ます。 た と えば、 Windows で次の コ マ ン ド を実行 し ます。
query -dd -a jdoe:secretword http://www.mycompany.com:80/demo
こ の例で は、 1 つの ス レ ッ ド を 含ん だ 1 つの イ ン ス タ ン ス に対す る 単一の ク エ リ が作成 さ れ、
Policy Validator に送信 さ れます。
nonce のサポー ト に関する高度な認証テ ス ト
Select Auth が有効に設定 さ れてい る リ ソ ース に ク エ リ を行い、nonce のサポー ト が正常に機能 し て
い る こ と を確認す る には、 認証オプシ ョ ンお よ び nonce のサポー ト オプシ ョ ン を有効に設定 し て
ク エ リ ユーテ ィ リ テ ィ を実行 し ます。 た と えば、 次の コ マ ン ド を実行 し ます。
query -dd -n -m -a jdoe:secretword http://www.mycompany.com:80/demo
こ の例では、 1 つの ス レ ッ ド を含む単一の ク エ リ が作成 さ れ、 Policy Validator へ送信 さ れます。 最
初の ク エ リ で nonce のサポー ト が有効に設定 さ れてい る こ と が確認 さ れた場合、Policy Validator の
最初の応答に新 し い nonce が組み込ま れます。さ ら に、 ク エ リ ユーテ ィ リ テ ィ は こ の nonce を 2 番
目の ク エ リ に追加 し ます。 Policy Validator は nonce が新 し い こ と を把握 し てい る ため、 2 番目の応
答には nonce は組み込ま れません。
Java 実装について
こ の SDK は、Java 実装版の ク エ リ ユーテ ィ リ テ ィ も 含みます。こ の フ ァ イ ル (QueryTest.java)
は、 次の場所にあ り ます。
<install_path>/source/Java/com/hp/ov/selectaccess/enforcer/
Java 版の実装は C++ 版ほ ど機能が充実 し てい ません。Java 版の実装はサン プル と し て提供 さ れま
す。 Java 版のサン プルを実行す る 場合、 Select Access 主要製品か ら 以下の JAR フ ァ イ ルを コ ピー
し て く だ さ い。
msgsresources.jar
jdom.jar
jakarta-oro-2_0.jar
bcprov-jdk14.jar
265
プ ログ ラ ムのオプ シ ョ ン
C++ 版の実装 と 同様に、 要件に合わせてオプシ ョ ン を指定 し てプ ロ グ ラ ム を実行で き ます。 現在、
表 31 で一覧す る パ ラ メ ー タ を自由に組み合わせてプ ロ グ ラ ム を実行で き ます。
表 31
266
Java の ク エ リ プ ロ グ ラ ム オプ シ ョ ン
オプ シ ョ ン
使用法
-a user:password
各 ク エ リ にユーザー名 と パ ス ワ ー ド を追加 し ます。 こ のパ ラ メ ー
タ を使用 し て、 Policy Validator の認証プ ロ セ ス を確認 し ます。
-c filename
Enforcer プ ラ グ イ ンの設定フ ァ イ ルを指定 し ます。 filename に
は設定フ ァ イ ルの名前お よ びパ ス を指定 し ます。 フ ァ イ ル名 を
指定 し ない場合、 デフ ォ ル ト が使用 さ れ ます。
-d number
内部デバ ッ グ を有効に し ます。 こ のオプシ ョ ン で指定す る 値を増
やす と 、 デバ ッ グ レベルを 1 ずつ増やす こ と がで き ます (1 が最
も 低いデバ ッ グ レベル )。
-e
Policy Validator の現在の設定を表示 し ます。
-f
ク エ リ と 転送 さ れた フ ォ ーム デー タ を表示 し ます。
-h
パ ラ メ ー タ に関す る 説明 と ヘルプ を表示 し ます。
-l number
ク エ リ の送信回数を指定 し ます。
-n
nonce のサポー ト を有効に し ます。 再認証を不要にす る ため、
Select Access は、 すでに認証 さ れてい る ア イ デン テ ィ テ ィ を追跡
す る nonce を作成 し ます。 こ の よ う な nonce は Policy Validator の
認証プ ラ グ イ ンに よ っ て作成 さ れ ます。
-p number
ク エ リ のポーズ を有効化 し ます。 値を増やす と ポーズ間隔を増や
す こ と がで き ます。
-s filepath
selectacces.conf フ ァ イ ルの場所を指定 し ます。
-V
ク エ リ ユーテ ィ リ テ ィ のバージ ョ ン を返 し 、 終了 し ます。
付録 A
索引
記号
.Net API、 Enforcer API、 接続 , 126
.Net Web サービ ス、 作成 , 128
.Net イ ン タ ーフ ェ イ ス , 85
数字
32 ビ ッ ト オペレーテ ィ ン グ シ ス テ ム、 「オペレーテ ィ
ン グ シ ス テ ム」 を参照
A
AccessPolicy
説明 , 201
パ ラ メ ー タ , 201
ACE, 22
AdminFault, 191
Administration API
AccessPolicy, 201
AdminFault, 191
AdminPolicy, 203
COMPONENT, 206
getAuthServiceNames, 215
getPolicies, 198
getResource, 191
getRuleNames, 215
identityColumn, 199
identityDN, 187
LdapSearchCriteria, 187
LdapSearchCriteriaFilter, 189
PROPERTYLIST, 207
refreshValidators, 215
ResourceServer, 192
searchResources, 197
SelectAuthPolicy, 204
SelectAuthPropertyType, 205
setPolicy, 210
setResource, 194
setUserPassword, 216
WorkflowPolicy, 202
ア イ デン テ ィ テ ィ 管理パ ス , 186
開始 , 183
管理 リ ソ ース パ ス , 185
機能管理パ ス , 186
共通のデー タ の種類 , 184
記録 , 182
ス キーマ管理パ ス , 186
説明 , 182
デー タ の種類の概要 , 183
ネ ッ ト ワ ー ク 管理 リ ソ ース パ ス , 185
ネ ッ ト ワ ー ク リ ソ ース パ ス , 185
パ ス ワー ド のエ ラ ー処理 , 217
パ ス ワー ド の変更 , 215
ヘルパ API, 215
ポ リ シー , 200
ポ リ シー固有の API, 198
リ ソ ース固有の API, 191
リ ソ ース リ ス ト の検索 , 197
ルール , 201
例外の処理 , 182
AdminPolicy
説明 , 203
パ ラ メ ー タ , 204
allowedByValidator() メ ソ ッ ド , 98
AND 式 , 77
ap_table_do() メ ソ ッ ド , 116
Apache API
Enforcer API と の併用 , 107
接続
複数のバージ ョ ン のサポー ト , 109
ラ イ ブ ラ リ の組み込み , 109
Apache Enforcer プ ラ グ イ ン
.so フ ァ イ ル , 125
Apache API、 「Apache API」 を参照
Cookie、 抽出 , 116
gmake コ マ ン ド , 126
httpd.conf、 ロ ー ド , 107
HTTP ト ラ ンザ ク シ ョ ン , 107
HTTP ヘ ッ ダー、 確認 , 152
MD SSO, 122
nonce, 116, 119
SSL パ ラ メ ー タ の検索 , 116
SSO, 116
267
UNIX での考慮事項 , 124
URL、 リ ダ イ レ ク ト , 117
ア ク セ ス制御ハン ド ラ , 108
イ ン ス タ ン ス , 107, 110
イ ン ス ト ール , 125
環境変数、 CGI に表示 , 155
ク エ リ , 112, 119
決定、 実行 , 119
コ ー ド の コ ンパ イ ル , 125
コ ールバ ッ ク メ ソ ッ ド , 116
子プ ロ セ ス , 108
個別化 , 152
使用で き ない文字 , 111
承認、 必要性の判断 , 111
設定デー タ , 110
登録 , 125
登録デー タ 、 受け渡 し , 107
認証情報、 抽出 , 117
ネ イ テ ィ ブな HTTP 認証 , 108
フ ォ ーム、 デー タ の保存 , 118
フ ォ ーム、 ロ グ イ ン , 117
モジ ュ ールの初期化 , 108
文字列の操作 , 109
ラ イ ブ ラ リ 、 組み込み , 109
リ ソ ース、 解放 , 108
例外の処理 , 109
ロ グ , 109
API
Administration、 説明 , 182
Apache API、 「Apache API」 を参照
NSAPI, 83
Select Access のカ ス タ マ イ ズ , 19
Servlet API、 「Servlet API」 を参照
User API、 「User API」 を参照
個別化、 「Personalization API」 を参照
サブジ ェ ク ト エデ ィ タ 、 「サブジ ェ ク ト エデ ィ タ
API」 を参照
ポ リ シー、 「Policy API」 を参照
ロ グ、 「Logger API」 を参照
ASP
使用 , 158
マルチ リ ソ ース の ク エ リ , 163
attributelogic, 22
AUTHENTICATOR 属性 , 38
B
Basic、 Visual
Active Server Page、 「ASP」 を参照
268
マルチ リ ソ ース の ク エ リ , 163
C
cancelClicked() メ ソ ッ ド , 36
C/C++
COM イ ン タ ーフ ェ イ ス , 84
Enforcer API、 「Enforcer API」 を参照
Enforcer API の概要 , 83
Policy API、 「Policy API」 を参照
Validator API の概要 , 46
ク ラ ス と ユーテ ィ リ テ ィ , 86, 108
ラ イ ブ ラ リ , 20
CGI
環境変数、 表示 , 155
プ ロ グ ラ ム、 カ ス タ マ イ ズ , 150
closeScreen() メ ソ ッ ド , 253
COM
Enforcer API の概要 , 83
Enforcer プ ラ グ イ ン , 84, 129
Enforcer プ ラ グ イ ン、 作成、 「WSE Enforcer プ ラ グ
イ ン」 を参照 , 126
Policy API, 163
WSE Enforcer, 85
ク ラ ス , 86
ラ イ ブ ラ リ , 20
Common Gateway Interface、 「CGI」 を参照
COMPONENT
説明 , 206
パ ラ メ ー タ , 207
Configuration Editor
component.xml フ ァ イ ル , 37
基準 , 35
ク ラ ス パ ス , 35
作成 , 35
作成、 手順 , 35
サブジ ェ ク ト エデ ィ タ 、 「サブジ ェ ク ト エデ ィ タ
プ ラ グ イ ン」 を参照
使用、 「Policy Builder、 プ ラ グ イ ン」 を参照
名前 , 38
表示 , 33
config.xml, 42
Cookie, 88
MD SSO, 102
nonce, 119
SOAP, 141
SOAP 応答への挿入 , 128
作成 , 85, 94, 98
抽出 , 116, 137
CreateFileLogger() メ ソ ッ ド , 238, 240
createScreen() メ ソ ッ ド , 250
cURL, 22
D
Decider
decide() メ ソ ッ ド , 50
Decider.h ヘ ッ ダー , 69
decide() メ ソ ッ ド , 50, 53, 54, 73
ク ラ ス , 50, 53, 72
ク ラ ス結果 コ ー ド , 50
文字列 decider_branch_path, 73
Decider、 「判定ポ イ ン ト プ ラ グ イ ン」 を参照
displayMessageBox() メ ソ ッ ド , 250
DLL
Apache Enforcer プ ラ グ イ ンの実装 , 125
Enforcer プ ラ グ イ ン , 109
Policy Validator プ ラ グ イ ンの実装 , 53
Select Access に必要な DLL, 22
WSE Enforcer プ ラ グ イ ンの実装 , 146
DN
オブジ ェ ク ト 文字列のパ ラ メ ー タ , 221
抽出 , 75
ハ イ パーテ キ ス ト リ ン ク , 230
パ ス ワ ー ド フ ァ イ ルのエ ン ト リ , 171
ユーザー エ ン ト リ , 230
ユーザー ソ ース , 51
ユーザー保存場所の取得 , 75
doFilter() メ ソ ッ ド , 91
E
Enforcer API
.Net API、 接続 , 126
Apache API と の併用 , 107
C/C++ ク ラ ス , 108
C/C++ ユーテ ィ リ テ ィ , 108
COM、 「WSE Enforcer プ ラ グ イ ン」 を参照
COM ク ラ ス , 129
COM、 ラ イ ブ ラ リ の イ ン ポー ト , 129
jar フ ァ イ ル , 90
Java の ク ラ ス , 90
Servlet API、 接続 , 84
イ ン タ ーフ ェ イ ス , 84
概要 , 83
拡張 , 159
機能 , 21
ク ラ ス , 84, 86
ク ラ ス、 イ ン ポー ト , 90
サービ ス の追加 , 84
使用 , 84
設定 , 87
定数 , 97
ユーテ ィ リ テ ィ , 84, 86
ラ イ ブ ラ リ の組み込み , 109
EnforcerException ク ラ ス , 109
Enforcer プ ラ グ イ ン
Apache、 「Apache Enforcer プ ラ グ イ ン」 を参照
Apache の例、 「Apache Enforcer プ ラ グ イ ン」 を参
照 , 84
API ラ イ ブ ラ リ , 20
COM、 「WSE Enforcer プ ラ グ イ ン」 を参照
Cookie, 85
ENFORCER_ACTION プ ロ パテ ィ , 74
enforcer_check() メ ソ ッ ド , 111
enforcer32.d.dll フ ァ イ ル , 146
ENFORCER_ACTION_ALLOW プ ロ パテ ィ , 74
ENFORCER_ACTION_DENY プ ロ パテ ィ , 74
ENFORCER_ACTION プ ロ パテ ィ , 74
EnforcerAddEncoded() メ ソ ッ ド , 113
EnforcerAddFormData() メ ソ ッ ド , 113
EnforcerAddQueryData() メ ソ ッ ド , 113
EnforcerAddrsQueryInit() メ ソ ッ ド , 113
enforcer_check() メ ソ ッ ド , 112, 119
EnforcerCOMHandle ク ラ ス , 129
EnforcerException ク ラ ス , 52, 74
EnforcerHandle ク ラ ス , 108
enforcer.h ヘ ッ ダー フ ァ イ ル , 67, 74
EnforcerInit() メ ソ ッ ド , 108
ENFORCER_P13NINFO 定数 , 149, 151, 153
EnforcerQuerySend() メ ソ ッ ド , 119
ENFORCER_RESOURCE 定数 , 160
ENFORCER_SERVICE プ ロ パテ ィ , 160
EnforcerSocketInit() メ ソ ッ ド , 239
enforcer_sys.h, 52
enforcer_sys.h ヘ ッ ダー フ ァ イ ル , 109
Enforcer の ク ラ ス , 90
MD SSO, 87, 89
nonce, 85, 88
Policy Validator、 委任 , 83
Policy Validator、 管理 , 85
Setup Tool、 設定 , 87
site_data、 「site_data プ ラ グ イ ン」 を参照
SSL, 87
SSL パ ラ メ ー タ , 85
SSO, 84, 85, 87
URL、 取得 , 85
WSE、 「WSE Enforcer プ ラ グ イ ン」 を参照
269
XML、 ク ラ ス , 51
XML のエ ン コ ー ド , 25
XML プ ロ パテ ィ 、 追加 , 85
イ ン ス タ ン ス の初期化 , 85
応答、 評価 , 85
概要 , 18, 83
カ ス タ マ イ ズ , 22
カ ス タ マ イ ズの概要 , 20
環境デー タ 、 抽出 , 85
環境変数、 読み取 り , 85
ク エ リ , 25, 257
ク ラ ス、 イ ン ポー ト , 90
ク ラ ス パ ス , 90
個別化 , 84
個別化属性、 ロ ーカル環境への配置 , 150
コ ン ス ト ラ ク タ , 94
サーブ レ ッ ト 、 「サーブ レ ッ ト Enforcer プ ラ グ イ
ン」 を参照
作成、 C/C++ の手順 , 107
作成、 Java の手順 , 89
作成、 概要 , 85
作成時の考慮事項 , 88
承認デー タ 、 抽出 , 94
証明書 , 87
セキ ュ リ テ ィ サービ ス、 追加 , 84
セ ッ シ ョ ンの状態、 保持 , 88
設定フ ァ イ ル , 85
タ イ ム ア ウ ト , 85
テ ン プ レー ト , 20
フ ェールオーバのサポー ト , 85
フ ォ ーム、 処理 , 85
役割 , 20
ユーザー、 承認 , 84
ユーザー、 認証 , 84
要求、 作成 , 85
リ ソ ース の要求、 受け取 り , 83
リ モー ト 管理 , 87
ロ グ , 84
ロ グ イ ン フ ォーム、 表示 , 83
ロ グ イ ン ユーザー , 88
Enterprise Java Beans、 「EJB」 を参照 , 22
Entry ク ラ ス , 219, 230
ErrorException ク ラ ス , 219
EVALUATOR 属性 , 38
Expat, 22
F
fetchPasswordData(), 175
270
fetchPasswordData() メ ソ ッ ド , 175
FileAuthenticator
ク ラ ス , 55, 56
ク ラ ス の定数 , 56
認証プ ラ グ イ ン の例 , 55
FileAuthenticator ク ラ ス , 56
G
getAuthServiceNames, 215
getPolicies
説明 , 198
パ ラ メ ー タ , 199
getResource
説明 , 191
パ ラ メ ー タ , 192
getRuleNames, 215
GIF
ツールバー ア イ コ ン , 37
デ ィ レ ク ト リ , 40
フ ァ イ ル名 , 40
要件 , 37
ルール ペ イ ン ア イ コ ン , 37
gmake コ マ ン ド , 82
GNU、 使用 , 82
GUI、 「ユーザー イ ン タ ーフ ェ イ ス」 を参照
H
handleComponentShown() メ ソ ッ ド , 36
handleWindowOpened() メ ソ ッ ド , 36
HTML
静的フ ァ イ ル , 222
動的な作成 , 221
HTTP
Cookie, 98
HttpContext, 137, 141
httpd.conf 設定フ ァ イ ル , 107
HttpRequest プ ロ パテ ィ , 131
HttpServletRequest ク ラ ス , 155
HttpServletRequest パ ラ メ ー タ , 219
HttpServletResponse パ ラ メ ー タ , 219
ア ク セ ス拒否ページ , 108
応答、 作成 , 91
ク エ リ デー タ , 113
セ ッ シ ョ ン変数 , 234
ト ラ ンザ ク シ ョ ン の フ ェーズ , 107
入力ス ト リ ーム と し ての フ ォ ーム , 113
ネ イ テ ィ ブな認証 , 108
ヘ ッ ダー , 131, 141
ヘ ッ ダー、 作成 , 94
ヘ ッ ダー、 個別化 , 150
ヘ ッ ダー、 個別化のための確認 , 152
ヘ ッ ダー、 表示 , 155
メ ソ ッ ド , 26, 113
要求、 処理 , 94, 91
要求、 変換 , 90
リ ソ ース の要求 , 83
Policy API, 163
Server Pages、 「JSP」 を参照
アーカ イ ブの使用 , 40
カ ス タ ム Enforcer プ ラ グ イ ン , 22
ク ラ ス , 86
ラ イ ブ ラ リ , 20
ロ グ テ ス ト プ ロ グ ラ ム , 242
JDialog, 33
設定の表示 , 35
ヘルプの表示 , 254
JPanel、 作成 , 33
I
JSP
IdentityColumn
説明 , 199
パ ラ メ ー タ , 200
Policy Validator 要求の作成 , 162
作成 , 162
フ ァ イ ルの リ ス ト , 222
フ ォーム ベース の管理 , 221
identityDN, 187
ID 選択
概要 , 17
カ ス タ ム エデ ィ タ , 30
個別化属性、 抽出 , 150
サーバー、 設定 , 47
認証方式、 「認証プ ラ グ イ ン」 を参照
有効化 , 49
L
LdapConnection ク ラ ス , 51, 69, 70
LdapSearchCriteria
説明 , 187
パ ラ メ ー タ , 188
inetOrgPerson オブジ ェ ク ト ク ラ ス , 168
LdapSearchCriteriaFilter
説明 , 189
パ ラ メ ー タ , 190
INF、 Web 管理 , 221
LDAP、 「デ ィ レ ク ト リ サーバー」 を参照 , 25
initialize() メ ソ ッ ド , 35
LDIF
サン プルのパ ス ワー ド エ ン ト リ , 170
パ ス ワー ド 、 標準に適合 , 170
includeSubFolders パ ラ メ ー タ , 226
init() メ ソ ッ ド , 53, 91, 240
InputFilter ク ラ ス , 131, 136
IP ア ド レ ス , 54, 113
is
isAuthorized() メ ソ ッ ド , 91, 95, 102
isUserInLdap() メ ソ ッ ド , 176
Lightweight Directory Interface Format、 「LDIF」 を参照
loadScreenData() メ ソ ッ ド , 251
log() メ ソ ッ ド , 239, 241
LogFile.h ヘ ッ ダー , 239
LogFilter ク ラ ス , 238
J
LogFilter() メ ソ ッ ド , 240
JAR フ ァ イ ル , 21
CLASSPATH に追加 , 35
component.jar, 35, 40
EnforcerAPI.jar, 90
HelpSet.jar, 169
PolicyBuilder.jar, 35
shared.jar, 35, 90
Java
Enforcer API の概要 , 83
Enforcer コ ン ポーネ ン ト , 84
Enforcer の ク ラ ス , 90
Logger API
XML, 238
XML 設定 , 239
概要 , 237
ク ラ ス パ ス , 242
設定、 確認 , 243
動作確認 , 242
フ ィ ル タ 、 作成 , 237
フ ィ ル タ 、 初期化 , 240
フ ィ ル タ 、 設定 , 238
フ ィ ル タ 、 内容 , 237
271
変数 , 241
メ ッ セージ、 書 き 込み , 245
nxPolicyComponent attribute, 42
nxXml 属性 , 42
Logger.h ヘ ッ ダー フ ァ イ ル , 239
Logger ク ラ ス , 52, 90, 109, 237
O
logout() メ ソ ッ ド , 221
okClicked() メ ソ ッ ド , 35
LogStderr.h ヘ ッ ダー フ ァ イ ル , 239
openScreen() メ ソ ッ ド , 251
LogSystem.h ヘ ッ ダー , 239
OpenSSL, 22
OR 式 , 77
M
OutputFilter ク ラ ス , 141
m_enforcer, 95
m_handle, 127
P
m_handle.Init(), 130
PEM エ ン コ ーデ ィ ン グ , 260
m_properties, 33
Personalization API, 153
ENFORCER_P13NINFO 定数、 使用 , 149, 151
概要 , 149
機能 , 21
言語属性 , 168
ラ イ ブ ラ リ , 149
mainFrame パ ラ メ ー タ , 250
Makefile、 修正 , 82
MD SSO, 87, 89, 95
Apache Enforcer プ ラ グ イ ン , 122
nonce、 抽出 , 96
実行 , 102
ヘルパー メ ソ ッ ド , 103
mod_enforcer.h ヘ ッ ダー フ ァ イ ル , 125
modifyEntry() メ ソ ッ ド , 234
MULTIPLERESOURCELIST 定数 , 160
N
NAME 属性 , 38
Node ク ラ ス , 219, 230
nonce
MD SSO, 102
NATIVE_NONCE プ ロ パテ ィ , 131
Policy Validator、 送信 , 137
SOAP、 ~への追加 , 142
SSO, 98
SSO の , 119
WSE Enforcer プ ラ グ イ ン , 128
受け渡 し , 96
組み込み , 100
シ ン グル サ イ ン オ ン , 85, 88
抽出 , 89, 96, 142
登録 , 98
登録の , 119
NSAPI, 83
NTEventLogAppender.dll, 22
null エ ン ト リ , 49
272
Policy API
XML の概要 , 160
概要 , 159
Policy Builder
API、 「Policy Builder API」 を参照 , 21
Enforcer プ ラ グ イ ン、 リ モー ト 管理 , 87
個別化、 有効に設定 , 149
サブジ ェ ク ト エデ ィ タ 、 「サブジ ェ ク ト エデ ィ タ
プ ラ グ イ ン」 を参照
セ ッ シ ョ ン、 終了 , 248
プ ラ グ イ ン , 31
プ ラ グ イ ン、 概要 , 18
プ ラ グ イ ン、 削除 , 41
プ ラ グ イ ン の イ ン ス ト ール , 40
プ ラ グ イ ン の種類 , 30
プ ラ グ イ ン の ロ ー ド , 40
役割 , 19
Policy Builder API
cancelClicked() メ ソ ッ ド , 36
handleComponentShown() メ ソ ッ ド , 36
handleWindowOpened() メ ソ ッ ド , 36
helpClicked() メ ソ ッ ド , 36
initialize() メ ソ ッ ド , 35
JDialog, 33
JPanel, 33
okClicked() メ ソ ッ ド , 35
RuleComponentPanel ク ラ ス , 33
概要 , 30
使用 , 33
ユーテ ィ リ テ ィ , 34
ラ イ ブ ラ リ , 19
Policy Builder プ ラ グ イ ン
作成、 概要 , 34
作成、 手順 , 34
Policy Enforcer、 「Enforcer プ ラ グ イ ン」 を参照
Policy Validator, 18, 52
API、 「Validator API」 を参照
JSP ベース の ク エ リ , 162
Select Audit と の イ ン タ ーフ ェ イ ス , 52
SOAP 応答 , 129
SOAP 要求、 作成 , 131
XML 通信 , 46
概要 , 45
管理 , 85
キ ャ ッ シ ュ の更新 , 42
ク エ リ , 86, 136
ク エ リ に対す る 応答 , 260
ク エ リ ユーテ ィ リ テ ィ に よ る パフ ォーマ ン ス のテ
ス ト , 261
結果 コ ー ド , 54
決定、 実行 , 119
決定、 送信 , 98
検証プ ロ セ ス , 49
個別化、 サポー ト , 150
設定 , 45
他の コ ン ポーネ ン ト と の通信 , 45
デー タ を~に追加す る ク エ リ , 96
判定ポ イ ン ト プ ラ グ イ ン、 呼び出 し , 49
プ ラ グ イ ンの種類、 「認証プ ラ グ イ ン」 お よ び 「承
認プ ラ グ イ ン」 を参照
プ ラ グ イ ン、 ロ ー ド , 38
マルチ リ ソ ース、 ク エ リ , 159
文字列操作用マ ク ロ , 52
ユーテ ィ リ テ ィ 、 使用 , 52
ルールの評価 , 45
例外 EvaluatorInternal, 75
ロ グ , 52
Policy Validator プ ラ グ イ ン
API ラ イ ブ ラ リ 、 「Validator API」 を参照
XML の使用 , 25
概要 , 18
削除 , 55
作成手順 , 53
作成の概要 , 53
役割 , 19
printf, 241
ProcessMessage() メ ソ ッ ド , 136, 127, 131, 141
processRequest() メ ソ ッ ド , 67
PropertyElement ク ラ ス , 51, 69, 90, 108
PropertyListElement, 65
PropertyListElement ク ラ ス , 51, 69, 90, 108
PROPERTYLIST、 説明 , 207
Property ク ラ ス , 90
R
RadiusPanel ク ラ ス , 38
RADIUS サーバーのサン プル XML フ ァ イ ル , 38
Red Hat での Linux 要件 , 126
refreshValidators, 215
ResourceServer
説明 , 192
パ ラ メ ー タ , 193
Rule Builder
ア イ コ ン、 概要 , 32
決定ツ リ ーの要素 , 48
判定ポ イ ン ト 、 「判定ポ イ ン ト プ ラ グ イ ン」 を参
照
プ ラ グ イ ン , 31
ルールの評価 , 49
RuleComponentPanel, 33
オーバー ラ イ ド , 35
拡張 , 35
runTests() メ ソ ッ ド , 245
S
sCreateTemporary() メ ソ ッ ド , 168, 178
SearchResults ク ラ ス , 220
searchTree() メ ソ ッ ド , 226
Select Access
API、 「API」 を参照
JAR フ ァ イ ル , 21
XML の概要 , 25
XML の使用 , 26
概要 , 17, 258
カ ス タ マ イ ズ , 19
カ ス タ ム Configuration Editor, 29
個別化プ レ フ ィ ッ ク ス , 150
コ ン ポーネ ン ト の概要 , 17
セキ ュ リ テ ィ サービ ス、 統合、 「Enforcer プ ラ グ イ
ン」 を参照
設定 , 20
ソ ース コ ー ド , 22
273
パ ス ワ ー ド , 65
バ ッ ク エ ン ド アプ リ ケーシ ョ ン ロ ジ ッ ク , 20
付属の ラ イ ブ ラ リ , 22
プ ラ グ イ ンの概要 , 30
ロ グ、 統合 , 237
Select Access のカ ス タ マ イ ズ
Configuration Editor, 29
オプシ ョ ンの概要 , 21
方法 , 19
Select Audit
イ ン タ ーフ ェ イ ス , 52
通信 , 85
ロ グ , 84, 96
ロ グ レベル , 60
SelectAuthPolicy
説明 , 204
パ ラ メ ー タ , 205
MD SSO、 設定 , 89
Policy Builder、 設定 , 88
SSO, 87
setUserPassword
説明 , 216
パ ラ メ ー タ , 216
SetWSPolicy() メ ソ ッ ド , 140
shared.jar, 90
showHelp() メ ソ ッ ド , 254
showSubjects() メ ソ ッ ド , 226
site_data プ ラ グ イ ン
設定フ ァ イ ル、 Web サーバー , 146
ヘ ッ ダー デー タ の挿入 , 146
ロ ー ド , 146
sLocateByUID() メ ソ ッ ド , 176
setDestination() メ ソ ッ ド , 240
SOAP
Cookie、 挿入 , 128
Cookie、 追加 , 141
HttpRequest、 使用 , 131
暗号化 , 141
エ ラ ー , 141, 143
エ ンベ ロ ープ , 143
応答、 WSE, 128
作成 さ れ る XML, 129
出力、 フ ィ ル タ リ ン グ , 141
承認デー タ の抽出 , 126
署名 , 141
名前空間の定数、 定義 , 127
ヘ ッ ダー , 141
ヘ ッ ダー、 nonce の~への追加 , 142
メ ッ セージ、 作成 , 140
メ ッ セージ、 プ ロ パテ ィ , 127
要求、 プ ロ パテ ィ の抽出 , 131
setFieldValues() メ ソ ッ ド , 252
SOAP イ ン タ ーフ ェ イ ス , 85
setFilter() メ ソ ッ ド , 238
SSL
SelectAuthPropertyType
XML, 208
説明 , 205
パ ラ メ ー タ , 206
sendBasicAuthPage() メ ソ ッ ド , 92
sendDynamicForm() メ ソ ッ ド , 100
sendRedirect() メ ソ ッ ド , 92
SendValidatorQuery() メ ソ ッ ド , 137
SendValidator() メ ソ ッ ド , 136
ServletEnvPrint ク ラ ス , 155
ServletFilter ク ラ ス , 90, 91
ServletTransaction ク ラ ス , 91
SetCharacterEncodingFilter ク ラ ス , 220
setPolicy
説明 , 210
パ ラ メ ー タ , 211
setResource
出力パ ラ メ ー タ , 196
説明 , 194
動作 , 195
入力パ ラ メ ー タ , 195
setResources, 197
Setup Tool
Enforcer プ ラ グ イ ン、 設定 , 20, 21, 87
MD SSO, 87
274
使用 さ れ る 証明書 , 87
パ ラ メ ー タ , 94
パ ラ メ ー タ の検索 , 116
プ ロ パテ ィ , 85
SSO, 85, 87
Cookie, 96
Enforcer プ ラ グ イ ン
SSO, 88
nonce, 98, 119
nonce、 SOAP 応答での保護 , 128
nonce、 送信 , 137
startFolderId パ ラ メ ー タ , 226
Struts
概要 , 221
~に よ っ て作成 さ れた HTML, 224
Sun ONE (iPlanet) Enforcer プ ラ グ イ ン、 API を使用す る
, 83
System.Xml ラ イ ブ ラ リ の ク ラ ス , 129
T
TableSorter ク ラ ス , 34
TableUtil ク ラ ス , 34
TYPE 属性 , 38
U
UNIX
.so フ ァ イ ル , 125
CGI アプ リ ケーシ ョ ン と 個別化 , 155
考慮事項 , 124
URL
解析 , 93
ク エ リ デー タ , 113
個別化プ ロ パテ ィ のエ ン コ ー ド , 151, 149, 153
取得 , 85
マ ッ プ , 222
無効な文字 , 95
リ ダ イ レ ク ト , 89, 95, 102, 117
User API
LDIF 標準 , 170
XML、 更新 , 168
エ ン ト リ 、 作成 , 168
概要 , 167
個別化デー タ 、 取得 , 168
属性、 抽出 , 168
パ ス ワ ー ド , 168
ベ ク ト ル、 属性 , 175
UserCacheAttributes ク ラ ス , 168
UserCache ク ラ ス , 51, 70, 75, 167
UserSource ク ラ ス , 51, 69, 70, 75
UserSource コ ン ス ト ラ ク タ , 60
User ク ラ ス , 51, 70
UTF-8 に よ る エ ン コ ー ド , 113
V
validate() メ ソ ッ ド , 243
Validator API
validateScreenData() メ ソ ッ ド , 252
概要 , 45, 46
機能 , 21
ク ラ ス , 50
ユーテ ィ リ テ ィ , 50
validator_util.h ヘ ッ ダー フ ァ イ ル , 56
Validator プ ラ グ イ ン
FileAuthenticator、 例 , 55
イ ン ス ト ール , 53, 55
テ ス ト , 53
Validator プ ラ グ イ ン、 「認証プ ラ グ イ ン」 お よ び 「判
定ポ イ ン ト プ ラ グ イ ン」 を参照
Visual Basic
サーバー変数の表示 , 158
マルチ リ ソ ース の ク エ リ , 163
voidp_func タ イ プ定義 , 57
W
Web Service Enhancement、 「WSE」 を参照
WebTransaction ク ラ ス , 92
Web 管理
カ テ ゴ リ , 222
「フ ォ ーム ベース の管理」 を参照 , 222
Web 管理 イ ン タ ーフ ェ イ ス
概要 , 219
ク ラ ス , 219
デー タ の種類 , 225
Web サーバー、 保護 , 20
Web ブ ラ ウ ザ
Cookie, 85, 88, 94, 102, 116, 119
Cookie、 設定 , 100
リ ダ イ レ ク ト , 88, 89
リ モー ト 管理、 「委任管理」 を参照
winsock, 239
WorkflowPolicy
説明 , 202
パ ラ メ ー タ , 203
WSE Enforcer プ ラ グ イ ン
.Net API、 接続 , 126
.Net Web サービ ス、 作成 , 128
COM ク ラ ス , 129
COM、 使用 , 85
COM、 ラ イ ブ ラ リ の イ ン ポー ト , 129
Cookie, 141
NATIVE_NONCE プ ロ パテ ィ , 131
nonce, 128, 141
nonce、 追加 , 142
275
Policy Validator、 応答 , 136
SOAP, 127
SOAP、 フ ィ ル タ リ ン グ , 141
SOAP ヘ ッ ダー , 141
SOAP メ ッ セージ , 128
XML プ ロ パテ ィ 、 SOAP か ら の抽出 , 131
XML プ ロ パテ ィ 、 組み込み , 140
XML 要求、 作成 , 131
エ ラ ー、 処理 , 143
作成 , 146
初期化 , 130
登録 , 146
名前空間の定数、 定義 , 127
認証 , 126
バージ ョ ン , 37
プ ロ パテ ィ 、 組み込み , 140
プ ロ パテ ィ 、 追加 , 85
プ ロ パテ ィ の抽出 , 33
プ ロ パテ ィ リ ス ト , 64
マルチ リ ソ ース の要求 , 160
要求、 作成 , 85, 131
ルールの格納 , 25
ロ グ エ ン ト リ , 238
ロ グの設定 , 239
XmlQueryInit() メ ソ ッ ド , 96
XmlQuerySend() メ ソ ッ ド , 98
あ
X
X.509 証明書 , 260
XML, 25
enforcer.xml, 85, 110
m_properties, 33
Policy API、 使用 , 160
Select Access での通信 , 26
SOAP, 129
system.xml, 129
XmlElement ク ラ ス , 90
XmlParser ク ラ ス , 51, 108
XmlTreeNode ク ラ ス , 51, 53, 69, 108
エ ン コ ー ド と 通信 , 25
応答 , 64
応答、 生成 , 49
応答の更新 , 54
オブジ ェ ク ト 、 作成 , 113
解析 , 58
ク エ リ , 83
ク ラ ス , 51
更新 , 54
重要性 , 25
設定フ ァ イ ル , 87
設定フ ァ イ ル、 場所の確認 , 85
設定、 ロ ー ド , 35
設定を引数 と し て渡す , 49
操作 , 51
通信 , 45, 46
デー タ ア ク セ ス ク ラ ス , 51
デー タ 、 返す , 86
デー タ 、 更新 , 168
テ ン プ レー ト , 21
ド キ ュ メ ン ト 、 処理 , 86
ド キ ュ メ ン ト ツ リ ーの作成 , 51
276
アーカ イ ブ
JAR フ ァ イ ル、 「JAR フ ァ イ ル」 を参照
ク ラ ス パ ス , 242
コ ン ポーネ ン ト , 40
アーキ テ ク チ ャ
Select Access, 17
XML ベース , 25
プ ラ グ イ ン , 26
アイ コン
Rule Builder の概要 , 32
Rule Builder プ ラ グ イ ン用 , 37
削除 , 43
ポ リ シー マ ト リ ッ ク ス の概要 , 219
ア イ デン テ ィ テ ィ
デー タ の要求 , 54
個別化デー タ , 20
認証 , 84
ロ グ イ ン , 88
ア イ デン テ ィ テ ィ フ ィ ル タ , 22
ア ク セ ス制御
ハン ド ラ , 108
プ ラ グ イ ン、 「認証プ ラ グ イ ン」 を参照
ユーザー、 検証、 「Validator プ ラ グ イ ン」 を参照
ルールの対象、 「ルール」 を参照
値 , 25
返す , 73
キー と ~のマ ッ プ , 168
属性 , 25, 38
属性、 デ コ ーデ ィ ン グ , 42
デ コ ー ド , 152
判定の結果 , 69
評価 , 71
ブール式 , 69
複数の値、 属性 , 249
プ ロ パテ ィ , 34, 51, 90
リ ソ ース , 161
演算子、 比較 , 69, 70
エ ンベ ロ ープ、 SOAP, 143
ア ド レ ス、 IP, 54, 113
お
アプ リ ケーシ ョ ン
カ ス タ マ イ ズ , 150
サーバー、 保護 , 20
オブジ ェ ク ト ク ラ ス
inetOrgPerson, 168
エ ン ト リ , 248
属性 , 247
い
オペレーテ ィ ン グ シ ス テ ム
32 ビ ッ ト 版 DLL, 146
Linux, 126
UNIX、 環境変数 , 155
Windows, 239
プ ラ グ イ ン の登録 , 146
一時ユーザー
新 し いエ ン ト リ 、 作成 , 178
永続的なエ ン ト リ の作成 , 177
エ ン ト リ 、 検索 , 176
作成、 「User API」 を参照
デ ィ レ ク ト リ エ ン ト リ の作成 , 167
委任管理
API、 「Web 管理 イ ン タ ーフ ェ イ ス」 を参照
グループの管理 , 219
属性、 管理 , 219
認証情報 , 219
フ ォ ーム ベース、 「フ ォ ーム ベース の管理」 を参
照
フ ォ ルダの管理 , 219
メ ンバーシ ッ プ、 管理 , 219
色、 使用可能 , 37
イ ン ス ト ール
Select Access, 21
Validator プ ラ グ イ ン , 55
ソ ース コ ー ド と ラ イ ブ ラ リ , 22
プ ラ グ イ ン、 概要 , 40
イ ン タ ーフ ェ イ ス、 「ユーザー イ ン タ ーフ ェ イ ス」 を
参照
う
ウ ィ ザー ド 、 Select Access の設定、 「Setup Tool」 を参
照 , 20
オ ン ラ イ ン ヘルプ , 254
JAR フ ァ イ ル , 169
イ ン ス ト ール , 169
プ ラ グ イ ンへの組み込み , 169, 254
か
解析
URL, 93
XML, 58, 108
XML ド キ ュ メ ン ト , 51
式 , 77
要求 , 220
論理演算子 , 77
隠 し 属性 , 234
軽量管理、 「フ ォ ーム ベース の管理」 を参照
環境
デー タ 、 抽出 , 85
個別化属性、 配置 , 150
サーブ レ ッ ト , 155
変数、 個別化 , 150, 153
変数、 抽出 , 154
変数、 読み取 り , 85
監査 ロ グ , 96
え
英語以外の ク ラ ス , 36
エデ ィ タ
サブジ ェ ク ト 、 「サブジ ェ ク ト エデ ィ タ プ ラ グ イ
ン」 を参照 , 17
設定、 「Configuration Editor」 を参照
エ ン コ ーデ ィ ン グ
UTF-8, 87, 113, 247
個別化 , 149, 151, 153
文字、 設定 , 220
管理
Admin ク ラ ス , 219
委任、 「委任管理」 を参照
サーバー、 Select Access, 169, 254
サーバーの説明 , 181
フ ォーム ベース、 「フ ォ ーム ベース の管理」 を参
照
要求 , 221
ワ ー ク フ ロ ー、 「ワ ー ク フ ロ ー」 を参照
管理、 パ ス ワー ド , 65
277
LogFilter, 238
Logger, 52, 90, 109
OutputFilter, 141
Property, 90
PropertyElement, 51, 69, 90, 108
PropertyListElement, 51, 69, 90, 108
RadiusPanel, 38
RuleComponentPanel, 33
SearchResults, 220
ServletEnvPrint, 155
ServletFilter, 90, 91
ServletTransaction, 91
SetCharacterEncodingFilter, 220
SubjectEditorPluginScreen, 247, 248
TableSorter, 34
TableUtil, 34
Use r , 51, 70
UserCache, 51, 70, 75, 167
UserCacheAttributes, 168
UserSource, 51, 69, 70, 75
WebTransaction, 92
XML, 51
XmlElement, 90
XmlParser, 51, 108
XmlTreeNode, 51, 69, 108
外部 ク ラ ス を呼び出 し てヘルプ ウ ィ ン ド ウ を表示
, 36
属性 , 219
ノ ー ド , 219, 230
ロ グ , 237
き
機能、 「 メ ソ ッ ド 」 を参照
キャ ッシュ
Policy Validator, 42
ユーザー , 51, 54, 69, 75, 150, 167, 168
ユーザー、 一時 , 34
キ ャ ッ シ ュ の更新 , 42
共有オブジ ェ ク ト フ ァ イ ル、 Apache Enforcer プ ラ グ イ
ン の実装 , 125
記録、 メ ッ セージ、 「Logger API」 を参照
く
クエ リ
Policy Validator の応答 , 260
SOAP のプ ロ パテ ィ , 126
SSO, 89
Visual Basic の使用 , 163
簡素化 , 159
構造 , 258
コ マ ン ド ラ イ ン オプシ ョ ン , 263, 266
作成 , 25, 90
承認 , 92, 107
使用例 , 264
処理 , 159
説明 , 257
定義 , 257
目的 , 257
ユーテ ィ リ テ ィ , 261
要素 , 96
理解 , 257
クラス
Admin, 219
AttributeLogic, 69, 75
AuthPlugin, 50, 53
AuthPluginException, 52
CDN, 34
Decider, 50, 53, 72
Enforcer, 90
EnforcerCOMHandle, 129
EnforcerException, 52, 74, 109
EnforcerHandle, 108
Entry, 219, 230
ErrorException, 219
EvaluatorFatal, 52, 74
EvaluatorInternal, 52
EvaluatorNonFatal, 52, 74
FileAuthenticator, 55, 56
HttpServletRequest, 155
InputFilter, 131, 136
LdapConnection, 51, 69, 70
278
ク ラ ス のパ ッ ケージ , 35
ク ラ スパス
Configuration Editor, 35
JAR フ ァ イ ル、 追加 , 35
Java Enforcer プ ラ グ イ ン , 90
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン , 254
ロ グに使用す る 従属アーカ イ ブ , 242
ク リ ーン ア ッ プ ハン ド ラ , 107
グループ
デー タ , 221
メ ンバーシ ッ プ、 取得 , 75
リ モー ト 管理、 「委任管理」 を参照
け
警告 , 32
結果 コ ー ド , 50, 54, 65
言語
VB、 「Visual Basic」 を参照
イ ンデ ッ ク ス , 36
属性 , 168
検索フ ィ ル タ
LDAP, 76
式 , 69
評価 , 70
フ ォ ーム , 226
こ
コー ド
結果 , 50, 54, 65
再起動 , 175
リ タ ーン , 73, 98
コ ー ド ソ ース、 attributelogic の例 , 69
個別化
Personalization API、 「Personalization API」 を参照 ,
149
Policy Builder で有効に設定 , 149
Policy Validator でのサポー ト , 150
Visual Basic、 使用 , 158
環境変数、 抽出 , 154
サポー ト に必要な Select Access の設定 , 21
使用 さ れ る API, 20
属性 , 84
属性、 環境への配置 , 150
属性の共有 , 149
デー タ 、 Enforcer プ ラ グ イ ン の提供
個別化 , 85
デー タ 、 取得 , 168
デー タ 、 リ ソ ース か ら の利用 , 154
認証プ ラ グ イ ン での , 65
認証プ ラ グ イ ン での設定 , 54
プ レ フ ィ ッ ク ス、 使用 , 150
プ ロ パテ ィ リ ス ト , 149
マ ッ ピ ン グ、 反復 , 155
コマン ド
gmake, 82, 126
登録 , 146
コンス ト ラ ク タ
constructValidatorQuery() メ ソ ッ ド , 131
Enforcer プ ラ グ イ ン , 94
FileAuthenticator、 例 , 58, 60
UserSource 親 , 60
Validator プ ラ グ イ ン , 53
サーブ レ ッ ト Enforcer プ ラ グ イ ン , 94
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン , 175
認証プ ラ グ イ ン の例 , 50
判定ポ イ ン ト プ ラ グ イ ンの , 72
ロ グ フ ィ ル タ , 240
コ ンパ イ ル , 82
コ ン ポーネ ン ト
component.jar, 35, 40
component.xml, 37, 38
さ
サーブ レ ッ ト
HTTP ヘ ッ ダー、 表示 , 155
カ ス タ マ イ ズ , 150
フ ォーム ベース管理用 コ ン テナ , 221
サーブ レ ッ ト Enforcer プ ラ グ イ ン , 84
Cookie, 96
Cookie、 作成 , 94
HTTP 応答、 作成 , 91
MD SSO, 95, 102
nonce、 作成 , 98
nonce、 抽出 , 96
Policy Validator の応答、 作成 , 96
Servlet AP、 接続 , 84
SSL パ ラ メ ー タ , 94
URL、 解析 , 93
イ ン ス タ ン ス、 作成 , 93
概要 , 90
ク エ リ 、 作成 , 98
決定、 実行 , 98
個別化 , 151
コ ン ス ト ラ ク タ , 94
承認デー タ 、 抽出 , 94
承認、 必要性の判断 , 95
フ ォーム、 表示 , 100
リ タ ーン コ ー ド , 98
再起動 コ ー ド , 175
サブジ ェ ク ト エデ ィ タ API
GUI、 「サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン」 を参
照
概要 , 247
メ ソ ッ ド 、 概略 , 248
メ ソ ッ ド のオーバー ラ イ ド , 249
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン
Policy Builder、 セ ッ シ ョ ンの終了 , 248
SubjectEditorPluginScreen ク ラ ス , 247, 248
イ ン ス ト ール , 255
イ ン タ ーフ ェ イ ス、 作成 , 249
イ ン タ ーフ ェ イ ス、 終了 , 253
イ ン タ ーフ ェ イ ス、 ロ ー ド , 251
概要 , 247
ク ラ ス パ ス , 254
コ ン ス ト ラ ク タ , 175
作成 , 248
制約 , 248
279
設定 , 247, 248
説明 , 247
属性、 更新 , 253
デー タ 、 確認 , 252
ヘルプ、 表示 , 254
サブルール
追加 , 32
プ ラ グ イ ン , 48
し
式、 検索 , 77
初期化
initialize_query_object() メ ソ ッ ド , 112, 113, 116
init() メ ソ ッ ド , 49, 57, 71, 94, 172, 238
処理
HandleFault() メ ソ ッ ド , 141, 143
handleUserInfo() メ ソ ッ ド , 50, 54, 150, 168, 177
シ ン グル サ イ ン オ ン、 「SSO」 を参照
シ ン グル ソ ケ ッ ト レ イ ヤ、 「SSL」 を参照
す
ス テー ト レ ス プ ロ ト コ ル、 「HTTP」 を参照
式の検索 , 77
識別名、 「DN」 を参照
せ
シ ス テ ム ロ グ , 241, 242
制御ハン ド ラ , 108
終端ポ イ ン ト プ ラ グ イ ン , 48
種類 , 50
使用 , 50
終端ポ イ ン ト 、 ルール、 終端ポ イ ン ト の追加 , 32
セキ ュ リ テ ィ
カ ス タ マ イ ズ , 29
サービ ス、 追加 , 84
ポ リ シー、 「Policy Builder」 を参照 , 18
出力先、 ロ グ , 245
セキ ュ リ テ ィ ポ リ シー、 評価 , 49
取得
getAttributes() メ ソ ッ ド , 179
getAttributesToCopy() メ ソ ッ ド , 175
GetEnforcerCOMHandle() メ ソ ッ ド , 130
getEntry() メ ソ ッ ド , 221
getLightAdmin() メ ソ ッ ド , 221
getNode() メ ソ ッ ド , 221
getResourceAsStream() メ ソ ッ ド , 254
getResource() メ ソ ッ ド , 254
getRetVal() メ ソ ッ ド , 98
getScreenName() メ ソ ッ ド , 250
GetValidatorCookieFromReply() メ ソ ッ ド , 137
getXmlElement() メ ソ ッ ド , 98
セ ッ シ ョ ン タ イ ム ア ウ ト , 85
条件付 き
CONDITION 属性 , 38
ア ク セ ス、 「ルール」 を参照
ルール , 18
ルール、 評価 , 73
承認プ ラ グ イ ン
AuthPluginException ク ラ ス , 52
AuthPlugin ク ラ ス , 50, 53
カ ス タ ム , 29
作成 , 31
種類 , 30
ポ リ シーの作成、 「Policy Builder」 を参照 , 18
ルールのカ ス タ マ イ ズ、 「Rule Builder」 を参照
証明書、 ク エ リ プ ロ パテ ィ , 260
280
設定
CONFIGURATOR 属性 , 38
configure() メ ソ ッ ド , 239, 242
Select Access, 20
設定フ ァ イ ル
config.xml, 42
enforcer.xml, 85, 94, 110
Enforcer プ ラ グ イ ン , 85
httpd.conf, 107
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン , 247, 248
説明
DESCRIPTION 属性 , 38
サブジ ェ ク ト エデ ィ タ , 247
そ
ソ ース コ ー ド
attributelogic の例 , 69
FileAuthenticator プ ラ グ イ ン , 56
サン プル フ ァ イ ル , 22
属性 , 25
attributelogic.h ヘ ッ ダー , 69
attributelogic ク ラ ス , 69, 75
Attribute ク ラ ス , 219
AUTHENTICATOR 属性 , 38
component.xml, 37
component.xml の概要 , 38
CONDITION 属性 , 38
CONFIGURATOR 属性 , 38
DESCRIPTION 属性 , 38
EVALUATOR 属性 , 38
name, 51
NAME 属性 , 38
nxPolicyComponent, 42
nxXml, 42
TYPE 属性 , 38
値のデ コ ー ド , 42
値、 複数 , 249
一時ユーザー、 「一時ユーザー」 を参照
隠 し 要素 , 234
確認 , 75
言語固有 , 168
検索式 , 69
更新 , 253
個別化用、 「個別化」 を参照
抽出 , 168
判定ポ イ ン ト プ ラ グ イ ン、 「判定ポ イ ン ト プ ラ グ
イ ン」 を参照
評価 , 32
複数の値 , 168
ベ ク ト ル , 179
リ モー ト 管理、 「委任管理」 を参照
て
定数
attributelogic の例 , 70
ENFORCER_P13NINFO, 149, 151, 153
Enforcer API, 97
ENFORCER_RESOURCE, 160
MULTIPLERESOURCELIST, 160
名前空間 , 127
ディ レク ト リ
カ ス タ ム コ ン ポーネ ン ト , 40
共有 ラ イ ブ ラ リ , 49, 55
プ リ プ ロ セ ッ サの定義 , 74
た
デ ィ レ ク ト リ サーバー
DN, 34
UserSource、 一覧表示 , 51
XML の格納 , 25
新 し いエ ン ト リ 、 作成 , 178
オブジ ェ ク ト のプ ロ パテ ィ , 42
検索フ ィ ル タ , 76
接続 , 69, 75
設定のエ ン ト リ , 85
設定のプ ロ パテ ィ , 87
属性、 確認 , 75
名前空間 , 51
フ ォーム ベース の管理 , 225
フ ォ ルダ、 リ モー ト 管理 , 219
プ ラ グ イ ン エ ン ト リ のサン プル , 42
プ ラ グ イ ン の削除 , 41
プ ラ グ イ ン の登録 , 57, 71
ユーザー エ ン ト リ の作成 , 167
ダ イ ナ ミ ッ ク リ ン ク ラ イ ブ ラ リ 、 「DLL」 を参照
デ ィ レ ク ト リ 属性、 「属性」 を参照
タ イ ム ア ウ ト , 85
デー タ
HTTP メ ソ ッ ド に よ る 転送 , 26
Policy Validator への送信 , 258
移動 , 225
環境、 抽出 , 85
種類、 管理 , 225
承認、 抽出 , 94
設定 , 110
設定の確認 , 35
ユーザー , 51
属性のデ コ ー ド , 152
属性のベ ク ト ル , 175
ソ ケ ッ ト 接続 , 108
つ
追加
addAuthHint2Response() メ ソ ッ ド , 68
addChannel() メ ソ ッ ド , 240
addFilter() メ ソ ッ ド , 240
addNewUserRecord() メ ソ ッ ド , 177, 178
add_ssl() メ ソ ッ ド , 116
AddValidatorCookieToSoap() メ ソ ッ ド , 142
AddValidatorCookie() メ ソ ッ ド , 141, 142
add() メ ソ ッ ド , 168
appendChildString() メ ソ ッ ド , 113
appendChild() メ ソ ッ ド , 113
appendPropertyValue() メ ソ ッ ド , 97
ツ リ ー、 作成 , 51
デー タ の取得 (GET), 26
デー タ の種類
概要 , 183
共通 , 184
デー タ の送信 (POST), 26
テーブル
null エ ン ト リ , 49
281
エ ラ ー、 処理 , 61
グループ メ ンバーシ ッ プ、 取得 , 75
結果 コ ー ド , 54, 65
個別化 , 65
個別化、 設定 , 54
コ ン ス ト ラ ク タ , 50
作成 , 29, 30, 82
作成、 手順 , 53
デス ト ラ ク タ , 53
登録 , 57
ト レース フ ラ グ , 65
認証ユーザー , 64
パ ス ワー ド 、 管理 , 65
フ ァ イ ル認証の例、 「フ ァ イ ル認証プ ラ グ イ ン」 を
参照
ユーザー、 認証 , 54
ユーザーの確認 , 53
ロ ール メ ンバーシ ッ プ、 取得 , 75
ロ グ イ ン、 開始 , 68
フ ィ ル タ の行 , 77
デジ タ ル証明書、 「証明書」 を参照
デス ト ラ ク タ
Validator プ ラ グ イ ン , 53
認証プ ラ グ イ ン , 64
認証プ ラ グ イ ン の例 , 53
判定ポ イ ン ト プ ラ グ イ ンの , 73
判定ポ イ ン ト プ ラ グ イ ンの イ ン ス タ ン ス , 73
テ ン プ レー ト , 21
テ ン プ レー ト 、 Enforcer プ ラ グ イ ン , 20
と
登録
Apache Enforcer プ ラ グ イ ン , 107
nonce, 98, 119
ト ー ク ン , 88
ド キ ュ メ ン ト ツ リ ー、 作成 , 51
ト グル , 22
ド メ イ ン、 複数~に ま たが る SSO、 「MD SSO」 を参照
ト レース フ ラ グ , 65, 73
な
名前空間
シ ン グル サ イ ン オ ン , 89
定数、 定義 , 127
デ ィ レ ク ト リ サーバー , 51
に
認証、 nonce の使用 , 264, 266
認証情報
管理者 , 219
ユーザー , 53, 85
認証プ ラ グ イ ン
authenticate() メ ソ ッ ド , 50, 53, 64, 65, 67, 175
authplugin.h フ ァ イ ル , 53
AuthPlugin ク ラ ス , 50
FileAuthenticator、 例 , 55
Select Audit への ロ グ イ ン , 60
XML、 応答 , 67
XML、 解析 , 58
XML、 ク ラ ス , 51
XML、 更新 , 54
一時ユーザー、 作成、 「一時ユーザー」 を参照
イ ン ス タ ン ス、 作成 , 58
イ ン ス タ ン ス、 破棄 , 64
282
は
配列、 ロ グ フ ィ ル タ , 243
パ ス ワー ド
LDIF、 標準に適合 , 170
エ ラ ー処理 , 217
管理 , 65
処理 , 85
抽出 , 168
変更 , 215
ユーザーの照合 , 175
ユーザー パ ス ワー ド の変更 , 215
パラ メ ータ
HttpServletRequest, 219
HttpServletResponse, 219
includeSubFolders, 226
mainFrame, 250
SSL, 85, 94, 116
startFolderId, 226
応答 , 119
キー , 168
記録 , 239
コ ン ス ト ラ ク タ , 72
サーブ レ ッ ト , 155
サーブ レ ッ ト の動作 , 223
サブジ ェ ク ト エデ ィ タ プ ラ グ イ ン , 251
認証プ ラ グ イ ン , 64
文字列 , 221
判定ポ イ ン ト プ ラ グ イ ン , 32
attributelogic ソ ース , 69
attributelogic の例 , 68
decider.h フ ァ イ ル , 53
decider ク ラ ス , 50
decide() メ ソ ッ ド , 54
XML、 ク ラ ス , 51
XML、 更新 , 54
イ ン ス タ ン ス、 作成 , 71
ク ラ ス の例外 , 52
結果 コ ー ド , 54
コ ン ス ト ラ ク タ , 72
作成、 手順 , 53
種類 , 48
初期化 , 71
処理 , 49
デ ィ レ ク ト リ サーバー 接続 , 69
デス ト ラ ク タ , 73
登録 , 71
ト レース フ ラ グ , 73
評価 , 73
ポ リ シーの確認 , 54
リ タ ーン コ ー ド , 73
例外 , 70, 74
ハン ド ラ
ア ク セ ス制御 , 108
ク リ ーン ア ッ プ , 107
ひ
比較演算子 , 69, 70
引数
XmlTreeNode, 53
受け渡 し , 49
評価
evaluate() メ ソ ッ ド , 75
evaluateExpressionUsingLdap() メ ソ ッ ド , 75
evaluateUserSearchFilter() メ ソ ッ ド , 76
evaluateUsingLdap() メ ソ ッ ド , 75, 76
EvaluatorFatal ク ラ ス , 52, 74
evaluator.h ヘ ッ ダー フ ァ イ ル , 70
EvaluatorInternal ク ラ ス , 52
EvaluatorNonFatal ク ラ ス , 52, 74
エバ リ ュ エー タ 、 「判定ポ イ ン ト プ ラ グ イ ン」 を
参照
標準、 Select Access, 17
ふ
フ ァ イ ル認証プ ラ グ イ ン
LDIF 標準 , 170
User API、 使用 , 168
新 し いエ ン ト リ 、 作成 , 178
イ ン ス ト ール , 169
永続的なユーザー エ ン ト リ 、 作成 , 177
エ ン ト リ のマ ッ プ , 172
再起動 コ ー ド , 175
設定 , 169
属性、 取得 , 179
パ ス ワー ド の照合 , 175
プ ロ セ ス , 172
ベ ク ト ル、 属性 , 179
マ ッ プ、 ユーザー エ ン ト リ , 175
ファク ト リ
FactoryFunc() メ ソ ッ ド , 238, 240
factory() メ ソ ッ ド , 49, 53, 57, 58, 71, 172
フ ィ ルタ
プ ラ グ イ ン , 48
ルール , 32
ブー ト ス ト ラ ッ プの設定 , 87
ブール、 「検索」 を参照
フ ェールオーバー , 85
フ ォーム
ロ グ イ ン , 55
フ ォーマ ッ ト
formatSimpleTableForModify(), 234
formatSimpleTableForModify() メ ソ ッ ド , 231
単純 リ ス ト , 229
フ ォーム
JSP ページの リ ス ト , 222
ア ク セ ス拒否ページ , 108
エ ラ ー ページ , 92
処理 , 85
チ ャ レ ン ジ , 55, 60, 108
デー タ の保存 , 118
入力ス ト リ ーム と し て使用 , 113
ロ グ イ ン , 60, 83, 88, 92, 108, 113, 117
ロ グ イ ン の開始 , 68
ロ グ イ ン、 表示 , 100
フ ォーム に記録 , 117
フ ォーム ベース の管理
DN の リ ン ク , 230
HTML、 作成 , 221
JSP ページ , 221, 222
URL, 224
サーブ レ ッ ト , 224
サーブ レ ッ ト 展開 , 221
属性、 隠 し 要素 , 234
デ ィ レ ク ト リ の検索 , 226
283
ENFORCER_ACTION, 74
ENFORCER_ACTION_ALLOW, 74
ENFORCER_ACTION_DENY, 74
ENFORCER_SERVICE, 160
HttpRequest, 131
NATIVE_NONCE, 131
Policy API の使用 , 160
XML、 組み込み , 140
個別化、 専用の リ ス ト , 149
デ ィ レ ク ト リ オブジ ェ ク ト , 42
デー タ の確認 , 35
要素 , 34
要素の リ ス ト , 34
リ ス ト , 34
デー タ , 225, 230, 234
動的な HTML の作成 , 224
メ ニ ュ ー , 224
フ ォ ルダ
デー タ , 221
リ モー ト 管理、 「委任管理」 を参照
複数 ド メ イ ン シ ン グル サ イ ン オ ン、 「MD SSO」 を参
照
ブ ラ ウ ザ、 「Web ブ ラ ウ ザ」 を参照
フラグ
m_useLdap, 75
ト レース , 65, 73
プラグイン
FileAuthenticator ソ ース , 56
Rule Builder の種類 , 38
Select Access のカ ス タ マ イ ズ , 19
XML 設定の抽出 , 33
ア イ コ ン の作成 , 37
イ ン ス ト ール , 40
概略 , 17
サブジ ェ ク ト エデ ィ タ 、 「サブジ ェ ク ト エデ ィ タ
プ ラ グ イ ン」 を参照
サブルール , 48
終端 , 48
承認、 「承認プ ラ グ イ ン」 を参照
認証、 「認証プ ラ グ イ ン」 を参照
フ ィ ル タ , 48
ロ ー ド , 40
ロ グ、 統合 , 237
文書型定義、 「DTD」 を参照
へ
ベ ク ト ル、 属性 , 175
プ ラ グ イ ンのア ン イ ン ス ト ール , 41
ヘ ッ ダー フ ァ イ ル
attributelogic.h, 69
Authplugin.h, 53, 52
decider.h, 53
Decider.h, 69
enforcer.h, 74, 67
enforcer_sys.h, 109
evaluator.h, 70
enforcer_sys.h, 52
LogFile.h, 239
Logger.h, 239
LogStderr.h, 239
LogSystem.h, 239
mod_enforcer.h, 125
validator_util.h, 56
プ ラ グ イ ンの削除 , 41
ヘルパ API, 215
プ ラ グ イ ンの ロ ー ド 、 「プ ラ グ イ ン」 を参照
ヘルプ
helpClicked() メ ソ ッ ド , 36
イ ン ス ト ール , 169
パ ッ ケージ , 254
表示 , 254
プ ラ グ イ ンのア ッ プ ロ ー ド 、 「プ ラ グ イ ン」 を参照
プ ラ ッ ト フ ォ ーム
UNIX, 124
Windows、 追加要件 , 110
固有の ロ グ メ ソ ッ ド , 239
フ ァ イ ル拡張子 , 53
複数の~のサポー ト , 109
プ リ プ ロ セ ッ サの定義 , 74
プ レ フ ィ ッ ク ス、 個別化 , 150
プ ロ セ ス、 終了 , 124
プロ ト コル
HTTP、 「HTTP」 を参照
フ ィ ル タ , 22
プ ロ パテ ィ
component.xml フ ァ イ ル , 37
284
変数
環境、 個別化 , 150, 153
環境、 抽出 , 154
環境、 読み取 り , 85
セ ッ シ ョ ン、 HTTP, 234
ロ グ , 241
ほ
保存
saveScreenData() メ ソ ッ ド , 252, 253
ボタン
Delete Value, 249
OK, 33, 35, 171, 248
ア ッ プ ロ ー ド , 169
作成 , 35
参照 , 169
処理 , 35
設定 , 87
取消 , 33, 35, 36, 248
ヘルプ , 33, 35, 36, 248
ラ ジオ , 31, 38, 170
ポ リ シー
説明 , 200
パ ラ メ ー タ , 200
評価 , 49
ポ リ シー固有の API, 198
ポ リ シー ス ト ア、 「デ ィ レ ク ト リ サーバー」 を参照
ポ リ シー プ ラ グ イ ン、 「Policy Builder、 プ ラ グ イ ン」
を参照
ま
マ ク ロ 、 文字列の操作 , 52, 109
マ ッ ピ ン グの反復 , 155
マップ
URL, 222
反復 , 155
ユーザー エ ン ト リ , 172
む
無効な文字 , 111
め
メソッド
add(), 168
addAuthHint2Response(), 68
addChannel(), 240
addFilter(), 240
addNewUserRecord(), 177, 178
AddValidatorCookie(), 141, 142
AddValidatorCookieToSoap(), 142
allowedByValidator(), 98
ap_table_do(), 116
appendChild(), 113
appendChildString(), 113
appendPropertyValue(), 97
authenticate(), 50, 53, 64, 65, 67, 175
closeScreen(), 253
configure(), 239, 242
constructValidatorQuery(), 131
CreateFileLogger(), 238, 240
createScreen(), 250
decide(), 50, 53, 54, 73
displayMessageBox(), 250
doFilter(), 91
enforcer_check(), 111
EnforcerAddEncoded(), 113
EnforcerAddFormData(), 113
EnforcerAddQueryData(), 113
EnforcerAddrsQueryInit(), 113
enforcer_check(), 112, 119
EnforcerInit, 108
EnforcerQuerySend(), 119
EnforcerSocketInit(), 239
evaluate(), 75
evaluateExpressionUsingLdap(), 75
evaluteUserSearchFilter(), 76
evaluateUsingLdap(), 75, 76
factory(), 49, 53, 57, 58, 71, 172
FactoryFunc(), 238, 240
formatSimpleTableForModify(), 231, 234
getAttributes(), 179
getAttributesToCopy(), 175
GetEnforcerCOMHandle(), 130
getEntry(), 221
getLightAdmin(), 221
getNode(), 221
getResource(), 254
getResourceAsStream(), 254
getRetVal(), 98
getScreenName(), 250
GetValidatorCookieFromReply(), 137
getXmlElement(), 98
HandleFault(), 141, 143
handleUserInfo(), 50, 54, 150, 168, 177
init, 53
init(), 49, 57, 71, 91, 94, 172, 238, 240
initialize_query_object(), 112, 113, 116
isAuthorized(), 102, 91, 95
isUserInLdap(), 176
loadScreenData(), 251
log(), 239, 241
LogFilter(), 240
logout(), 221
modifyEntry(), 234
openScreen(), 251
ProcessMessage(), 127, 131, 141, 136
processRequest(), 67
runTests(), 245
saveScreenData(), 252, 253
sCreateTemporary(), 168, 178
searchTree(), 226
sendBasicAuthPage(), 92
sendDynamicForm(), 100
sendRedirect(), 92
285
SendValidator(), 136
SendValidatorQuery(), 137
setDestination(), 240
setFieldValues(), 252
setFilter(), 238
SetWSPolicy(), 140
showHelp(), 254
showSubjects(), 226
sLocateByUID(), 176
validate(), 243
validateScreenData(), 252
XmlQueryInit, 96
XmlQuerySend(), 98
カ ス タ マ イ ズ , 19
追加 , 116
ヘルパー、 MD SSO, 103
メ ッ セージ
ロ グ、 書 き 込み , 245
ロ グ、 レベル , 237
メ ニ ュ ー、 表示 , 224
メ モ リ ユーテ ィ リ テ ィ , 52
メ ンバーシ ッ プ
管理 , 219
管理者 , 219
管理用ページ , 222
グループ情報 , 51, 76, 81
グループ、 リ モー ト 管理、 「委任管理」 を参照
比較 , 69
ロ ール情報 , 51, 54, 81
も
文字、 無効 , 95, 111
文字列
decider_branch_path, 73
DN のパ ラ メ ー タ , 221
文字列の操作 , 52, 109
文字列ユーテ ィ リ テ ィ , 52
ゆ
有効期限、 パ ス ワー ド , 65
ユーザー
一時~、 「一時ユーザー」 を参照
デー タ , 221
ユーザー イ ン タ ーフ ェ イ ス
「Configuration Editor」 を参照
Select Access のカ ス タ マ イ ズ , 30
ユーザー エ ン ト リ 、 合成 , 34
286
ユーザー キ ャ ッ シ ュ , 75
ユーザー デー タ 、 分散 , 51
ユーザー認証情報
取得 , 53
ロ グ イ ン , 117
ユーザー ロ ール , 69
ユーテ ィ リ テ ィ
C/C++, 108
メ モ リ , 52
文字列 , 52
よ
要求、 ユーザー , 54
ら
ラ イブラ リ
以前の リ リ ース か ら の移行 , 22
共有 , 71
種類、 「API」 を参照 , 20
ラ イ ブ ラ リ の移行 , 22
り
リ ソ ース
.NET 「WSE Enforcer プ ラ グ イ ン」 を参照
URL、 取得 , 85
解放 , 108
個別化デー タ 、 ア ク セ ス , 154
デス ト ラ ク タ を使用 し て~を解放 , 73
複数、 Visual Basic, 163
複数、 ク エ リ , 160
プ ラ グ イ ン での保護 , 29
マルチ リ ソ ースへの ク エ リ , 159
要求、 受け取 り , 83
リ ソ ース固有の API, 191
リ ソ ース パ ス
ア イ デン テ ィ テ ィ 管理 , 186
管理 , 185
機能管理 , 186
ス キーマ管理 , 186
ネ ッ ト ワ ー ク , 185
ネ ッ ト ワ ー ク 管理 , 185
リ タ ーン コ ー ド , 73, 98
リ ダ イ レ ク ト , 32
る
ロ グ イ ン フ ォ ーム、 表示 , 100
ルール
XML の使用 , 25
概要 , 32
カ ス タ マ イ ズ , 31
サブルールの追加 , 32
種類 , 32, 48
条件付 き , 18
説明 , 201
パ ラ メ ー タ , 202
判定ポ イ ン ト の追加 , 32
評価 , 73
フ ィ ル タ の作成 , 32
ロ グ フ ィ ル タ 、 初期化 , 240
わ
ワーク フ ロー
管理、 「Web 管理 イ ン タ ーフ ェ イ ス」 を参照
デー タ 、 Web 管理 イ ン タ ーフ ェ イ ス に よ る 取得 ,
221
要求、 送信お よ び承認 , 219
れ
例外
Policy Validator での ス ロ ー , 75
処理 , 52
レ コ ー ド 「ユーザー」、 「エ ン ト リ 」 を参照
ろ
ロ ール
ア イ コ ン , 219
検索 , 226
情報 , 51, 70
デー タ , 221
メ ンバーシ ッ プ、 取得 , 75
ユーザー , 69
ログ
XML 設定 , 239
アプ リ ケーシ ョ ン と の統合、 「Logger API」 を参照
監査 , 96
最大サ イ ズ , 240
シ ス テ ム ロ グ , 241
重要度レベル , 237
出力先 , 237, 245
セキ ュ リ テ ィ で保護 さ れた リ モー ト , 84
設定、 確認 , 243
チ ャ ネル , 237
フ ァ イ ル、 ロ グ , 240
フ ィ ル タ , 48, 238
フ ィ ル タ 、 作成 , 237
フ ィ ル タ の配列 , 243
変数 , 241
レベル , 52
ロ グ ア ウ ト , 32
ロ グ イ ン、 Enforcer プ ラ グ イ ン プ ロ ト コ ル , 88
287
288