Auth0をSAML Identity Provider/SAML Service Providerとして使う #Auth0JP

Auth0はSAML(Security Assertion Markup Language)連携の機能を持っています。このブログではSAML Identity Provider、SAML Service Providerとしての機能を2つのテナントを通して試してみました。
2019.09.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Auth0のSAML連携の機能

Auth0はSAML(Security Assertion Markup Language)連携について、以下の機能を持っています。

  • SAML Identity Provider(SAML IdP)として : アプリケーションにログインする手段としてSAMLの認証プロバイダとなる
  • SAML Service Provider(SAML SP)として : 接続先(Connection)をSAMLで連携する(SAML Identity Providerからシングルサインオンさせる)

今回はSAML Identity Provider(SAML IdP)、SAML Service Provider(SAML SP)のそれぞれの機能をAuth0にテナントを2つ用意して試します。

Auth0のブログで紹介されている内容もかなり参考になりますので、あわせてご覧ください。

「SAML Identity Providerとして使う」とは?

特にエンタープライズ向けのサービス・ツールでは、組織で使う際のID管理を「SAML Identity Providerで行う」形式が取られている場合が多いです。例えば以下の記事のようなケースです。

こちらの2つの記事では、Tableau Server、Alteryx Serverといったサービスで、Auth0をSAML Identity Providerとして使っています。これが実現できるのは、Tableau Server、Alteryx ServerがそれぞれSAML認証をサポートしているからです。

SAMLの用語として、SAML連携をサポートしている認証プロバイダをSAML Identity Providerと呼びます。

「SAML Service Provider(SAML SP)として使う」とは?

Auth0の最大の特徴は 多種多彩な接続方式 にあります。ソーシャルコネクション(Google, LINE, Facebook, Amazonなど)に目が行きがちですが、エンタープライズ向けの連携ができるように、SAMLやAD、LDAPなどの連携機能も提供しています。

特にエンタープライズ向けの認証基盤製品はSAML連携をサポートしていることが多いです。

SAMLの用語として、SAMLでシングルサインオンさせる先をSAML Service Providerと呼びます。

2つのテナントで試してみる

今回は Auth0に2つのテナントを用意 し、SAML IdP / SAML SPのそれぞれの機能を持たせた構成を作ってみたいと思います。

  • TenantA(SAML IdPテナント) : SAML IdPとして使うテナント
  • TenantB(SAML SPテナント) : SAML SPとして使うテナント
|App| <-> |TenantB| <-> |TenantA|

TenantA(SAML IdPテナント)を設定する

まずはSAML IdPテナントとなるTenantAの設定です。テナント自体は作成済みの前提で進めますので、あらかじめ作成しておきましょう。

「CREATE APPLICATION」をクリックし、Application(Client)を新規作成します。

Application Typeは「Regular Web Application」を選択しましょう。

項目
Name SAML IdP App
Application Type Regular Web Application

次に、TenantB(SAML SPテナント)にSAML連携を設定するための情報を集めます。「Settings」タブをクリックし、下にスクロールし「Show Advanced Settings」をクリックします。

「Certificates」タブを開き「DOWNLOAD CERTIFICATE」をクリックし、PEM形式の証明書をダウンロードします。

次に「Endpoints」タブを SAML Protocol URLSAML Metadata URL のURLをコピーし、テキストファイルなどに記録しておきます。こちらはTenantB(SAML SPテナント)に設定する際に使用します。

TenantB(SAML SPテナント)を設定する

次にSAML SPとなるTenantBの設定です。こちらもテナント自体は作成済みの前提で進めますので、あらかじめ作成しておきましょう。ダッシュボードのテナントをTenantBに切り替えてください。

左メニューの「Connections」の「Enterprise」を開き、「SAMLP Identity Provider」の「+」をクリックします。

いくつかの設定を行います。下記に記載している項目以外はそのままで問題ありません。

項目
Connection Name SAML-SP(自由に設定してください)
Sign In URL 事前にコピーしておいたSAML Protocol URL
X509 Signing Certificate 事前にダウンロードしておいたPEM形式の証明書ファイル
Sign Out URL 事前にコピーしておいたSAML Protocol URL

「SAVE」をクリックし、設定を完了します。

TenantA(SAML IdPテナント)にTenantB(SAML SPテナント)を設定する

次にTenantA(SAML IdPテナント)に、TenantB(SAML SPテナント)からのSAML認証リクエストを受け付けられるように設定を行います。再度TenantA(SAML IdPテナント)の設定に戻ります。ダッシュボードのテナントをTenantAに切り替えてください。

左メニューから「Applications」を開き、先ほど作成したApplicationの設定を開きます。

「Addons」セクションの「SAML2 SAML2 WEB APP」をクリックします。

「Application Callback URL」に、以下のURLを指定します。

https://【TenantBのドメイン】.auth0.com/login/callback?connection=【TenantBに設定したSAMLP Connection名】

例えば【TenantBのドメイン】が tenant-b 、【TenantBに設定したSAMLP Connection名】が SAML-SP の場合は以下のURLになります。

https://tenant-b.auth0.com/login/callback?connection=SAML-SP

以上で完了です。

サンプルアプリケーションで試す

最後に、サンプルアプリケーションで動作を確認してみましょう。

TenantB(SAML SPテナント)に新規Applicationを作成します。サンプルアプリケーションの作り方は以下を参考にしてください。

「Connections」タブで今回作成したSAML Connectionだけ有効にしておくと分かりやすいです。

「Login」をクリックするとTenantB(SAML SPテナント)のログイン画面が表示されます。「Login at SAML-SP」が表示されています。

「Login at SAML-SP」をクリックすると、TenantA(SAML IdPテナント)のログイン画面が表示されます。TenantA(SAML IdPテナント)側でユーザーを作成していない場合は「Sign Up」タブでユーザーを新規登録します。

サンプルアプリケーションの認可画面が表示されたあと、サンプルアプリケーションでログイン済みの状態になります。sub を見てみると、SAMLでログインされたユーザーであることが分かります。

samlp|SAML-SP|auth0|5cd4ece6c01a01110eec67a2

SAML連携を試してみたい場合に活用しよう

今回はAuth0のみでSAML Identity Provider(SAML IdP)としての機能、SAML Service Provider(SAML SP)としての機能を試しました。これは以下のような場合に有用です。

  • Auth0の接続先としてSAML IdPを使う予定だが、SAML IdPをモック化して試したい
  • Auth0をSAML IdPとして使う予定だが、SAML SPを用意する前にSAML IdPとしての利用方法を知りたい
  • SAML連携する環境を開発向けに用意したい

SAMLはエンタープライズ向けのツールやサービスでのユースケースが多いのですが、開発環境が十分に用意できなかったり、環境準備までに時間がかかってしまうことがあります。Auth0をうまく使いこなしながら開発効率を高めましょう!