SAML認証でDr.SumのDatalizer for WebにSSOする

# はじめに
WingArc1st社のDatalizer for Webに、Open AMのSAML認証でSSOする仕組みを構築したのでメモしておきます。

# SAMLについて簡単なおさらい
SAMLには「SP Initiated」と「IdP Initiated」の2種類があります。
それぞれの違いは以下の通り。

## SP Initiatedとは
SP（Service Provider）が起点となるSAML認証のフローです。


![SPInitiated.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530635/e6227125-5747-0ed5-bfad-c123c6d84958.png)


~~~
1-2. ログインアクション (Datalizer for WebのSAML URLをブラウザで開く等)
3. SPからIdPに対してSAML Requestを送る
4. IdP上でユーザ認証 (認証できていなければユーザに認証画面を表示)
5. IdPがSAML Requestと4.の認証情報を元にSAML Responseを生成してSPに送る
6. SAML Responseを検証し、SAML Responseに記述されているユーザ情報を元にログイン処理を行う
7. ログイン
~~~



# Datalizer for WebのSAML認証設定
## 前提
Datalizerは SP Initiated に対応しているようです。
[マニュアル](https://cs.wingarc.com/manual/drsum/5.6/ja/UUID-7a214298-8ce8-7c9a-e2ae-19fb7146e214.html "Datalizer Online Manual")にSAML認証を設定する際の前提条件が記載されています。

~~~
・外部システムがADFS（Active Directoryフェデレーションサービス）やOpenAMなど、SAMLに対応した認証サーバーを利用している必要があります。
・IdPがADFSの場合、WebブラウザーからDatalizerサーバーにHTTPS接続できる必要があります。
・IdPとDr.SumまたはMotionBoard（［MotionBoardのドメイン名］で指定したドメイン）に、同じIDのユーザーが登録されている必要があります。
・IdPとDatalizerサーバーのシステム日時が一致している必要があります。
・DatalizerサーバーからIdPへ渡したRelayStateを、IdPから認証結果と共にDatalizerサーバーへ送り返すように設定する必要があります。
~~~

気になるのは`IdPがADFSの場合、WebブラウザーからDatalizerサーバーにHTTPS接続できる必要がある`の部分。

HTTPS接続が必要になるのはADFS側の仕様だと思いますが、Google Workspaceも同様にSPに対してHTTPS接続を要求しているので、クラウドのIdPを利用する際はHTTPS接続が基本になってくるのでしょう。

## 環境
|項目|内容|
|:-----------|:------------|
|SP|Dr.Sum Datalizer for Web|
|IdP|Open AM|

## 設定の流れ
~~~
1. [Datalizer] SAML認証設定の作成
2. [IdP] DatalizerサーバとIdPの信頼関係の構築
3. [Datalizer] 証明書ファイルの登録
4. [Datalizer] 外部認証処理用IDとパスワードの設定
5. [Datalizer] ログインの確認
~~~



### 1. [Datalizer] SAML認証設定の作成
　a. 画面左側のメニューから［システム管理］－［設定］－［SAML認証設定］をクリックします。

　b. ［SAML認証の利用］で［利用する］を選択します。

　c. ［ターゲットURL］に、認証サーバーのHTTP POSTバインディングのURLを入力します。

　d. ［適用］をクリックします。

　e. ［フェデレーションメタデータ］の［ダウンロード］をクリックして、IdPにDatalizerサーバーの情報を登録するためのファイルをダウンロードします。

![01_SAML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530635/2b336ea3-93cc-433e-4e49-c531138928cf.png)

### 2. [IdP] DatalizerサーバとIdPの信頼関係の構築
IdPに対してDatalizerサーバをSPとして登録します。
登録時には先述のフェデレーションメタデータを指定するか、以下のパラメータを設定します。

|項目|設定値|
|:-----------|:------------|
|ACS URL|フェデレーションメタデータの"Location" (例：http://localhost:8180/datalizer/sso/saml/callback)|
|エンティティID|フェデレーションメタデータの"entityID" (例：http://localhost:8180/datalizer)|
|開始URL|DatalizerのSAML URL (例：http://localhost:8180/datalizer/sso/saml)|

### 3. [Datalizer] 証明書ファイルの登録
Datalizerサーバーの［SAML認証設定］画面に戻り、IdPから取得した証明書ファイルを登録します。

　a. 画面左側のメニューから［システム管理］－［設定］－［SAML認証設定］をクリックします。

　b.［証明書ファイル］の［参照］をクリックし、IdPから取得した証明書ファイルを選択して、［アップロード］をクリックします。
　![02_SAML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530635/84fa13b6-c93d-b7df-e3fb-82c9740a6f3b.png)

### 4. [Datalizer] 外部認証処理用IDとパスワードの設定
Datalizerサーバーと認証サーバー（Dr.SumまたはMotionBoard）の間で、外部認証処理用IDでの代理認証を実施します。

　a. 画面左側のメニューから［システム管理］－［設定］－［認証設定］をクリックします。

　b. ［接続設定］をクリックします。

　c. ［外部認証処理用ID］と［外部認証処理用パスワード］を設定します。

　d. ［登録］をクリックします。
![03_SAML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530635/b5cd2556-da43-325a-886e-d320b9a4247a.png)

### 5. [Datalizer] ログインの確認
Webブラウザーを起動し、先述の開始URL (DatalizerのSAML URL) に接続すると、ログイン先のページが表示されます。


# まとめ
Open AMとのSAML認証では問題なくSSOの仕組みを構築できました。
ADFSやGoogle Workspaceとの連携ではDatalizer for WebをHTTPS接続に変える必要があるため、リバースプロキシやSSLアクセラレータといった構成を追加で準備する必要がありそうです。