はじめに
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を活用すればもう少しサクサクとできそうですね😄