---
title: "シングルサインオン"
canonical: "https://wiki.yellowfin.co.jp/space/yfcurrent/1901664/%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%AA%E3%83%B3"
format: markdown
---
> Macro (anchor)



> Macro (toc)

## シングルサインオンの概要

Yellowfinの管理サービスは、基本的に、Yellowfinをすべてのサードパーティ製認証プロセスに統合することができます。主に、**認証bridge**は、Yellowfinをスタンドアロンアプリケーション、または完全統合アプリケーションとして実装する場合に使用されますが、サードパーティ製認証プロセスに統合する場合は、**カスタムbridge**を作成しなくてはいけません。このbridgeは、サードパーティ製ソースからのユーザーログイン情報と、Yellowfinシステム内のユーザー情報を一致させます。通常、認証ソースはユーザー名を提供しますが、こちらではユーザーを認証するために、パスワードやその他ユーザー属性が送信されることもあります。


既存のYellowfinユーザーとの一致が確認されると、bridgeはシングルサインオン（**SSO**）を実行することで、ユーザーをYellowfinにログインさせます。これは、**LOGINUSER** webサービス（ユーザーログインにパスワードを要求します）、または**LOGINUSERNOPASSWORD**サービス（ユーザー名のみでユーザーのログインを実行する）のいずれかを使用して実行することができます。サードパーティ製ソースからの利用可能なパスワードの取得は極めて難しいため、後者が理想的な方法です。


ユーザーのログイン可否を定義する際に、bridgeを使用しなくても構いません。bridgeがユーザー名を受信する、ということは、対象のユーザーが既に有効であることを意味します。しかし、ユーザーの認証有無をサードパーティ製ソースに確認する責任を負う場合もあります。


ユーザーがYellowfinに存在しない場合は、ユーザーの自動作成をしなくてはいけない場合があります。これには、サードパーティ製アプリケーションから取得する必要のある、電子メールアドレスや、ユーザーの姓名など、追加情報が必要になることもあります。bridgeは、**GETUSER**、または**VALIDATEUSER** webサービス関数を使用することで、ユーザーがYellowfinに存在するかを定義することができ、存在しない場合は、**ADDUSER** webサービスを呼び出すことで、ユーザーを作成します。複数のユーザーを一度に作成する場合は、**ADDUSERS** webサービス関数を呼び出します。


bridgeプロセスの一部は、ログインプロセスの一環として、ユーザーのYellowfinロールやグループメンバーシップを変更することができます。Yellowfinが、異なるコンテンツへのアクセスを変更する可能性のある製品に統合されている場合、ログインプロセス中にグループメンバーシップを更新するように要求される可能性があります。これには、ユーザーをどのグループに追加、または削除する必要があるのかを確認するために、サードパーティ製ソースからの情報が必要になります。**UPDATEUSER** webサービスの呼び出しは、ユーザーロールの変更に、**INCLUDEUSERINGROUP**、または**EXCLUDEUSERFROMGROUP**の呼び出しは、ユーザーがアクセスできるYellwfinのコンテンツを定義するグループへの追加、削除のために使用されます。


bridgeは、様々な方法で実装することができます。以下はその一例です。

- Yellowfinの一部として統合する（Yellowfinウェブアプリケーション内のJSP、サーブレット、またはフィルターとして）
- サードパーティ製ソースとYellowfinと通信をする、スタンドアロンアプリケーションとして統合する（GUI、コンソール、またはウェブアプリケーション）
- サービパーティ製アプリケーションの一部として統合する

bridgeの最適な実装場所は、環境と含まれるコンポーネントに応じて異なります。


Yellowfinのコンテナ内に実装する場合は、様々な実装方法が、異なる機能の取り込みを可能にします。JSPとサーブレットは、ユーザーが特定のURLに直接誘導されるようにコードを実装することができますが、フィルターは、Yellowfinシステムから要求された任意のURLの認証を確認します。


こちらは、Yellowfinの認証bridgeに必要となる基礎的なプロセスです。

1. cookie、ファイル、またはネットワーク接続を介して、詳細を取得する。
2. ユーザーが既に存在しているかどうかを確認する。
3. ユーザーが存在しない場合は、提供された詳細情報を使用してユーザーを作成する。
4. 必要に応じて、ユーザーの詳細情報を更新する（ロールやグループ、など）。
5. ユーザーをログインさせるために、SSOの呼び出しを実行する。

**<span style="color: #FF0000">注意：</span>**認証プロバイダーがSAMLをサポートする場合は、[Yellowfin SAML bridge](https://yellowfinjp.atlassian.net/wiki/spaces/yfcurrent/pages/1903498)を使用して、SSOを実行することもできます。

## シングルサインオン関数

### LOGINUSER

<details>
<summary>LOGINUSER</summary>

こちらのサービスは、Yellowfinに接続し、指定されたユーザーのログオントークンを取得します。ユーザーは、ユーザーID（ログオンID方法に応じて、電子メールアドレス、または他のタイプのIDになります）を使用して指定されます。このトークンがYellowfinのログオンURLとともに渡されると、認証されたユーザーのログイン画面を無効にし、即座にセッションが開始されます。

こちらの関数は、Yellowfinのヘッダーを非表示にしたり、ログイン後に特定のレポートやダッシュボードへ直接移動するなど、追加のタスクを実行するための様々なログインセッションパラメーターを渡すためにも使用されます。これらのログインセッションオプションについて、より詳細な情報は、[こちら](https://yellowfinjp.atlassian.net/wiki/spaces/yfcurrent/pages/1900967)の項目を参照してください。


#### リクエスト要素

LOGINUSER関数は、指定されたユーザーのYellowfinへのシングルサインオンを実行します。以下の要素は、こちらのリクエストとともに渡されます。

**<span style="color: #FF0000">注意：</span>**AdministrationPersonオブジェクトのコンテンツは、ログインするユーザーを定義するために使用されます。

|  |  |  |
| --- | --- | --- |
| **リクエスト要素** | **データ型** | **説明** |
| LoginId | String | Yellowfin Webサービスの管理者ユーザーIDです。これは、ログインIDの方法に応じて、ユーザーID、または電子メールアドレスになります。<br>このYellowfinアカウントは、「**Yellowfin Webサービス使用権**」が有効化されたロールを持ち、デフォルト（プライマリー）組織に所属していなくてはいけません。 |
| Password | String | 上記アカウントのパスワードです。 |
| OrgId | Integer | Yellowfin内のデフォルト（プライマリー）組織IDです。常に、「**1**」に設定します。 |
| Function | String | Webサービス関数です。こちらは、「**LOGUIN****USER**」に設定します。 |
| Person | [AdministrationPerson](https://yellowfinjp.atlassian.net/wiki/spaces/yfcurrent/pages/1900959#id-管理オブジェクト定義-AdministrationPerson) | ログインするユーザーの詳細を含むAdministrationPersonオブジェクトです。**<span style="color: #FF0000">注意：</span>**以下の表を参照してください。 |
| OrgRef | String | クライアント組織内部参照IDです（こちらの設定はオプションです）。こちらは、指定されたクライアント組織へユーザーをログインさせます。こちらを設定しない場合、ログイン先のクライアント組織を選択するために、ユーザーにクライアント組織選択ページが表示されます。 |

以下は、こちらの関数のために、「**AdministrationPerson**」オブジェクトに設定しなくてはいけない主要なパラメーターです。

|  |  |  |
| --- | --- | --- |
| **AdministrationPerson 要素** | **データ型** | **説明** |
| UserId | String | ログインするユーザーのユーザーIDです。これは、ログインIDの方法に応じて、ユーザーID、または電子メールアドレスになります。 |
| Password | String | 新規ユーザーのパスワードです。 |


以下のSOAPの例は、この呼び出しに渡すことのできるパラメーターを表示しています。

```xml
<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サービス呼び出しのステータスです。値の選択肢は、以下の通りです。<br>- SUCCESS
- FAILURE |
| LoginSessionId | String | 一意のログイントークンです。こちらのトークンは、ユーザーをYellowfinへ直接誘導するために、ログインURLへ付加されます。 |


サービスは、今回のSOAPの例に基づき、以下の応答を返します。

```xml
<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の例を使用して、こちらの呼び出しを実行するための詳細な手順は、以下を参照してください。

> Macro (anchor)



#### ログイントークンを使用したYellowfinのリダイレクト

webサービスの呼び出し（AdministrationResponseのコンテンツ。LoginSessionId）から受信したトークンを使用することで、ユーザーをURLへ誘導することができます。

```java
http://<YELLOWFIN-SERVER>/logon.i4?LoginWebserviceId=<TOKEN>
```

こちらのURLはYellowfinの認証画面をバイパスすることで、ユーザーをYellowfinへ直接誘導します。

> ⚠️ トークンには、有効期限があります。5分以内に使用しなくてはならず、一度使用すると、再び使用することができません。サードパーティ製アプリケーションからYellowfinへ継続して呼び出しを実行する場合は、再度LOGINUSER webサービスを呼び出さなくてはいけません。


#### JavaScript APIを使用したトークンの使用

SSOトークンは、組み込まれたJavaScript APIウィジェットとともに使用することができます。トークンは、スクリプトレットURLへ以下のように追加されます。

```javascript
<script type="text/javascript" src="http://localhost/JsAPI?dashUUID=e9a6ab0a-bcb0-4fe6-9663-4dd33e58f08e&token=<TOKEN>"></script> 
```


#### ログインセッションオプション

このシングルサインオンリクエストにより作成されたセッションの機能のみを切り替える変数、またはスイッチを渡すことができます。これらのオプションは、AdministrationRequest内のパラメーター属性を介して渡すか、リダイレクトURLへ付加することで有効にすることができます。より詳細な情報は、[こちら](https://yellowfinjp.atlassian.net/wiki/spaces/yfcurrent/pages/1900967)を参照してください。


#### 完成例

以下の、LOGINUSERの例を使用することができます。こちらを使用するには、以下の手順に従います。

1. 以下のコードをコピーして、「**ws_admin_singlesignon.jsp**」として保存します。
2. root（Yellowfin/appserver/webapps/ROOT）フォルダーにファイルを配置します。
3. 環境に応じて、ホスト、ポート番号、管理ユーザー、ログインするユーザーの詳細を調整します。
4. インターネットブラウザから、「**http://<host>:<port>/ws_****admin_singlesignon****.jsp**」を実行します。


```java
<%           
/*       ws_admin_singlesignon.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.*" %>
<%
String url = "http://localhost:8080";         //provide your Yellowfin URL
 
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 webservices admin account
rsr.setPassword("test")                            // change to be the password of the account above
rsr.setOrgId(1);
rsr.setFunction("LOGINUSER");
 
AdministrationPerson ap = new AdministrationPerson();
ap.setUserId("user@yellowfin.com.au");                  // provide existing Yellowfin user to login
ap.setPassword("usertest");                             // password of the user above
 
rsr.setPerson(ap);
 
String[] parameters = new String[] {"ENTRY=TIMELINE","DISABLEHEADER=TRUE"};
rsr.setParameters(parameters);
 
AdministrationServiceResponse rs = adminService.remoteAdministrationCall(rsr);
 
 
String token = "";
if ("SUCCESS".equals(rs.getStatusCode()) ) {
               token = rs.getLoginSessionId();
               response.sendRedirect(url + "/logon.i4?LoginWebserviceId=" + token);
} else {
               out.write("Single Sign on Failure");
               return;
}
%>
```
</details>

### LOGINUSERNOPASSWORD

<details>
<summary>LOGINUSERNOPASSWORD</summary>

LOGINUSERNOPASSWORD webサービスは、ユーザー名のみを使用して、ユーザーをログインさせることができます。


#### 関数の有効化

こちらの関数を有効化するには、Yellowfinデータベースの構成テーブルに、追加のパラメーターを設定しなくてはいけません。

|  |  |  |  |
| --- | --- | --- | --- |
| **IpOrg** | **ConfigTypeCode** | **ConfigCode** | **ConfigData** |
| 1 | SYSTEM | SIMPLE_AUTHENTICATION | TRUE |


**<span style="color: #FF0000">注意：</span>**データベースへの変更を反映するために、Yellowfinを再起動しなくてはいけない場合があります。

こちらの設定がYellowfinのデータベースに追加されなかった場合は、webサービスエラー26：UNSECURE_LOGIN_NOT_ENABLEDが発生します。


こちらの呼び出しのパラメーターオプションは、LOGINUSERのものと同様です。例：

- LOGUINUSERNOPASSWORDにAdministrationRequest.Functionが設定されます。
- AdministrationPerson.Passwordは空白にすることができます。
</details>