LoginSignup
36
16

More than 5 years have passed since last update.

Auth0のCustom Database Connectionを使ってみる

Last updated at Posted at 2019-04-18

Auth0のCustom Database Connectionを使ってみる

アプケーションにユーザー認証機能を追加したり、API認可をしたいと考えている人は多いですが、それをスクラッチで開発しようとする人は少ないはずです。Auth0はデベロッパーフレンドリーなIdentity and Access Managementをクラウド上で提供するIDaaSで、OpenID Connect, OAuth2, SAML, WS-Federaationなどに対応しており、65種類以上の開発スタックに対応しており、パワフルなSDKを提供しています。

Database Connection

では、実際に認証サービスをアプリケーションに組み込む場合にまず考えなければいけないこととして、どのようなユーザーストアを使用するか?です。ユーザーストアには、社員向けであればアクティブディレクトリー(AD)やLDAP、ADFSやAzure ADなどがあります。また外部のSAML Identity Providerなどもありますし、B2C向けであればデータベースやfacebook, Goodleなどのソーシャルサービスもあります。Auth0はこれらのユーザーストアをConnectionと呼んでおり、これら全てのユーザーストアに対応しています (Auth0の概要については、認証プラットフォーム Auth0とは?をご参照ください)。

今回は、Auth0のDatabase Connectionsについて解説したいと思います。

Auth0のDatabase Connectionはデータベースに登録されたEmail(もしくはUsername)/Password認証をするためのConnectionです。標準はAuth0で提供しているDatabaseを使用しますが、もし既存のサービスでユーザーストアにデータベースを使用していたという場合、Auth0のCustom Database機能を利用することで、一括インポートをすることなく既存のデータベースを使用してAuth0認証を行うことが可能になります。
(Custom Database ConnectionはEnterprise Subscriptionプランでのみ利用可能です)

Auth0でDatabase Connectionを使用するためには、Admin Dashboardを起動してテナントの設定を行う必要があります。Admin Dashboard を起動してください。Auth0テナントを持っていない方は、こちら のページを参照して評価用テナントを作成してください。

Database Connectionの作成

まずは、Auth0上にDatabaseを作成します。 Connections > Databaseをクリックします。

スクリーンショット 2019-04-18 17.17.11.png

すると、以下のような画面が表示されますので、+ CREATE DB CONEECTION をクリックします。

スクリーンショット 2019-04-18 17.39.28.png

Database Connectionの構成

Nameに適当なデータベース名を登録して、CREATEをクリックすることで、Auth0標準のデータベース (MongoDB) が作成されました。ちなみにDatabase Connectionsではユーザ認証にEmail/Passwordで本人認証を行うのですが、この画面のRequires UsernameをOnにするとEmailの代わりにUsernameでも認証できるようになります。

スクリーンショット 2019-04-18 18.15.52.png

データベースが作成されると、Setting, Password Policy, Custom Database, Applictions, Try Connectionsという設定画面が選べるようになります。Password Policyでは、パスワードとして使用できる文字種や文字数などを組織のポリシーに合わせて設定できたり、過去に使用したパスワードをx世代分記憶し、再利用できなくするなどのことが設定できます。Applicationsでは、作成したUser DatabaseをAuth0で登録済みのアプリケーションに対して利用可能にするかを選択できます。
もし、Auth0で認証したいユーザーストアが外部のデータベースの場合には、Custom Databaseをクリックします。

スクリーンショット 2019-04-18 19.55.50.png

ここで、Use my own databaseをオンにすると、Auth0データベースではなく、外部データベース(Custom Database)を使用することができるようになります。データベースへの接続は、Database Action Scripts画面で、ログイン用、ユーザ作成用、ユーザー検証用、パスワード変更用、ユーザ情報の取得用、そして削除用にそれぞれJSでスクリプトを定義することができます。Auth0ではMySQL, Oracle, PostgreSQL, MS SQL Server, MongoDBなど向けのScriptテンプレートを用意しています。

script画面の下には、IPアドレスのリストが表示されています。これはAuth0からCustom DatabaseにアクセスしてくるIPアドレスのリストになります。Auth0から直接データベースへアクセスをしますが、不正アクセスを防ぐためにFirewallでInbound IPを制限している場合には、このIPを通すようにしてください。また、直接データベースにアクセスをさせたくない場合には、Database Action ScriptにAPIを定義することも可能です。

Automatic User migration

Custom Databaseに登録されたユーザーで認証をすると、Auth0データベースにユーザー情報(Emailアドレス)が登録されます。もしデータベース設定(Settings)画面のImport Users to Auth0オプションをオンにしていると、Custom Databaseで認証したユーザー情報および、パスワードのハッシュ情報が保管されます。二回目以降はAuth0側にパスワードのハッシュ情報が保管されるため、Custom Databaseには認証要求は飛ばずにAuth0だけで認証が完結できます。

migrating-diagram.png
詳細はこちらで解説しています。

実際に認証してみる

それでは、実際にCustom Databaseを使用して認証してみましょう。ここではAWS RDSに登録されたユーザーで認証をしてみます。

現在登録されているユーザーは以下の通りです:
スクリーンショット 2019-04-18 20.20.55.png

一方、Auth0でユーザー登録されているのは以下の通りです。
スクリーンショット 2019-04-18 20.22.25.png

この状態で、Auth0に登録されていないユーザーで認証を行ってみます。
スクリーンショット 2019-04-18 20.25.17.png

すると、Auth0データベース側には登録されていなかったユーザーで認証ができ、認証後にAuth0のUsersメニューをみてみると、Custom Databaseに登録されていたユーザーが登録されていることが確認できます。
スクリーンショット 2019-04-18 20.28.08.png

まとめ

いかがでしたでしょうか?
もし既存サービスでユーザーデータベースがあるという場合、他社のサービスではデータベースを使うことはできず、データベースに登録されたユーザーを認証サービスに一括インポートしないといけないという制約があるものがほとんどです。一方、Auth0はCustom Datbase Connection機能を使用することで、既存システムになるべく手を加えることなく簡単に認証をAuth0で統合することができることが確認できたかと思います。
既存サービスを新基盤に刷新したいが変更範囲は最小にしたい、モダンな認証サービスを利用したいという方にはAuth0はおすすめの認証サービスです。Auth0のトライアルに申し込むと22日間はCustom Database Connectionを含む、全ての機能を利用することが可能です。認証サービスを検討されている方は、一度お試しいただくことをお勧めいたします。

36
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
16