Box と Azure AD を統合して、 Box にシングル サインオン (SSO) する環境を一から構成する

#はじめに
Azure AD は SAML を使って 3rd パーティー製アプリケーションと連携しシングル サインオンを構成することが可能です。
(2019年5月4日時点で 3128 個のアプリケーションがギャラリーとして登録されています)

クラウド ストレージ サービスである Box もその 1 つで、 Microsoft も下記 URL のとおり Box との連携方法を記載した公開情報があります。

URL:https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/box-tutorial

基本的には上記チュートリアルに従って設定を行えばシングル サインオン環境を構成できますが、「基本的な SAML 構成」の設定内容など、一部 Box 側の環境に依存する箇所があるので、注意点を踏まえつつ一から構成する場合の手順を記載したいと思います。

#Box の環境を用意する
まず、 Azure AD とシングル サインオン環境をする Box の環境を用意します。
下記 URL のうち、 **Business** プラン以上が Azure AD とシングル サインオンを構成することが可能です。
(逆にいうと、 Starter プランでは何をどうやっても Azure AD と統合することはできません)

URL:https://www.box.com/ja-jp/pricing

「試す」をクリックすると、「14日間」は無料で Business プランを利用することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/89098a3d-c9d0-86d5-1cfd-9dfc3cc8096e.png)

必要な情報を入力して、「続行」をクリックします。
※検証目的で利用する場合は、15日目以降は自動で請求が発生してしまうので、無償期間内で検証したい場合は必ず「キャンセル」してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d0d2b20f-7f56-baf0-dda9-b441a6a346fa.png)

必要な情報を入力して「続行」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/2b0d7cb0-80e7-40aa-007c-798bbd020267.png)

Business プランの「選択」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/a72cd494-36b7-ceb1-7cf9-8aa583c2435d.png)

今回は検証目的なので、最低の「3」ユーザーで「毎月」が選択されていることを確認し、「続行」をクリックします。
※毎年を選択してしまうと、万が一キャンセルし忘れてしまった場合、「64,800円」請求されてしまうので気をつけてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c1e4fa6a-3f71-8823-236e-df7d8c904603.png)

必要な情報を入力して、「開始する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/03ac55ab-d659-780b-32ce-61d7c1c652c8.png)

申し込みが完了すると、下記画面のとおり登録したメールアドレス宛にメールが来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/2f4d5a80-d8fe-a2fc-3a61-d29985ca1481.png)

「Verify Email」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/f5f9b5e8-1eea-46a1-e2bc-f775ed0917e9.png)

ブラウザーの画面が切り替わるので、登録した資格情報を入力して「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/bd253764-f3f0-662e-bfd4-e4625dd93a89.png)

パスワードを入力し、「Log In」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/05ea2c75-87a2-a6b6-559c-17e859544a5e.png)

ログインに成功すると、ユーザーを招待することができる画面が表示されるので、シングル サインオンを試したい Azure AD ユーザーを入力し、「Invite Teammates」をクリックします。
※ Azure AD のプロビジョニング機能を利用して、 Box に Azure AD ユーザーを同期することも可能です。
プロビジョニングの方法については、下記公開情報を参考にしてください。

URL:https://docs.microsoft.com/ja-jp/azure/active-directory/saas-apps/box-userprovisioning-tutorial
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/6c17fa72-af85-0b14-cc51-8278690cb058.png)

# Azure AD の設定を行う
「Azure Active Directory」→「エンタープライズ アプリケーション」の順に選択し、すべてのアプリケーションの画面より「＋新しいアプリケーション」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/cd441f61-bc3c-3760-cc30-39dc190ffeb7.png)

アプリケーションの追加より「Box」をクリックし、右下の「追加」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c8bc85c9-7d78-2172-9151-6fe6c4571fb0.png)

すべてのアプリケーションより、「Box」のアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/a1096de4-e5c2-b7f2-37b7-7fa38d3a0398.png)

概要画面より、「シングル サインオン」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/8cc81920-9c1f-e15b-75c4-b2b6d890a789.png)


シングル サインオン画面より、「SAML」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b3316a87-305a-f1f2-05f9-71669f8eb5f4.png)

基本的な SAML 構成の右上の「鉛筆アイコン」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/be3da839-6bac-4361-0532-5a77b799d515.png)

識別子 (エンティティ ID) に 「box.net」と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/5347c12a-bd94-f836-0a01-1744fbc02364.png)

右の「…」をクリック後に「上へ移動」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/8691386f-8402-573a-f8a1-706fe71292e0.png)

サインオン URL (必須) に「https://app.box.com」 と入力し、上部の「保存」ボタンをクリックします。
※上記サインオン URL は評価版の URL になります。購入版の場合は「subdomain.account.box.com」のように URL が異なります。

設定保存後に、 Validate するかどうかの画面が表示されるので、「はい」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/64b6d450-799c-6474-5c1d-6a4dc2561e6c.png)

Box でシングル サインオンを Validate の画面にて「他のユーザーとしてサインインする」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/9f0b2aec-cc7c-3071-b924-c69356bfb6e0.png)

上述の手順で招待した Azure AD ユーザーの資格情報を入力し「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/fe65c9a3-cbe5-8a19-35d3-3d520f13f1fe.png)

資格情報を入力後に Box にサインインできることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0d2c12d2-2ebe-c80e-7a62-58ca2dc9f4b8.png)

SAML ベースのサインイン画面に戻り、 SAML 署名証明書欄の「フェデレーション メタデータ XML」の「ダウンロード」をクリックし、ダウンロードした XML ファイルを任意のフォルダに保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/faf67ef4-0d9f-1f51-3250-ddf391fc6c13.png)

#Box 側のシングル サインオンを構成する

Box の管理者ユーザー (評価版を登録した時のユーザー) でサインイン後に、左ペインの「Admin Console」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/a36d8112-34df-2cbb-e3a8-763dde145d4f.png)

管理画面の「Enterprise Settings」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/fe2a9179-d456-1aa9-d131-e3ea96cd7b4d.png)

上部タブ一覧より、「User Settings」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/93210e6d-97b1-67a0-5dfe-c2631cba2b8a.png)

User Settings 画面より、「Configura Single Sign On (SSO)」欄の「Configure」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/1c5e3b9e-1a63-a82d-4018-c0143e997cea.png)

Upload Metadata File より、 Identity Providers プルダウンにて「Azure」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/16d2ce11-97b7-640e-5461-54c599d883f3.png)

SSO Metadata File より「Choose File」をクリックし、 Azure AD にてダウンロードした XML メタデータ ファイルを選択後、「Submit」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/60d24c44-49e7-d4c8-d76a-a0f891679920.png)

Processing Connection 画面にて「Done」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/8f880a54-1b37-27bc-df1d-a6c6cf6d0705.png)

メタデータ ファイルが Box 側に Upload されるまで約 24 時間ほどかかります。
この時間に関しては調整のしようがないので、 Status が変わるまで待ちます。
※ステータスが変更されると、登録した管理者アカウントのメールアドレス宛にメールが送付されてきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d4decb5f-2174-d098-b778-3d0fe80cb8a8.png)

こんな感じでメールが来ます。
本検証では Upload してから 21 時間してからメールが来ました。
※以前検証したときは 3 時間で反映されたりと、基準がいまいちよくわかりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/f834f183-675d-5350-f9fb-99702c1f07c6.png)

反映されると下記のとおり、 Status が「Fule authenticated」に変更になります。
SSO Test Mode のチェック ボックスにチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0e19d7ee-8d37-4a34-e62a-61e7696eac2d.png)

新しいブラウザーを立ち上げてシングル サインオンできるか確認するようポップ アップ画面が表示されるので、「Enable for All Users」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/da757c66-bbee-e7be-f004-2748711a871f.png)

上記設定反映後、 Edge (ブラウザー) の Inprivate モードで起動し、 Box 評価版のログイン URL (app.box.com)を入力します。
次に下記サインイン画面に遷移するので、 Box 内に作成済みのユーザー (メールアドレス) を入力し、「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ee999348-fd65-0288-c748-a3799aa329d2.png)

パスワード入力画面にて右下の「Sign In with SSO」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/66921d2c-0d9c-33ac-6a39-26b6c54fa13c.png)

画面が遷移し、作成済みのユーザー (test001@shyamag014.onmicrosoft.com)で Box にサインオンできることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/101c713c-ba0f-ddd9-4e1f-cf58261a4157.png)

次に、 Box 管理画面の Step 2 である、「SSO Required」のチェック ボックスにチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/65f8843a-70d1-7b9d-9430-00d65e8c1d33.png)

すると、下記画面がポップアップ表示されるので、2つのチェック ボックスにチェックを入れた後に、「Enable for All Users」をクリックし、シングル サインオンの設定を完了させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b4458890-cb77-7869-bea6-91e34f643206.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d9a09588-dda9-b58d-73de-22ca44fdb945.png)

下記画面のとおり、 SSO Required にチェックが入っていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c792954a-d54e-c4aa-1996-1bfd2921b08f.png)

#ユーザーを割り当てる
Box にシングル サインオンをする Azure AD ユーザーをアクセス パネル (myapps.microsoft.com) からシングル サインオンできるようにユーザーの割り当てを行います。
Azure AD の Box 概要画面より、「ユーザーとグループ」をクリックします。


ユーザーとグループ画面より、「＋ユーザーの追加」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/759d936c-a6ba-946e-fce5-db4b63aed046.png)

割り当ての追加より、 Box にシングル サインオンさせるユーザーを選択し、「選択」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ce4e8959-48af-afd7-b02b-787be203011e.png)

「割り当て」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/34bbffda-d8f9-70d1-cc46-25b116f388bc.png)

割り当てが成功したことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/35496872-1872-bd9a-4b78-293328b29071.png)

#アクセス パネルからシングル サインオンを試す

ブラウザー (Edge) を Inprivate モードで起動し、アクセス パネルの URL (https://myapps.microsoft.com) を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c1d3cf48-96a4-43b2-0847-3c5cb6f5e2f4.png)

サインイン画面より Box アプリケーションに割り当てた Azure AD ユーザーの UPN を入力し「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/8d546fe7-c775-6bf2-eef0-491b1dd6f7f0.png)

パスワードを入力し、「サインイン」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/e12268b3-c120-0710-dcaf-cb831d41c254.png)

アクセス パネルの画面より「Box」のアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/60de1359-82ee-efdb-492e-cee234d4124a.png)

サインイン画面で Azure AD ユーザー兼 Box ユーザーの UPN を入力し、「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/4d404e63-906c-349d-ce58-5161fdc0ad69.png)

Box にシングル サインオンできることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/10ebe562-efdf-f225-658d-2def96ffd09a.png)

※以降は、アクセス パネルから Box のアイコンをクリックするだけで、 Box にシングル サインオンできる動作を確認できると思います。

#Fiddler で Issure URL の内容を確認してみる。
Azure AD と Box との統合手順は以上で完了ですが、トラブルシュート対策して、 Fiddler を使って、 SAML Request の中身を見てみたいと思います。

Fiddler のインストール、使い方については、 Qiita の下記私の記事を参考にしてください。

HTTPS パケット キャプチャ ツール Fiddler のインストールから使用開始まで。
URL:https://qiita.com/Shinya-Yamaguchi/items/37347ec532824c2dccad

Azure AD と 3rd パーティー製アプリケーションとの統合設定において、よく陥るエラーとして、下記画面を見たことはないでしょうか。
エラーメッセージを見ると何やら構成が間違ってますよ、とか、admin consent がテナント内で行われないですよ、とか、アプリケーションが要求する identifier (識別子) と Azure AD 側で設定している identifier が間違っているようなのでチェックしてください、とかごちゃごちゃ書いてあって、一体何が間違っているのかよく分からない思います。

実はこのメッセージ、だいたいの原因は、最後に書いた、「アプリケーションが要求する identifier (識別子) と Azure AD 側で設定している identifier が間違っているようなのでチェックしてください」がその原因である可能性が高いのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ae22f668-885d-1d5d-8ede-d35579054173.png)

上記エラー画面を再現した時の、 Azure AD の SAML 基本設定の識別子 (エンティティ ID) を見てください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/0af79833-a3b3-9fa4-04f2-ccc03631dc9f.png)

識別子を「https://sso.services.box.net/sp/ACS.saml2」 と設定していることがわかりますね。
では、 Box 側は Azure AD にどのような identifier (識別子)を要求しているのかを確認してみましょう。ここで Fiddler が登場します。

Fiddler を使って、上述で試したように test001@shyamag014.onmicrosoft.com ユーザーのアクセス パネルより Box のアイコンをクリック後、 Box のサインイン画面にて、メールアドレスを入力後 、 Box までサインインした一連の HTTPS パケットが下記になります。

その中で 53 行目が SAML Request (Box → Azure AD) になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/b18a2376-4390-fbb5-af72-5ed6a911b64b.png)

53 行目をクリック後、右側の画面を「Inspectors」→「WebForms」の順に選択し、SAML Request 行の Value を右クリックし、「Send to TextWizard」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c1983f37-1884-0514-35e7-42c88e2140aa.png)

TextWizard 画面がポップアップ表示されるので、 Transform のプルダウンより、「From DeflatedSAML」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/6743b473-f27a-7839-6f64-2498cfc5fd18.png)

すると、デコードされた SAML Request の中身が人間が見える形に変換されます。
ここで、<saml:Issuer> </saml:issuer> タグで囲まれた値を見てください。「box.net」と表記されていることが分かりますね。
これはつまり、 Box アプリケーションは Azure AD に対して、 Idntifier (識別子) を 「box.net」でお願いしますね、と要求しているわけです。
上述のとおり、 Azure AD の identifier (識別子) が「https://sso.services.box.net/sp/ACS.saml2」 と設定されていると、 identifier の不一致により、さきほどお見せしたエラー画面が表示され、シングル サインオンに失敗してしまう、というわけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/33b796da-47c8-5bdd-5f1b-c1d97e7a9e7a.png)

ということで、 Azure AD の Identifier (識別子) を「box.net」に修正すれば、このエラーは解消されます。
下記設定を
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/d15595fd-652a-ef5a-894c-e28f35519f36.png)

box.net を識別子として追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/83aab330-ec8f-e485-0905-39fce0ef4e52.png)

ここでもう 1点 解説したいのですが、今まで(少なくともここ数ヶ月前まで)は、 Azure AD 側で設定できる識別子は **1つだけ**でした。
上記画面のように、複数設定することができなかったのですが、最近の機能拡張により追加できるようになりました。

この機能の何が嬉しいかというと、実は Box アプリケーションの場合、 Box 側が要求する Identifier (識別子) が **box.netの時もあればhttps://sso.services.box.net/sp/ACS.saml2**の時もある、という仕様になっており、例えば Azure AD 側でチュートリアルとおり Identifier (識別子) を「box.net」と設定したのに、実は Box 側で要求している Identifier (識別子)が「https://sso.services.box.net/sp/ACS.saml2」 で、結果、シングル サインオンに失敗する、ということが起こり得ました。

しかし、上述のとおり、識別子を複数設定できるようになったため、「box.net」「https://sso.services.box.net/sp/ACS.saml2」 いずれの要求をされても Azure AD 側で対応できるようになったため、シングル サインオンの構成にアプリケーション側の動作の仕様により失敗する、という可能性が軽減することができます。

#Box の試用版を終了する。
もし、検証目的で Box を利用し、正規版は別途購入する、という場合、 14 日間の評価版のアカウントはキャンセルしておいた方がいいでしょう。
14 日間経ってしまうと自動的に請求が発生してしまうからです。

Admin Console より Account & Billing をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/4e6feb67-3038-3d78-2a53-fc49bd5f73f4.png)

Account & Billing 画面より、 Status 行の「Cancel Account」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/67f5a52f-3dc6-a309-8765-bb14a1e7f84c.png)

本当にキャンセルしますか？という確認画面が表示されるので、「Continue Cancelling」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/8d7439ee-fe78-bdc2-59ce-a5ece83f3bea.png)

キャンセルする理由を 3 項目選択し、「Cancel My Account」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/c13fbc2e-95b8-a7c4-c1e6-eecd0e4d5063.png)

下記ポップアップ画面が表示されるので、「No thanks, continue cancelling」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/e2eb8e36-2cd8-a892-0332-44ff64625b60.png)

再度キャンセルを確定させるための画面が表示されるので、すべてのチェック ボックスにチェックを入れて、メールアドレスを入力後に、「Permanently Cancel My Account」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/ad94edf3-bc11-164b-1c47-f68d99a23fd9.png)

以上でキャンセル処理は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373423/a5cfe877-2c58-8f3f-3d5e-3e9de4046ab6.png)

#おわりに
いかがでしたでしょうか。
今回は Box を例に、 Azure AD との統合、シングル サインオン環境の構成、 Fiddler を使って、よくあるシングル サインオン構成時のトラブルシューティングの例をお見せしました。
今回の Blog が少しでもお役に立てれば幸いです。

最後まで読んでいただきありがとうございました。