概要
Cognos Analytics SDKをインストールすると、以下のフォルダに、SDKのカスタム認証用のサンプルが導入されます。
/opt/ibm/cognos/sdk/sdk/java/AuthenticationProvider
JDBCSampleは、以下を含め色々投稿しているので探してみて下さい。
Cognos SDK でカスタム認証プロバイダーを開発する時に参考になるJDBCSampleの説明
https://qiita.com/shinyama/items/33b6349916380b8fe960
それ以外のサンプル。すなわち以下の5点について、何に使うのだろう、というのを少し読み解きましたので、共有しておきたいと思います。
※恐らく自分も3日後には忘れそうなので、ある意味自分へのメモも兼ねてw
TrustedSignonSample
TrustedSignonReplaceSample
TrustedSignonMappingSample
MultiTenancyTenantProviderSample
MultiTenancyBoundingSetProviderSample
※ちなみに、マニュアルのこちらに一応記載があるのですが、読んでも全然わかりません。
https://www.ibm.com/support/knowledgecenter/en/SSEP7J_11.1.0/com.ibm.swg.ba.cognos.ca_dg_auth.doc/c_dg_auth_customauthenticationprovidersampleprograms.html
TrustedSignonSample
SSO S/Wとの連携で使う事が多いと思いますが、SSOポータルで認証後に、認証情報がクッキーに入ってCognosに投げられて来た時に、クッキーからユーザーIDを取り出し、HTTP Header変数にユーザーIDを入れて、認証ネームスペースに転送するような役割です。
転送先の認証ネームスペースは、LDAPで外部IDマッピングで受けても、JDBCSampleのようなカスタム認証で受けても、どちらでもSSOを成立させる事が可能です。
これは何度か実際のプロジェクトで使用した事がありますので、使用頻度はまあまあ有ります。詳細はこちらをご参照下さい。
Cognos SSO認証でCookieを使用するサンプル
https://qiita.com/shinyama/items/c7e9088e725b268102f1
TrustedSignonReplaceSample
基本的にCognosのSSOは、SSO SW側でHTTP Header変数に埋め込まれたユーザーIDを、LDAPでは外部IDマッピングで、JDBCSampleのようなカスタム認証ではjavaソースの中でHeader変数を読み取り、認証ソースにそのユーザーIDが存在するかを確認しSSOを成立させます。
しかしながら、SSO SW側のログイン時にユーザーIDのフォームに「ComputerName\Username」みたいに、\マーク(円マーク)を挟んでコンピューター名とユーザー名を入れてログインしてきた場合、Header変数に「ComputerName\Username」が埋め込まれてくると、Cognosが受け取って認証ソースのユーザーIDと一致させようとした時に、「ComputerName\」が邪魔をして、一致せずSSO認証エラーになったりします。
これを避けるために、この「TrustedSignonReplaceSample」があります。
TrustedSignonReplaceSampleクラスの中で、「ComputerName\Username」を「\」で区切って分割し、「Username」だけを取り出して再度Header変数に「Username」を入れて、認証ネームスペースに転送し、SSOを成立させる事ができます。
TrustedSignonMappingSample
前述の「TrustedSignonReplaceSample」のドメイン名に対処する版です。
SSO SW側で「Username@DomainName」でログインし、このままCognosに転送されて来た時に、「@DomainName」を外して「Username」を取り出してSSOを成立させるサンプルです。
MultiTenancyTenantProviderSample
まず、マルチテナントに関してご存じ無い方は、こちらの記事をご参照下さい。
Cognos Analyticsでのマルチテナントの設定
https://qiita.com/shinyama/items/683e38fc9826295ce0de
マルチテナントを簡単に言うと、LDAPに登録されているユーザーの「属性」を元に、Cognosコンテンツへのアクセス権限を制御できる機能、という感じです。
「属性」とは、「組織」とか「職位」とかを想像頂ければ、分かり易いかと思います。
この「MultiTenancyTenantProviderSample」は、そういう有効そうな「属性」がユーザー情報に持っていない場合でも、このMultiTenancyTenantProviderSampleクラスが読み込む「usersToTenants.properties」ファイルに、ユーザーIDとテナントIDのマッピングを記載しておく事で、テナントを分ける事ができます。
サンプルで提供されている、usersToTenants.propertiesファイルの内容は以下になります。
jkunze=TenantA
emichel=TenantA
eguimaraes=TenantB
ckim=TenantB
jolsen=TenantC
MultiTenancyBoundingSetProviderSample
このサンプルは、「MultiTenancyTenantProviderSample」の補助を行うもので、具体的には先のマルチテナントの記事の中で、さらに別の属性「departmentNumber」をテナントマッピングに使う件が出てきますが、それと同様に「ユーザーによってはメインのテナントだけでなく、別のテナントにも併せて参加したい」場合に、このサンプルを使用します。
提供されている、「usersToBoundingSets.properties」ファイルの内容を見ればイメージできるかと思いますが、eguimaraesさんは、以下のマッピングなので、先ほどのTenantBだけでなく、TeantAやTenantCにも参加している事になります。
jkunze=TenantA
emichel=TenantA
eguimaraes=TenantB,TeantA,TenantC
ckim=TenantB
jolsen=TenantC,TenantA
aaldridg=TenantA, TeanatB
twise=TenantB
以上です。
ちらっとでも見て覚えておけば、どこかで役に立つかもしれません。