Auth0を使ってはじめるSAMLを使った認証

はじめに

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を使った認証の準備

  • 新規アカウントではじめます

個人テナントの準備

テナント作成

  • アカウントの作成後テナントを聞かれるので名前をつけます

    • 今回はデフォルトの名前で作成しました

11-1

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

11-2

アプリケーションの作成

  • Applicationsから CREATE APPLICATION を選択する

11-7

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

11-19

  • 作成したアプリケーションの Settings から各 URLs を設定する

    • http://localhost:3000

11-21

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

  • Auth0 Management API を選択する

11-14

  • Create & AUTHORIZE TEST APPLICATION を選択する

11-15

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

11-16

各社のテナントの準備

株式会社Aのテナントを作成

  • ヘッダーの Create tenant からテナントを作成するフォームを開きます

11-3

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

11-4

A社のアプリケーションの作成

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

11-7

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

11-8

  • 設定を開く

11-9

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

11-11

  • Certificates を選択し、 Signing Certificate の内容をコピーします

11-12

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

11-13

  • アドオンを有効化する

11-22

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

11-24

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

11-23

株式会社Bのテナントを作成

  • ヘッダーの Create tenant からテナントを作成するフォームを開きます

11-3

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

11-5

B社のアプリケーションの作成

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

11-7

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

11-8

  • 設定を開く

11-10

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

11-11

  • Certificates を選択し、 Signing Certificate の内容をコピーします

11-12

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

11-13

  • アドオンを有効化する

11-25

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

11-26

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

11-27

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 をクリックする

11-17

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

11-18

SAMLを使った認証の設定

個人テナントのアプリケーション

  • Connections から利用する認証を有効化する 11-20

各社のドメインの設定

  • 各社ごとに自社のドメインでのみログインがしたいので各社ごとのドメインを設定する

    • A社のSAMLでは a.co.jp
    • B社のSAMLでは b.co.jp
  • A社では(便宜上) gmail.com 11-28
  • B社では(便宜上) icloud.com 11-29

Auth0のApplicationを使って動作確認

サンプルApplicationをダウンロード

  • 個人テナントで作成したアプリケーション 11-30
  • 必要なのは Sample なので DOWNLOAD SAMPLE をクリック 11-31
  • 設定はすべてここまでで終わってるので DOWNLOAD をクリック

11-32

サンプルApplicationを起動

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

サンプルApplicationで動作確認

  • 右上のLoginをクリック 11-33
  • Auth0の個人テナントのSAMLに登録してあるドメインと一致するか検証 11-34
  • Auth0の個人テナントに登録してないドメインは弾かれます 11-35
  • Auth0の個人テナントに登録済みのドメインは通ります 11-36
  • 特に問題なければこのままテナントへ情報の提供を許可しましょう 11-37
  • サンプルアプリケーションにログインできているのが確認できました 11-38

作成したアカウントの確認

  • 個人テナントのUsersには各社のアカウントがそれぞれ作成されています 11-39
  • A社のテナントのUsersに指定したドメインのアカウントが作成されています 11-40
  • B社のテナントのUsersに指定したドメインのアカウントが作成されています 11-41

結論

  • 1つの認証画面でアカウントを振り分けれるか?

    • ⭕振り分けられます
  • SPにもアカウントは作成されるのか?

    • ⭕作成されます
  • IdPごとにアカウントは作成されるのか?

    • ⭕作成されます

さいごに

実際にSAMLをAuth0でやるにはどうしたらいいんだっけ?
というHowの部分と合わせて、私が感じた疑問点なども拾えるようにしてみました😆
複数のテナントの準備が必要だったりなど大変ですが実際にやること自体は少ないです(本来であれば個人テナントだけ)😉

あとはAPIを活用すればもう少しサクサクとできそうですね😄

Auth

Auth0

フリースペース

© 2020, yutanakano