概要
Cognosを全く知らないけど、Javaを書けるというだけで、突然Cognosのカスタム認証プロバイダーの開発をやる事になってしまう方が良くいらっしゃいます。
カスタム認証プロバイダーとは、Cognos SDKのJavaでコーディングして、Cognosの認証・認可の機能自体を作ってしまうという話です。
通常Cognosでは、認証・認可のユーザー情報はLDAPに存在するものを利用しますが、LDAPを持っていないなど、なんらかの理由でユーザー情報をデータベースのテーブルに保持して、認証・認可を行いたい時などにカスタム認証プロバイダー(CJAP)は登場します。
このパターンで開発を行う場合、一から全てコードを書くという事はほぼ無く、JDBCSampleという、Cognos SDKのCJAPサンプルを元に開発するのが常です。
さて、そのJDBCSampleというのものを読み解く事から開発が始まりますが、Cognosを知らん人にはとってもわかりにくいと思いますので、読み取りポイントを投稿しておきたいと思います。
カスタム認証プロバイダー(JDBCSample)の構成
まず、Cognos SDKというモジュールをインストールする必要がありますが、インストールすると、以下のディレクトリにJDBCSampleが配置されます。
C:\Program Files\ibm\cognos\c10_64\sdk\java\AuthenticationProvider\JDBCSample
この中に、dbInit_db2.sql という、DB2用のテーブル作成DDLがあるので、これを流すと、ユーザー・グループ情報を保持するサンプル用のテーブルが作成できます。
同フォルダ上のbuild.batで、ビルドをするとCAM_AAA_JDBCSample.jarができあがるので、これを以下のフォルダに配置します。
C:\Program Files\ibm\cognos\c10_64\webapps\p2pd\WEB-INF\lib
※他にも諸々手順ありますが、詳細は以下のリンクを参照してください。
http://qiita.com/shinyama/items/1f9c7842a3966233a5d7
そしてCognos Configurationの認証でカスタムJavaプロバイダーのネームスペースを作成し、Javaクラス名に RestorableJDBCSample を指定すると、このクラスがメインクラスとして、認証時に呼び出されます。
さて、ようやく本題ですが、このRestorableJDBCSampleクラスの読み解きが肝ですので、以降に記載します。
RestorableJDBCSampleクラス
RestorableJDBCSampleクラスのソースは、以下にありますので開いてみましょう。
C:\Program Files\ibm\cognos\c10_64\sdk\java\AuthenticationProvider\JDBCSample\RestorableJDBCSample.java
initメソッド
まず簡単なところから、222行目からの init メソッドです。
これはサービスなどから、Cognosプロセスを起動したタイミングで読み込まれるメソッドです。
logoffメソッド
次も簡単な、113行目からのlogoffメソッドです。
Cognosにログインすると、こんなポータル画面(Cognos Connection)になるのですが、赤枠にある「ログオフ」という文字をクリックして、文字通りCognosからログオフする時に呼ばれるメソッドです。
logonメソッド
さて、次の54行目から始まるlogonメソッドが肝です。
当然ながらCognosにログインする時に呼ばれるメソッドですが、ソースを見ていると赤〇で示した、①getTrustedCredentialValues、②getCredentialValues、③getFormFieldValues、④getTrustedEnvironmentVaribleValue、って何でしょう、という話になります。
①getTrustedCredentialValuesとは
Cognosには、レポートを定期的に実行して、PDFに保存するとかする、スケジュールの機能があります。
こういう各レポートのエントリーの横にある、赤枠のアイコンでスケジュールを設定できます。
アイコンをクリックすると、以下のような画面になり、いつ・どういう形式でレポートを実行するかなど、設定ができます。
この設定を行うと、設定時刻になるとレポートが実行されるわけですが、レポート実行は誰のユーザーIDで行われるかというと、スケジュールを設定したユーザーのIDで、この設定時刻のレポート実行のタイミングで、実はこのユーザーIDで認証が走るイメージです。
スケジュール設定をした時にユーザー情報は保持されているのですが、それを呼び出して受け取るのが、このgetTrustedCredentialValuesになります。
②getCredentialValuesとは
こちらは、Cognos SDKでなんらかCognosを操作するためのプログラムを作成し、プログラムを外部から実行する時に、Cognosのアクセス時に認証を行う際に呼び出されます。
Cognos SDKの外部呼出しのプログラムなんて作ってないよ、という話であれば無視です。
③getFormFieldValuesとは
外部のWebページとか、Cognos Mashup ServiceからCognosにアクセスする際に、入力されたユーザーIDとパスワードを受け取る機能です。
④getTrustedEnvironmentVaribleValue
CognosでSSO(Single Sign On)を行う時には、基本的にHTTP Headerの環境変数に組み込まれたユーザーID情報を元にSSOを行いますが、こちらはカスタム認証でHTTP Headerの環境変数を受け取り、SSOを行うためのものです。
というあたりを覚えておくと、logonメソッドの読み取りが非常に楽になります。
searchメソッド
最後に、134行目から始まるsearchメソッドです。
Cognosで、権限付与などの認可の行為を行う時に、あるグループにユーザーを所属させたりとか、認証ソース上のユーザーを検索する事を行います。
こんな感じのCognos Administrationという管理画面で、「作成者」というグループにメンバーを登録しようとしています。赤枠の追加を押します。
するとこんな感じに認証ソース(Restorable)中のユーザー情報が参照できます。
右上の方に、もっと細かく条件指定してユーザーを検索する、「入力」「検索」という機能がありますが、これらの機能を実装するのもsearchメソッドの役割です。
ざっとですが、以上です。
実際のCognosの画面上の機能と、ソースコードの記載のマッピングを理解しないと開発は始められないので、カスタム開発の最初の一歩のお役に立てればと思います。