概要
Yellowfinの管理サービスは、基本的にすべてのサードパーティ製認証プロセスをYellowfinに統合することができます。主に、認証ブリッジは、Yellowfinをスタンドアロンアプリケーション、または完全統合アプリケーションとして実装する場合に使用されますが、サードパーティ製プロセスを統合する場合は、カスタムブリッジを作成しなくてはいけません。このブリッジは、サードパーティ製ソースからのユーザーログイン情報と、Yellowfinシステム内のユーザー情報を一致させます。通常、認証ソースはユーザー名を提供しますが、ユーザーを認証するために、パスワードやその他のユーザー属性情報が送信されることもあります。
既存のYellowfinユーザーとの一致が確認されると、ブリッジはシングルサインオンを実行することで、ユーザーをYellowfinにログインさせます。これは、LOGINUSER webサービス(ユーザーログインにパスワードを要求します)、またはLOGINUSERNOPASSWORDサービス(ユーザー名のみでユーザーのログインを実行する)のいずれかを使用して実行することができます。サードパーティ製ソースからパスワードを利用できることは極めて低いため、これは理想的な方法です。
ブリッジを、ユーザーのんログイン可否の判定に使用する必要はありません。ブリッジがユーザー名を受信する、ということは、対象のユーザー既に有効であることを意味します。しかし、サードパーティ製ソースに、ユーザーの認証状況を確認しなくてはいけない場合もあります。
ユーザーがYellowfinに存在しない場合は、ユーザーの自動作成を設定しなくてはいけない場合もあります。これには、サードパーティ製アプリケーションから取得する必要のある、電子メールアドレスや、ユーザーの姓名など、追加情報が必要になることもあります。ブリッジは、GETUSER、またはVALIDATEUSER webサービス関数を使用することで、ユーザーがYellowfinに存在するかを確認することができ、存在しない場合は、ADDUSER webサービスを呼び出すことで、ユーザーを作成します。複数のユーザーを一度に作成する場合は、ADDUSERS webサービス関数を呼び出します。
ブリッジプロセスの一部は、ログインプロセスの一環として、ユーザーのYellowfinロールやグループメンバーシップを変更することができます。Yellowfinが、異なるコンテンツのアクセスが変更される可能性のある製品と統合されている場合、ログインプロセス中にグループメンバーシップを更新するように要求される可能性もあります。これには、ユーザーをどのグループに追加、または削除する必要があるのかを確認するために、サードパーティ製ソースからの情報が必要になります。UPDATEUSER webサービスの呼び出しは、ユーザーロールの変更に、INCLUDEUSERINGROUP、またはEXCLUDEUSERFROMGROUPの呼び出しは、ユーザーがアクセスできるYellwfinのコンテンツを決定するグループへの追加、削除のために使用されます。
ブリッジは、様々な方法で実装することができます。以下はその一例です。
Yellowfinの一部として統合する(Yellowfinウェブアプリケーション内のJSP、サーブレット、フィルターとして)
サードパーティ製ソースとYellowfinと通信をする、スタンドアロンアプリケーションとして統合する(GUI、コンソール、またはウェブアプリケーション)
サービパーティ製アプリケーションの一部として統合する
ブリッジの最適な実装場所は、環境と含まれるコンポーネントに応じて異なります。
Yellowfinのコンテナ内に実装する場合、様々な実装方法が、異なる機能が取り込まれることを可能にします。JSPとサーブレットは、ユーザーが特定のURLに誘導されるようにコードを実装することができますが、フィルターはYellowfinシステムから要求された任意のURLの認証を確認します。
こちらは、Yellowfinの認証ブリッジに必要となる基礎的なプロセスです。
cookie、ファイル、またはネットワーク接続を介して、詳細を取得する。
ユーザーが既に存在しているかどうかを確認する。
提供された詳細情報を使用して、ユーザーを作成する。
必要に応じて、ユーザーの詳細情報を更新する(ロールやグループ、など)
ユーザーをログインさせるために、SSOの呼び出しを実行する。
注意:認証プロバイダーがSAMLをサポートする場合は、Yellowfin SAMLブリッジを使用して、SSOを実行することもできます。
シングルサインオン関数
こちらのサービスは、Yellowfinに接続し、指定されたユーザーのログオントークンを取得します。ユーザーは、ユーザーID(ログオンID方法に応じて、電子メールアドレス、または他のタイプのIDになります)を使用して指定されます。このトークンがYellowfinのログオンURLとともに渡されると、認証されたユーザーのログイン画面を無効にし、即座にセッションが開始されます。 リクエスト要素LOGINUSER関数は、指定されたユーザーのYellowfinへのシングルサインオンを実行します。以下の要素は、こちらのリクエストとともに渡されます。 注意:AdministrationPersonオブジェクトのコンテンツは、ログインするユーザーを定義するために使用されます。 リクエスト要素 | データ型 | 説明 | LoginId | String | Yellowfin Webサービスの管理者ユーザーIDです。これは、ログインIDの方法に応じて、ユーザーID、または電子メールアドレスになります。 このYellowfinアカウントは、「Yellowfin Webサービス使用権」が有効化されたロールを持ち、デフォルト(プライマリー)組織に所属していなくてはいけません。 | Password | String | 上記アカウントのパスワードです。 | OrgId | Integer | Yellowfin内のデフォルト(プライマリー)組織IDです。常に、「1」に設定します。 | Function | String | Webサービス関数です。こちらは、「LOGUINUSER」に設定します。 | Person | AdministrationPerson | ログインするユーザーの詳細を含むAdministrationPersonオブジェクトです。注意:以下の表を参照してください。 | OrgRef | String | クライアント組織内部参照IDです(こちらの設定はオプションです)。こちらは、参照されるクライアント組織に新規ユーザーを作成します。こちらを設定しない場合、ログイン先のクライアント組織を選択するために、ユーザーにクライアント組織選択ページが表示されます。 |
以下は、こちらの関数のために、「AdministrationPerson」オブジェクトに設定しなくてはいけない主要なパラメーターです。 AdministrationPerson 要素 | データ型 | 説明 | UserId | String | ログインするユーザーのユーザーIDです。これは、ログインIDの方法に応じて、ユーザーID、または電子メールアドレスになります。 | Password | String | 新規ユーザーのパスワードです。 |
以下のSOAPの例は、この呼び出しに渡すことのできるパラメーターを表示しています。 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservices.web.mi.hof.com/">
<soapenv:Header/>
<soapenv:Body>
<web:remoteAdministrationCall>
<arg0>
<loginId>admin@yellowfin.com.au</loginId>
<password>test</password>
<orgId>1</orgId>
<function>LOGINUSER</function>
<person>
<userId>admin@yellowfin.com.au</userId>
<password>test</password>
</person>
</arg0>
</web:remoteAdministrationCall>
</soapenv:Body>
</soapenv:Envelope> |
応答要素返される応答には、これらのパラメーターが含まれます。 応答要素 | データ型 | 説明 | StatusCode | String | Webサービス呼び出しのステータスです。値の選択肢は、以下の通りです。 | LoginSessionId | String | 一意のログイントークンです。こちらのトークンは、ユーザーをYellowfinへ直接誘導するために、ログインURLへ付加されます。 |
サービスは、今回のSOAPの例に基づき、以下の応答を返します。 <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:remoteAdministrationCallResponse xmlns:ns2="http://webservices.web.mi.hof.com/">
<return>
<errorCode>0</errorCode>
<loginSessionId>689bce5624f1e5a312eb5ef7801ed9fc</loginSessionId>
<messages>Successfully Authenticated User: admin@yellowfin.com.au</messages>
<messages>Web Service Request Complete</messages>
<sessionId>c8021e27fcc2ce507ff17ec1846919a5</sessionId>
<statusCode>SUCCESS</statusCode>
</return>
</ns2:remoteAdministrationCallResponse>
</S:Body>
</S:Envelope> |
手順Javaの例を使用して、こちらの呼び出しを実行するための詳細な手順は、以下を参照してください。 ユーザーが複数のクライアント組織に所属する場合、特定の組織を指定してログインさせることができます。例:
この場合「org1」はクライアント組織参照IDです。この参照IDが提供されない場合、ユーザーはログインをするために、クライアント組織選択ページに誘導されます。 ユーザーアカウントがYellowfinに存在しない場合、web
ap.setUserId("john.smith@yellowfin.com.au"); // if Yellowfin authentication option is set to "email address"
ap.setFirstName("John");
ap.setLastName("Smith");
ap.setRoleCode("YFREPORTCONSUMER"); // Yellowfin role codes can be found performing this query against
// Yellowfin configuration database: SELECT * FROM OrgRole
ap.setPassword("test"); // Password must comply with your Yellowfin password policy
ap.setEmailAddress("john.smith@yellowfin.com.au"); |
AdministrationPersonオブジェクトのその他のパラメーターの設定はオプションです。
- 返される応答には、StatusCodeパラメーターが含まれます。詳細については、上記の応答パラメーターの表を参照してください。
|
完成例以下は、ADDUSER関数の完成例です。こちらを使用するには、以下の手順に従います。 - コードをコピーして、「ws_adduser.jsp」として保存します。
- root(Yellowfin/appserver/webapps/ROOT)フォルダーにファイルを配置します。
- 環境に応じた詳細を追加するために、ホスト、ポート番号、管理ユーザー、ユーザーを調整します。
- インターネットブラウザから、「http://<host>:<port>/ws_adduser.jsp」を実行します。
<%
/* ws_adduser.jsp */
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@ page import="com.hof.util.*, java.util.*, java.text.*" %>
<%@ page import="com.hof.web.form.*" %>
<%@ page import="com.hof.mi.web.service.*" %>
<%
AdministrationServiceService s_adm = new AdministrationServiceServiceLocator("localhost",8080, "/services/AdministrationService", false); // adjust host and port number
AdministrationServiceSoapBindingStub adminService = (AdministrationServiceSoapBindingStub) s_adm.getAdministrationService();
AdministrationServiceRequest rsr = new AdministrationServiceRequest();
rsr.setLoginId("admin@yellowfin.com.au"); // provide your Yellowfin web service admin account
rsr.setPassword("test"); // change this to the password of the above account
rsr.setOrgId(1);
rsr.setFunction("ADDUSER");
AdministrationPerson ap = new AdministrationPerson();
ap.setUserId("john.smith@yellowfin.com.au"); // If Yellowfin authentication option is set to "email address"
ap.setFirstName("John");
ap.setLastName("Smith");
ap.setRoleCode("YFREPORTCONSUMER"); // Yellowfin role codes can be found performing this query against
// Yellowfin configuration database: SELECT * FROM OrgRole
ap.setPassword("test"); // Password must comply with your Yellowfin password policy
ap.setEmailAddress("john.smith@yellowfin.com.au");
rsr.setPerson(ap);
AdministrationServiceResponse rs = adminService.remoteAdministrationCall(rsr);
if
("SUCCESS".equals(rs.getStatusCode()) ) {
out.write("Success");
} else {
out.write("Failure");
out.write(" Code: " + rs.getErrorCode());
}
%> |
|