Okta

オクタ

はじめに

アプリケーションの認証基盤をAuth0へ移行する際に、ユーザ情報はAuth0へ移行せずに既存ユーザデータベースを引き続き利用したい場合、「Custom Database Connection機能」を利用することで、既存ユーザデータベースに格納されたユーザ情報を参照する形で、Auth0を介したログイン処理を実現できます。

はじめに

本ページでは、Custom Database Connection機能による既存ユーザデータベースとの連携について、必要な設定手順をご紹介します。

前提

本ページ内の手順及びログイン動作確認で使用する既存ユーザデータベース環境は、以下の通りです。

  • データベース環境:Amazon RDSを利用
    • MySQLバージョン8.0.28
    • Auth0テナントよりネットワーク接続可能であること

※実環境では、インターネットからデータベースに対して直接接続することが難しいケースがあります。その場合は、データベース参照用のAPIを設ける等の対応が必要となります。

  • データベース名:userdb
  • テーブル名:members
  • テーブルに格納するユーザ情報:
Id UserName Email 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のカスタマイズ
    既存ユーザデータベースとのログイン処理を実施するスクリプトを定義

設定例

1. Custom Database Connection機能の設定
  • [ Authentication ] > [ Database ]をクリック
[ Authentication ] > [ Database ]をクリック
  • [ + Create DB connection ]をクリック
[ + Create DB connection ]をクリック
  • Name欄に任意のコネクション名を入力し、[ Create ]をクリック
Name欄に任意のコネクション名を入力し、[ Create ]をクリック
  • [Custom Database]タブで、[ Use my own database ]を有効化
[Custom Database]タブで、[ Use my own database ]を有効化
2. Database Action Scriptのカスタマイズ
  • [Custom Database]タブ > Database Action Script > [ Login ]タブで、[ Load Template ]からMySQL(MySQL用テンプレート)を選択
[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 ]をクリック
接続テストのため、[ Save And Try ]をクリック
  • 既存ユーザデータベース内のユーザ情報を入力し、[ Try ]をクリック
既存ユーザデータベース内のユーザ情報を入力し、[ Try ]をクリック
  • 以下メッセージが表示されることで、接続テストの成功を確認
以下メッセージが表示されることで、接続テストの成功を確認

ログイン確認方法の例:既存ユーザデータベース内のユーザによるログイン

1. Auth0連携済のWebアプリケーション画面でログイン操作を行い、Auth0が提供するログイン画面に遷移
2. 既存ユーザデータベース内のユーザ情報でログインを実施
既存ユーザデータベース内のユーザ情報でログインを実施
既存ユーザデータベース内のユーザ情報でログインを実施
3. 既存ユーザデータベースのユーザ情報でWebアプリケーションへログインできたことを確認

おわりに

Custom Database Connection機能の利用により、既存ユーザデータベースに格納されたユーザ情報でのログインを簡単に実現できます。本機能は、無償のAuth0トライアル環境でも利用できますので、是非お試しください。

 Auth0では、今回ご紹介したCustom Database Connection機能を利用した、自動マイグレーションというユーザ移行方法を備えています。自動マイグレーション機能では、ユーザがログインしたタイミングで、既存ユーザデータベースからAuth0ユーザデータベースへユーザを移行できます。Auth0にご興味ある方は、是非弊社までお問合せください。

参考

お問い合わせ・資料請求

株式会社マクニカ  Okta 担当

月~金 8:45~17:30