Contents
Auth0と既存ユーザーデータベースを連携する概要
本ガイドでは、Auth0のカスタムデータベース接続機能を使って、既存ユーザー情報をAuth0に統合する方法を解説します。対象読者には、Webアプリケーション開発者とシステム管理者が含まれます。
接続の目的とアプローチ
- Auth0ダッシュボードでの設定(UI操作)で迅速なテストが可能。
- Management APIによるプログラム的接続で自動化やDevOps環境に適応。
- 両手法を組み合わせることで、セキュリティと拡張性のバランスを取った認証設計が実現できます。
事前準備: 環境構築と設定
Auth0との連携には、いくつかの前提条件が求められます。以下に必要な準備項目を確認してください。
Node.js環境の確認
Node.jsはカスタム認証フローの実装に必須です。以下のコマンドでバージョンを確認し、必要に応じて最新版にアップグレードしてください:
|
1 2 3 |
node -v npm install auth0 |
注意:@auth0/auth0-spa-jsはSPA用のライブラリであり、サーバーサイドコードには不要です。
Auth0アカウント作成
Auth0の公式サイト(https://auth0.com)でアカウントを作成し、テナントを設定してください。Domain名とClient ID/Secretは後述のNode.js実装時に必要になります。
既存データベース接続情報の取得
DBアクセス用に以下の情報を準備する必要があります:
| 項目 | 値例 | 補足 |
|---|---|---|
| ホスト名 | localhost:5432 |
PostgreSQL、MySQLなど DB種別を明示してください。 |
| ユーザー名・パスワード | user1/password123 |
DBアクセス用専用アカウントを使用することを推奨。 |
| データベース名 | mydb |
認証テーブルが存在するDBを指定。 |
| 認証テーブル構造 | users(email, password_hash) |
Auth0の接続設定で一致させる必要があります。 |
注意点:SQLクエリにおけるプレースホルダ(例:
$1)はPostgreSQL固有です。他DBには適切な形式に変更してください。
Auth0ダッシュボードでカスタム接続を設定する手順
Auth0ダッシュボードからカスタムデータベース接続を作成します。この方法はUI操作中心ですが、初期設定やテストに最適です。
接続タイプ選択
- Dashboard > Authentication(認証) > Database(データベース) へアクセスします。
- 「Create DB Connection(DB接続の作成)」をクリックし、Custom Databaseを選択します。
補足:他の接続タイプ(例:GoogleやFacebook)は、SAMLまたはOAuth2を使用するため、ここではカスタムDBに限定しています。
認証フロー構成
- ユーザーの認証に使用するフィールド名を指定します(例:
emailとpassword)。 - 戻りURL(Callback URL) を登録し、アプリケーションとの連携を確定させます。
トークン設定
- ID Tokenの有効期限やアクセストークンの発行方法を選択します。
- Scopes(スコープ) を必要な項目に限定します(例:
openid profile email)。
補足:スコープはアプリケーションごとに最適化してください。
Management APIを使って接続を作成する方法
Auth0のManagement APIを用いると、プログラムで接続情報を管理できます。このアプローチは、DevOps環境やカスタムCI/CDパイプラインでの自動化に適しています。
接続情報のJSON構造
以下は接続作成に必要なJSON例です。項目名はAuth0の公式ドキュメントを参照してください。
|
1 2 3 4 5 6 7 8 9 |
{ "name": "custom-db-connection", "strategy": "custom-database", // 適切な戦略名が重要 "options": { "username_field": "email", "password_field": "password" } } |
認証付きリクエスト実装
Node.jsでリクエストを送る例です:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
const axios = require('axios'); const jwt = require('jsonwebtoken'); const auth0Domain = 'your-auth0-domain'; const clientId = 'YOUR_CLIENT_ID'; const clientSecret = 'YOUR_CLIENT_SECRET'; const token = jwt.sign({ aud: `https://${auth0Domain}/api/v2/` }, clientSecret); async function createConnection() { const response = await axios.post( `https://${auth0Domain}/api/v2/connections`, { name: 'custom-db-connection', strategy: 'custom-database', // 正しい戦略名を指定 options: { username_field: 'email', password_field: 'password' } }, { headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' } } ); console.log('Connection created:', response.data); } |
Node.jsでカスタム認証フローを実装する
Node.js環境で、Auth0のカスタム接続に合わせた認証ロジックを構築します。以下はExpress.jsベースのサンプルです。
認証サーバー構築
|
1 2 3 4 5 6 7 8 9 10 11 |
const express = require('express'); const app = express(); const { ManagementClient } = require('@auth0/auth0-management'); // Auth0 Management APIクライアントを初期化 const managementClient = new ManagementClient({ domain: 'your-auth0-domain', clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET' }); |
データベース検索処理
ユーザーの認証時に、DBから該当するレコードを検索します。ここではSQLクエリを使って例示します:
|
1 2 |
SELECT * FROM users WHERE email = $1; |
注意:実装時はプリペアドステートメントやORMを使用し、SQLインジェクション対策を施してください。
トークン発行ロジック
検索結果が一致した場合、Auth0 SDKを使ってトークンを発行します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
const { ManagementClient } = require('@auth0/auth0-management'); const managementClient = new ManagementClient({ domain: 'your-auth0-domain', clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET' }); async function login(email, password) { const user = await queryDatabase(email); // DB接続処理 if (!user || !await verifyPassword(user.password_hash, password)) { throw new Error('認証失敗'); } const tokenResponse = await managementClient.tokens.create({ grant_type: 'password', username: email, password: password, scope: 'openid profile email' }); console.log('Login token:', tokenResponse); } |
既存データベースとの連携手順と注意点
Auth0と既存DBを接続する際には、以下の点に特に注意してください。
スキーマ設計の整合性
- Auth0が期待する認証フィールド(例:
email)と既存DBのカラム名が一致しているか確認します。 - パスワードハッシュはbcryptなどAuth0がサポートするアルゴリズムで統一してください。
セキュリティ設定
- DBアクセス用のユーザーに最小限の権限を付与し、SQLインジェクションやDoS攻撃への対策を行います。
- SSL接続を有効にし、通信内容を暗号化します。
実装後のテストケース
| テスト項目 | 内容 | 期待結果 |
|---|---|---|
| 正常認証 | 有効なユーザーIDとパスワードでログイン | アクセストークンが発行される |
| 無効認証 | 存在しないメールアドレスを入力 | エラーレスポンスが返る |
| パスワードミスマッチ | 正しいメール、誤ったパスワード | 認証失敗 |
まとめ
本記事では、Auth0と既存データベースの連携方法を、以下の手順で詳しく解説しました:
- 事前準備(Node.js環境・Auth0アカウント・DB接続情報)
- ダッシュボードでの接続設定
- Management APIによるプログラム的作成
- Node.jsでの認証フロー構築
- セキュリティとテストの注意点
Auth0管理画面にアクセスしてカスタム接続を設定し、Node.js環境での実装を試してください。実践的に導入することで、認証フローの柔軟性と安全性が向上します。