Azure AD と DocuSign を SAML 連携しシングル サインオンができるまでの環境を一から構成する

#はじめに
DocuSign は昨今話題となっている「脱ハンコ」を推し進める為に活用できる「電子署名」や「電子捺印」を備えた SaaS アプリケーションで、Microsoft の Office 365 製品とも連携可能なアプリケーションになります。

どのような感じで使うのかについては下記 DocuSign の URL に載ってる動画がイメージしやすいかもしれません。

-参考情報
DocuSign + マイクロソフト = 生産性向上
URL:https://www.docusign.jp/solutions/microsoft

Azure AD 上のユーザーと SAML 連携することで、マイ アプリ (myapplications.microsoft.com) から各ユーザーが DocuSign のアイコンをクリックするだけでシングル サインオンできます。

また、後述しますが、DocuSign は JIT (ジャスト イン タイム) プロビジョニングに対応しており、SAML 連携したユーザーが DocuSign にシングル サインオンすると、Azure AD 側が発行した SAML Response に含まれるユーザー属性を使って DocuSign 側にユーザーを自動的に作成してくれます。

これにより DocuSign 側で個別にユーザーを作成する必要もありません。
今回は評価版の Developer エディションを利用し、Azure AD 上と DocuSign 側でそれぞれ必要な一連の設定を画面ショット付きで紹介します。

#やってみる
手順の概要は下記の通りとなります。

1. DocuSign の Developer エディションを入手する
2. DocuSign 側で組織の作成とドメインの申請、設定を行う
3. Azure AD 、DocuSign 双方でシングル サインオンに必要な設定を行う
4. マイ アプリから割り当てたユーザーでシングル サインオンできるかテストする
5. (おまけ) トラブルシュート

#####1.DocuSign の Developer エディションを入手する

DocuSign 評価版などのワードで検索すると最初にたどり着く URL が「https://go.docusign.jp/o/trial/」 なのですが、この評価版では SAML を利用することできません。この評価版で使えるのは下の一覧にある、「Business Pro (企業向け)」で Business エディションなので、使えそうに見えますし、実際私も最初はこれを試しましたが、後述する設定項目が存在しませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b0674c33-0561-686e-9a0f-bb00b456c680.png)


SAML および今回は触れませんがプロビジョニングをするために必要な評価ライセンスは「https://developers.docusign.com/」 からサインアップすることで入手可能です。

サインアップすることで Developer 向けの Sandbox 環境を 30 日間無料で評価できます。

https://developers.docusign.com/ にアクセスし、画面右上の「Developer Account」→「Create account」の順に選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/77d11dea-9062-93bf-141d-6cef2876734b.png)

下記画面ショットのようにサインアップの画面が表示されますので必要な情報を入力していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/1d804cff-11af-ba7e-7146-1c32349e303c.png)

下記は入力イメージです。
「I agree」から始まる DocuSign からコンタクトを希望するかどうかというチェック ボックスにチェックを入れなくても環境は作れますので、任意で選択を行い、「GET STARTED」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/4c80545a-68f9-af3d-90eb-e0630e019032.png)

クリック後に、サインアップ時に入力した Email アドレス宛に下記画面ショットのようにアクティベートしてくださいというメールが届きますので、「ACTIVATE」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b1c62453-bbc8-9ccd-bf0b-024fc36d67e1.png)

下記アクティブ化の画面にリダイレクトされますので、パスワードと秘密の質問を設定し「アクティブ化」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/969082d0-9c18-69b3-8b38-b5f9b7ee0b5a.png)

アクティブ化をクリック後に、下記画面ショットのようにサインイン後の画面が表示されます。
※この手順は必須ではないですが、言語表示を日本語に変更する場合には、画面右上のアイコンをクイックし、「Manage Profile」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/01f1d700-63a3-bcab-85d4-a913fce3e26b.png)

Language & Region タブをクリックし、Language の項目をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c77db5d9-906f-3cf0-80a1-dfc946fd3451.png)

言語を「日本語」に変更し「SAVE」をクリックします。
※Region も同様に「日本」に変更できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/45efc012-3cce-a322-fcbc-0f1f3af234d8.png)

#####2. DocuSign 側で組織の作成とドメインの申請、設定を行う
DocuSign 単体で使う場合にはこの状態から利用可能となりますが、今回の目的は Azure AD 上に登録されているカスタム ドメイン (組織ドメイン) を持ったユーザーを DocuSign 側にシングル サインオンさせることなので、DocuSign 側でも Azure AD 側のカスタム ドメインと紐づけるために必要な「組織」の作成と「ドメイン」の申請を行っていきます。

アクティブ化直後の下記画面にて、画面上部の「設定 (Settings)」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/572991de-18cf-4ddb-26d2-2a2ac4139e45.png)

評価版初回利用時は Azure AD の組織で利用しているカスタム ドメインが登録されていないので、画面上部に下記画面ショットのように「組織」が構成されていない場合は赤枠で囲った「GET STARTED」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/bf2abc72-bd8f-d742-e966-3af02a5e1093.png)

設定画面で組織として利用する任意の組織名を入力し「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/a0704fa1-5756-856e-06f0-5c7163a57f84.png)

そのまま「CREATE」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/8fe5da50-2d17-c423-4525-d2b33097c508.png)

組織を作成すると、DocuSign Admin 画面に遷移します。画面一覧の「Domains (ドメイン)」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/7d775880-8ab5-6929-fc02-98b0060efa94.png)

初回利用時はドメインは未作成の状態なので「ドメインの申請 (CLAIM DOMAIN)」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/11bbe8ea-8938-7c9c-78bf-b282f0fd9423.png)

ドメインの申請画面で Azure AD で利用している DocuSign にシングル サインオンさせたいカスタム ドメイン名を入力し「申請 (CLAIM)」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/a7e83ec4-e3d7-3272-bdec-0e619e8aeab1.png)

ドメインの申請画面で「閉じる (CLOSE)」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/557c6b15-d5cf-dc7d-aefe-f7ae7d61189c.png)

Domains の画面で「トークンを申請 (Get Validation Token)」のリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/e6a857a4-d0b5-5c5f-3562-b9f363bbdbb4.png)

表示される TXT Token の右のアイコンをクリックし、TXT レコードをコピーします。
この TXT レコードが登録したドメイン名が DocuSign 上でも管理されていることを証明するために必要となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/2e3ca000-9446-6e1a-1bca-1e55f48520ce.png)

以下作業は各 DNS レジストラによって作業内容が異なりますので詳細な手順は割愛しますが、DNS レジストラ上に下記画面ショットのように (以下はお名前.com の場合) 利用している Azure AD のカスタム ドメインのゾーンファイルにコピーした TXT レコードを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/778ecaf7-e7da-94eb-2e42-e996253a1767.png)

DNS レコードが反映された後に、DocuSign Admin 上の Domains 画面にて「ACTIONS」→「Validate」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ddd563b9-bb60-9a2f-0d90-2c454742f5db.png)

TXT レコードの確認が完了すると、Validate に成功し対象のドメインの Status が「Active」になります。
これで対象の DocuSign のサイトに Azure AD 上で登録されているカスタム ドメイン名を持った「組織アカウント」としてサインインできるようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b017783a-037e-7639-c9da-0956aea6ecf1.png)

#####3. Azure AD 、DocuSign 双方でシングル サインオンに必要な設定を行う

次に Azure AD 及び DocuSign 側それぞれでシングル サインオンに必要な設定を行います。
手順のベースとなるのは Microsoft の公開情報になります。

-参考情報
チュートリアル:Azure Active Directory シングル サインオン (SSO) と DocuSign の統合
URL:https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/docusign-tutorial

公開情報の内容は正しいですし、公開情報を見ていただければできると言えばできるのですが、実際に構築してみた感覚としては若干コツが必要なので、手戻りなく最短で構成できる方法を記載します。

「Azure ポータル」→「Azure Active Directory」→「エンタープライズ アプリケーション」の順にクリックし、すべてのアプリケーションの画面上ににある「＋新しいアプリケーション」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/fc6b757e-4dcb-c4ea-dbec-47da1121cf42.png)

検索ボックス内で「DocuSign」と入力し表示されるアプリケーション一覧のうち、「DocuSign」のパネルをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/762fce16-682f-a705-6d2c-d0fda30cff62.png)

画面右に DocuSign の画面が表示されるので、「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c9d1e19e-56eb-f229-56b6-a2d4c38bfb03.png)

表示される DocuSign の概要画面にて左ペインにある「シングル サインオン」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/e052b596-5edf-5940-671c-7d7000ceff6b.png)

シングル サインオン方式の選択画面で「SAML」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c2c5d626-d72d-7c68-fb86-b3e00916a471.png)

下記画面の右側にある基本的な SAML 構成の項目を見ていただくと分かるのですが、サインオン URL に必要な ORGANIZATIONID や IDPID にどんな値を入れればいいのかが分かりません。
これは公開情報を読み解くと分かるのですが、DocuSign 側の 「SAML 2.0 エンドポイントを表示」をクリックしないと値が判明しません。
よって必須項目は一旦飛ばして画面下にある、「Or, ステップ バイ ステップの手順を表示」のリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/6e21a222-1761-5c6b-5010-467d48f2313b.png)

画面右に「サインオンの構成」として「1.」から「12.」までの手順が全て表示されます。
この手順を見ながら設定していくことで SAML の設定を完了させることができます。
ブラウザーのタブで Azure ポータルと DocuSign Admin を表示させながら作業をすると効率的だと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/3b97e170-f7f1-6247-af12-e25c4e4dcea1.png)

既に「サインオンの構成」内の手順の 4. までは実施済みですので手順 5. から進めます。
管理画面ホーム上の一覧にある「IDプロバイダー」のアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/2016ece8-5fe7-dee1-8a00-74a7d24e87c7.png)

IDプロバイダーの画面内にある「IDプロバイダーの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/1196eff7-b8df-e61d-80a8-d08196f37118.png)

IDプロバイダーの設定の項目で以下必須項目を順番に入力、選択していきます。

|設定項目| 値 (例)  |備考|
|:-----------|:------------|:------------|
| 名前       | 任意の値で可        | 必須項目         |
|IDプロバイダーの発行者 |  https://sts.windows.net/tenantid/      | 必須項目 /サインオンの構成 7. の b. に書かれている値をそのままコピペする  |
|IDプロバイダーのログインURL       |  https://login.microsoftonline.com/tenantid/saml2       | 必須項目 / サインオンの構成 7. の c. に書かれている値をそのままコピペする    |
|  IDプロバイダーのログアウトURL      |  https://login.microsoftonline.com/common/wsfederation?wa=wsignout1.0        | 必須ではない / サインオンの構成 7. の d. に書かれている値をそのままコピペする         |
| 認証要求に署名する      | チェックを入れる       |必須設定   |
| 認証要求の送信| POST     | 必須設定 |
| ログアウトの送信  | GET| 必須設定 |
| カスタム属性マッピング | Azure AD 上のユーザー属性とクレームの値を DocuSign 側に渡す際にカスタマイズしたい場合は設定する。カスタマイズしなくても SSO は可| 任意設定|

以下のような感じで設定を行い、画面上部もしくは画面下部にある「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/2d0b8a16-1146-4088-19bd-1a6e11eecb55.png)

以下のように IDプロバイダーが追加されます。
次に、新しい証明書の追加の前に、Azure ポータル側で設定をしますが、そのために「アクション」→「エンドポイント」の順にクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d719d296-c881-f2bc-bb84-39a0138336e8.png)

ここで表示される下記赤枠で囲った URL がそれぞれ Azure ポータル上で設定に必要な値になってきます。
一覧にすると下記のような感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/a45e8355-81e8-19b6-b94d-43fc35f4897e.png)


|DocuSign設定値| 値 (例)  |Azure AD 設定値|
|:-----------|:------------|:------------|
|サービスプロバイダーの発行元URL | https://account-d.docusign.com/organizations/ORGANIZATIONID/saml2 | 識別子 (エンティティID)   |
|サービスプロバイダーのアサーションコンシューマーサービスのURL     |  https://account-d.docusign.com/organizations/ORGANIZATIONID/saml2/login/IDPID   |  応答 URL   |
|サービスプロバイダーのログインURL |   https://account-d.docusign.com/organizations/ORGANIZATIONID/saml2/login/sp/IDPID     |  サインオン URL      |

以下のような感じでそれぞれ設定を行い画面上部の「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/8523ab45-0de4-1926-38e4-2b04a0869f66.png)

基本的な SAML 構成が完了したことで、Azure AD が捺印をする SAML 署名証明書が作成されますので、赤枠で囲った「Base64」の証明書をダウンロードし、ローカルの任意のフォルダに保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/79629820-2f27-fb8e-3df3-54d583a2ba9d.png)

次に DocuSign Admin 側の画面に戻って、「新しい証明書の追加」のリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ffa9c406-d6c8-65d4-0563-0817ad9ae4bd.png)

下記画面の「証明書の追加」のボタンをクリックし、Azure ポータルからダウンロードした証明書をアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/dc7ef2b0-86e6-2b6c-ba18-c150868f736e.png)

アップロード証明書はこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b57dee80-b423-676b-34d8-e1892c356ddd.png)

アップロードが正常に完了するとメッセージと共に、ID プロバイダー証明書に証明書が追加されますので、「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/1bf9e838-b286-04f8-e7cc-89fd1fa492f0.png)

保存が成功すると下記画面ショットのように証明書のステータスが「有効」になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/019d7c84-4c5f-1727-a424-568607ab753b.png)

これで一通り、Azure AD 側と DocuSign 側の設定が完了しましたので、ユーザーを割り当ててシングル サインオンできるかテストしてみます。

#####4. マイ アプリから割り当てたユーザーでシングル サインオンできるかテストする

マイ アプリからシングル サインオンのテストをするためには、テストするユーザーをエンタープライズ アプリケーションに割り当てる必要があります。

Azure AD 上の DocuSign の「ユーザーとグループ」から「＋ユーザーの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/84a155af-0b59-b54e-224e-817fa42dc664.png)

テストを行いたいユーザーを選択後、画面下の「選択」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/4558620b-784f-7aa5-49e4-fe722377df35.png)

1 ユーザー選択されていることを確認し、「割り当て」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c760d969-1bd2-b201-03d7-d96be8731d71.png)

ユーザーが割り当てられましたので、マイ アプリ (myapplications.microsoft.com) に割り当てたユーザーでサインインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/93ed7836-dea9-203f-31dd-104ad1d10037.png)

DocuSign に割り当てたユーザーの場合は、下記画面ショットのようにマイ アプリ上にシングル サインオンが可能なアプリケーションの一覧がアイコンとして表示されますので、「DocuSign」のアイコンをクリックし、シングル サインオンできるかテストしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ffbe053a-6f85-98f5-bdcb-164fb1766c66.png)

めでたく割り当てたユーザーで DocuSign 側にシングル サインオンできました。
DocuSign へは UPN 「test002_change@カスタムドメイン名」 ではなく、「test002@カスタムドメイン名」でサインインしていることが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/f0cb6ec3-6bdb-09ec-dc54-08c681a54820.png)

具体的に DocuSign Admin のユーザー画面を見てみると、下記画面ショットのように「メール アドレス」が DocuSign にサインインするために必要な属性になっていることが分かると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/9a2a80bb-3931-cc81-4516-51a372501c3d.png)

逆に言うと、メール アドレスを持っていない Azure AD ユーザーでシングル サインオンしようとするとシングル サインオンに失敗します。
これは、JIT (ジャスト イン タイム) プロビジョニングを行う際に SAML Response として Azure AD が発行したトークンに含まれるメール属性値を基に DocuSign 側のユーザーを作成しているためとなります。

以上で DocuSign へのシングル サインオンが完了しましたが最後におまけとして動作検証時にハマってしまったトラブルシュート ネタを載せます。

##### 5.(おまけ) トラブルシュート

4.の手順まで行ってマイ アプリからいざシングル サインオンが動作するか試すときに、以下のように「応答アサーションに必須の属性が欠落しています」と表示された場合の対処方法を記載します。

※結論から言ってしまうと、Azure AD 側で定義されている「ユーザー属性とクレーム」上で設定している属性が対象の Azure AD ユーザーにおいて不足しているために出るエラーです。

※私の場合は Surname (姓) が不足してエラーが出ていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c4a0d793-21f8-33eb-bf03-aeaf432fddde.png)

Azure AD の下記画面ショットにある「ユーザー属性とクレーム」は DocuSign 側に SAML Response としてブラウザー経由で渡すために必ず必要な属性になります。例えば赤枠で囲った「surname (姓名の姓)」が不足していた場合に上記エラーが出力されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/7f39e687-c764-799b-2e18-230601080042.png)

対象のユーザーを見てみると、確かに「姓」の値が NULL になっていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/96edf2c6-12a0-61b2-a55a-605260de0428.png)

下記画面のようにオンプレミス AD から「姓」の値を追加、Azure AD に同期後に再度シングル サインオンをテストしたら問題なく動作しました。
実際の本番環境ではユーザーの 姓 (surname) 名 (givenname) が欠落しているようなことはあまりないとは思いますが、テスト環境で簡易的にユーザーを作った場合には、姓名のどちらかがない、という可能性はなくはないと思うので、このエラーが出た時の参考になれば幸いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/99cc379b-f8ca-d719-43b1-761d2ee0ab97.png)

#おわりに
今回は電子捺印や電子署名を推し進めるために活用できる DocuSign という SaaS アプリと Azure AD を SAML 連携するために必要な手順を紹介しました。

Developer 版の SandBox 環境も 30 日間無料で評価できるので、Azure AD と連携させて使ってみたい、という方は是非試して頂ければと思います。
今回の記事が少しでも参考になれば幸いです。