Okta
オクタ
はじめに
アプリケーションの認証基盤をAuth0へ移行する際に、ユーザ情報はAuth0へ移行せずに既存ユーザデータベースを引き続き利用したい場合、「Custom Database Connection機能」を利用することで、既存ユーザデータベースに格納されたユーザ情報を参照する形で、Auth0を介したログイン処理を実現できます。
本ページでは、Custom Database Connection機能による既存ユーザデータベースとの連携について、必要な設定手順をご紹介します。
前提
本ページ内の手順及びログイン動作確認で使用する既存ユーザデータベース環境は、以下の通りです。
- データベース環境:Amazon RDSを利用
- MySQLバージョン8.0.28
- Auth0テナントよりネットワーク接続可能であること
※実環境では、インターネットからデータベースに対して直接接続することが難しいケースがあります。その場合は、データベース参照用のAPIを設ける等の対応が必要となります。
- データベース名:userdb
- テーブル名:members
- テーブルに格納するユーザ情報:
Id | UserName | Password※ | |
user01 | test.user1 | test.user1@example.com | $2a$0...(中略)...iH8du |
user02 | test.user2 | test.user2@example.com | $2a$0...(中略)...iH8du |
※bcryptによるハッシュ値
本ページ内の動作例では、Auth0連携済のWebアプリケーションを対象とします。
また、本ページに記載する機能及び設定に関する内容は、2022年12月現在の情報となります。
機能概要
Custom Database Connection機能の利用にあたり、既存ユーザデータベースに対する各種処理のために、Database Action Scriptと呼ばれるスクリプトの実装が必要です。主要なデータベース製品に対応するスクリプトのテンプレートが予め用意されていますので、手順は難しくありません。
Database Action Scriptは、以下表の通り処理種類別に実装が必要です。ログイン用スクリプトは必ず実装する必要がありますが、その他は、実現したい処理に応じて実装します。本ページでは、ログイン処理を対象とし、ログイン用スクリプトのみを実装します。
設定概要
Custom Database Connection機能を利用した既存ユーザデータベースによるログインの実現には、以下の設定が必要です。
- Custom Database Connection機能の設定
Custom Database Connectionを新規に定義し、既存ユーザデータベースとの連携を有効化 - Database Action Scriptのカスタマイズ
既存ユーザデータベースとのログイン処理を実施するスクリプトを定義
設定例
- [ Authentication ] > [ Database ]をクリック
- [ + Create DB connection ]をクリック
- Name欄に任意のコネクション名を入力し、[ Create ]をクリック
- [Custom Database]タブで、[ Use my own database ]を有効化
- [Custom Database]タブ > Database Action Script > [ Login ]タブで、[ Load Template ]からMySQL(MySQL用テンプレート)を選択
※スクリプトエディタ下部に記載があるIPアドレスは、Auth0テナントが既存ユーザデータベースにアクセスする際の、アクセス元IPアドレスです。既存ユーザデータベース側で、当該IPアドレスからのアクセス許可が必要です。
- 既存ユーザデータベースへの接続パラメータ、テーブル情報、パスワードの暗号化アルゴリズム等に合わせて、テンプレートスクリプトを編集
function login(email, password, callback) { const mysql = require('mysql'); const bcrypt = require('bcrypt'); const connection = mysql.createConnection({ host: ‘データベースのホスト名', user: 'ユーザ名', password: 'パスワード', database: 'データベース名', port: ポート番号 }); connection.connect(); const query = 'SELECT ID, UserName, Email, Password FROM members WHERE Email = ?'; connection.query(query, [ email ], function(err, results) { if (err) return callback(err); if (results.length === 0) return callback(new WrongUsernameOrPasswordError(email)); const user = results[0]; bcrypt.compare(password, user.Password, function(err, isValid) { if (err || !isValid) return callback(err || new WrongUsernameOrPasswordError(email)); callback(null, { user_id: user.ID.toString(), //nickname: user.nickame, email: user.Email }); }); }); }
- 接続テストのため、[ Save And Try ]をクリック
- 既存ユーザデータベース内のユーザ情報を入力し、[ Try ]をクリック
- 以下メッセージが表示されることで、接続テストの成功を確認
ログイン確認方法の例:既存ユーザデータベース内のユーザによるログイン
おわりに
Custom Database Connection機能の利用により、既存ユーザデータベースに格納されたユーザ情報でのログインを簡単に実現できます。本機能は、無償のAuth0トライアル環境でも利用できますので、是非お試しください。
Auth0では、今回ご紹介したCustom Database Connection機能を利用した、自動マイグレーションというユーザ移行方法を備えています。自動マイグレーション機能では、ユーザがログインしたタイミングで、既存ユーザデータベースからAuth0ユーザデータベースへユーザを移行できます。Auth0にご興味ある方は、是非弊社までお問合せください。
参考
お問い合わせ・資料請求
株式会社マクニカ Okta 担当
- TEL:045-476-2010
- E-mail:okta@macnica.co.jp
平日 9:00~17:00