はじめに
Hello World😊東京都中野区在住の中野です😃
転職して早いもので、もうすぐ2ヶ月になります😄
入社してからは認証認可に関することをやっています👀
ちなみに私の認証認可に関する理解はペラッペラです😭
さて、今日はAuth0を使ってSAMLで認証をできるようにしていきたいと思います😄
また、最後には以下の疑問にも答えていきたいと思います😆
- IdPごとにアカウントは作成されるのか?
- SPにもアカウントは作成されるのか?
- 1つの認証画面でアカウントを振り分けれるか?
前提
前提知識
登場人物
今回は登場人物すべてがAuth0ですが、IdPはAuth0でなくても可能です。 契約の違いや無料枠でできることの違いなどはあるので今回はAuth0のみにしてます。
| 名前 | 役割 | 説明 |
|---|---|---|
| Auth0 | - | IDaaS |
| 個人テナント | SP | Auth0に作成している個人のテナント |
| tenant-idp-a | IdP | 株式会社AがAuth0に作成しているテナント |
| tenant-idp-b | IdP | 株式会社BがAuth0に作成しているテナント |
SAMLを使った認証の準備
- 新規アカウントではじめます
個人テナントの準備
テナント作成
-
アカウントの作成後テナントを聞かれるので名前をつけます
- 今回はデフォルトの名前で作成しました

- アカウントの種別を選択します
- 今回は個人でやるのでPersonalで作成しました

アプリケーションの作成
- Applicationsから
CREATE APPLICATIONを選択する

- Applicationの名前と種類を決める(ここではSPAを選択)

-
作成したアプリケーションの
Settingsから各URLsを設定するhttp://localhost:3000

Auth0 Management API のトークンを取得する
Auth0 Management APIを選択する

Create & AUTHORIZE TEST APPLICATIONを選択する

Tokenをコピーします(メモ帳などに残しておきましょう)

各社のテナントの準備
株式会社Aのテナントを作成
- ヘッダーの
Create tenantからテナントを作成するフォームを開きます

- 株式会社Aのテナントを作成します

A社のアプリケーションの作成
- 各社のテナントに切り替えながらアプリケーションを作成していきます

- A社のテナントでアプリケーションの作成を行う

- 設定を開く

- 下にスクロールすると
Show Advanced Settingがあるのでクリックする

-
Certificatesを選択し、Signing Certificateの内容をコピーします- base64エンコード/デコードツールを使ってコピーした
Signing Certificateをエンコードしておきます(メモ帳などに残しておきましょう)
- base64エンコード/デコードツールを使ってコピーした

Endpointsを選択肢SAML Protocol URLの内容をコピーします(メモ帳などに残しておきましょう)

- アドオンを有効化する

Application Callback URLの設定を行う
https://【個人テナント名】.auth0.com/login/callback?connection=【SAML名】

- アドオンが有効化されている

株式会社Bのテナントを作成
- ヘッダーの
Create tenantからテナントを作成するフォームを開きます

- 株式会社Bのテナントを作成します

B社のアプリケーションの作成
- 各社のテナントに切り替えながらアプリケーションを作成していきます

- B社のテナントでアプリケーションの作成を行う

- 設定を開く

- 下にスクロールすると
Show Advanced Settingがあるのでクリックする

-
Certificatesを選択し、Signing Certificateの内容をコピーします- base64エンコード/デコードツールを使ってコピーした
Signing Certificateをエンコードしておきます(メモ帳などに残しておきましょう)
- base64エンコード/デコードツールを使ってコピーした

Endpointsを選択肢SAML Protocol URLの内容をコピーします(メモ帳などに残しておきましょう)

- アドオンを有効化する

Application Callback URLの設定を行う
https://【個人テナント名】.auth0.com/login/callback?connection=【SAML名】

- アドオンが有効化されている

Auth0のテナントにSAMLを登録
curlを作成
- 各社の情報を入力しcurlを作成する
curl --request POST \
--url 'https://【自社テナント名】.auth0.com/api/v2/connections' \
--header 'authorization: Bearer 【自社テナントの ManagementAPI Token】' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data '{"strategy": "samlp","name": "【SAMLの名前(変更不可)】","display_name":"【SAMLの表示名】","options": {"signInEndpoint": "【SAML Protocol URL】","signOutEndpoint": "【SAML Protocol URL】","signatureAlgorithm": "rsa-sha256","digestAlgorithm": "sha256","signingCert": "【Signing Certificate(bese64にエンコードした証明書)】"}}'
curlの結果を確認
SAMLをクリックする

- SAML一覧の中に作成したSAMLが存在します

SAMLを使った認証の設定
個人テナントのアプリケーション
Connectionsから利用する認証を有効化する
各社のドメインの設定
-
各社ごとに自社のドメインでのみログインがしたいので各社ごとのドメインを設定する
- A社のSAMLでは
a.co.jp - B社のSAMLでは
b.co.jp
- A社のSAMLでは
- A社では(便宜上)
gmail.com
- B社では(便宜上)
icloud.com
Auth0のApplicationを使って動作確認
サンプルApplicationをダウンロード
- 個人テナントで作成したアプリケーション

- 必要なのは Sample なので
DOWNLOAD SAMPLEをクリック
- 設定はすべてここまでで終わってるので
DOWNLOADをクリック

サンプルApplicationを起動
- Auth0からダウンロードしたサンプルアプリケーションをローカルで起動する

サンプルApplicationで動作確認
- 右上のLoginをクリック

- Auth0の個人テナントのSAMLに登録してあるドメインと一致するか検証

- Auth0の個人テナントに登録してないドメインは弾かれます

- Auth0の個人テナントに登録済みのドメインは通ります

- 特に問題なければこのままテナントへ情報の提供を許可しましょう

- サンプルアプリケーションにログインできているのが確認できました

作成したアカウントの確認
- 個人テナントのUsersには各社のアカウントがそれぞれ作成されています

- A社のテナントのUsersに指定したドメインのアカウントが作成されています

- B社のテナントのUsersに指定したドメインのアカウントが作成されています

結論
-
1つの認証画面でアカウントを振り分けれるか?
- ⭕振り分けられます
-
SPにもアカウントは作成されるのか?
- ⭕作成されます
-
IdPごとにアカウントは作成されるのか?
- ⭕作成されます
さいごに
実際にSAMLをAuth0でやるにはどうしたらいいんだっけ?
というHowの部分と合わせて、私が感じた疑問点なども拾えるようにしてみました😆
複数のテナントの準備が必要だったりなど大変ですが実際にやること自体は少ないです(本来であれば個人テナントだけ)😉
あとはAPIを活用すればもう少しサクサクとできそうですね😄















