#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をクリックします。
すると、以下のような画面が表示されますので、+ CREATE DB CONEECTION をクリックします。
###Database Connectionの構成
Nameに適当なデータベース名を登録して、CREATEをクリックすることで、Auth0標準のデータベース (MongoDB) が作成されました。ちなみにDatabase Connectionsではユーザ認証にEmail/Passwordで本人認証を行うのですが、この画面のRequires UsernameをOnにするとEmailの代わりにUsernameでも認証できるようになります。
データベースが作成されると、Setting, Password Policy, Custom Database, Applictions, Try Connectionsという設定画面が選べるようになります。Password Policyでは、パスワードとして使用できる文字種や文字数などを組織のポリシーに合わせて設定できたり、過去に使用したパスワードをx世代分記憶し、再利用できなくするなどのことが設定できます。Applicationsでは、作成したUser DatabaseをAuth0で登録済みのアプリケーションに対して利用可能にするかを選択できます。
もし、Auth0で認証したいユーザーストアが外部のデータベースの場合には、Custom Databaseをクリックします。
ここで、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だけで認証が完結できます。
詳細はこちらで解説しています。
##実際に認証してみる
それでは、実際にCustom Databaseを使用して認証してみましょう。ここではAWS RDSに登録されたユーザーで認証をしてみます。
一方、Auth0でユーザー登録されているのは以下の通りです。
この状態で、Auth0に登録されていないユーザーで認証を行ってみます。
すると、Auth0データベース側には登録されていなかったユーザーで認証ができ、認証後にAuth0のUsersメニューをみてみると、Custom Databaseに登録されていたユーザーが登録されていることが確認できます。
##まとめ
いかがでしたでしょうか?
もし既存サービスでユーザーデータベースがあるという場合、他社のサービスではデータベースを使うことはできず、データベースに登録されたユーザーを認証サービスに一括インポートしないといけないという制約があるものがほとんどです。一方、Auth0はCustom Datbase Connection機能を使用することで、既存システムになるべく手を加えることなく簡単に認証をAuth0で統合することができることが確認できたかと思います。
既存サービスを新基盤に刷新したいが変更範囲は最小にしたい、モダンな認証サービスを利用したいという方にはAuth0はおすすめの認証サービスです。Auth0のトライアルに申し込むと22日間はCustom Database Connectionを含む、全ての機能を利用することが可能です。認証サービスを検討されている方は、一度お試しいただくことをお勧めいたします。