---
title: "Auth0 コネクタ"
description: "Tajo を介して Auth0 のユーザー認証データ、ID プロファイル、アクセスイベントを Brevo と同期するための完全な Auth0 統合ガイド。"
url: https://tajo.io/jp/docs/connectors/custom/auth0/
markdown: https://tajo.io/jp/docs/connectors/custom/auth0.md
lang: ja-JP
robots: noindex
---

先行利用を申し込む

お名前と会社のメールアドレスを入力してください。Tajoへのアクセス申請を確認するためのリンクをメールでお送りします。

# Auth0 コネクタ

コネクターのステータス: 予定 まだ構築されていません。Tajo は現在このコネクターを実行していません。

| 送信元フィールド | 送信先フィールド | サンプル値 |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Tajo を介して Auth0 を Brevo に接続し、認証されたユーザープロファイルをマーケティング連絡先として同期し、認証イベントに基づく自動化をトリガーし、ID およびアクセス管理のインサイトで顧客データを強化します。

## 概要

| プロパティ | 値 |
| --- | --- |
| **プラットフォーム** | Auth0(Okta 提供) |
| **カテゴリ** | ID とアクセス(カスタム) |
| **セットアップの複雑さ** | 中 |
| **公式統合** | いいえ |
| **同期データ** | ユーザー、イベント、ロール、ID |
| **認証方式** | マシン間 OAuth 2.0 |

## 機能

- **ユーザープロファイル同期** - Auth0 ユーザープロファイルを Brevo 連絡先に同期
- **認証イベント** - ログイン、サインアップ、パスワードリセット時に自動化をトリガー
- **ロールベースセグメンテーション** - Auth0 のロールと権限に基づいて連絡先をセグメント
- **ソーシャル ID データ** - ソーシャルログインのプロファイル情報で連絡先を強化
- **ログインアクティビティトラッキング** - 最終ログイン、ログイン回数、デバイスデータをトラッキング
- **マルチテナントサポート** - 複数の Auth0 テナント間でユーザーを同期

## 前提条件

開始する前に、以下を準備してください。

1. API アクセス可能な Auth0 アカウント
2. Auth0 に登録済みのマシン間アプリケーション
3. M2M アプリケーションに付与された Management API 権限
4. API アクセス可能な Brevo アカウント
5. コネクタ権限を持つ Tajo アカウント

## 認証

### マシン間 OAuth 2.0

```bash
# Auth0 ダッシュボードで M2M アプリケーションを作成
export AUTH0_DOMAIN=your-tenant.auth0.com
export AUTH0_CLIENT_ID=your_client_id
export AUTH0_CLIENT_SECRET=your_client_secret
export AUTH0_AUDIENCE=https://your-tenant.auth0.com/api/v2/
```

```javascript
// Management API アクセストークンを取得
const tokenResponse = await fetch(
  `https://${process.env.AUTH0_DOMAIN}/oauth/token`,
  {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      client_id: process.env.AUTH0_CLIENT_ID,
      client_secret: process.env.AUTH0_CLIENT_SECRET,
      audience: process.env.AUTH0_AUDIENCE,
      grant_type: 'client_credentials'
    })
  }
);

const { access_token } = await tokenResponse.json();
// トークンはデフォルトで 24 時間有効
```

API 権限

M2M アプリケーションには必要なスコープのみを付与してください: `read:users`、`read:user_idp_tokens`、`read:roles`、`read:logs`。必要な場合を除き、書き込み権限の付与は避けてください。

## 設定

### 基本セットアップ

```yaml
connectors:
  auth0:
    enabled: true
    domain: "${AUTH0_DOMAIN}"
    client_id: "${AUTH0_CLIENT_ID}"
    client_secret: "${AUTH0_CLIENT_SECRET}"
    audience: "https://${AUTH0_DOMAIN}/api/v2/"

    sync:
      users: true
      events: true
      roles: true
      schedule: "0 */4 * * *"  # 4 時間ごと

    lists:
      all_users: 20
      verified_users: 21
      social_login: 22
```

### フィールドマッピング

```yaml
field_mapping:
  email: email
  given_name: FIRSTNAME
  family_name: LASTNAME
  nickname: NICKNAME
  picture: AVATAR_URL
  email_verified: EMAIL_VERIFIED
  logins_count: LOGIN_COUNT
  last_login: LAST_LOGIN_DATE
  created_at: SIGNUP_DATE
  user_metadata.phone: SMS
  user_metadata.company: COMPANY
  app_metadata.plan: SUBSCRIPTION_PLAN
  app_metadata.role: USER_ROLE
```

## API エンドポイント

| エンドポイント | メソッド | 説明 |
| --- | --- | --- |
| `https://{domain}/api/v2/users` | GET | ユーザーを一覧または検索 |
| `https://{domain}/api/v2/users/{id}` | GET | ユーザーを取得 |
| `https://{domain}/api/v2/users/{id}` | PATCH | ユーザーメタデータを更新 |
| `https://{domain}/api/v2/users/{id}/roles` | GET | ユーザーのロールを取得 |
| `https://{domain}/api/v2/roles` | GET | すべてのロールを一覧取得 |
| `https://{domain}/api/v2/logs` | GET | ログイベントを取得 |
| `https://{domain}/api/v2/stats/active-users` | GET | アクティブユーザー数を取得 |
| `https://{domain}/api/v2/stats/daily` | GET | 日次統計を取得 |
| `https://{domain}/oauth/token` | POST | アクセストークンを取得 |

## コード例

### コネクタの初期化

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

await tajo.connectors.connect('auth0', {
  domain: process.env.AUTH0_DOMAIN,
  clientId: process.env.AUTH0_CLIENT_ID,
  clientSecret: process.env.AUTH0_CLIENT_SECRET
});
```

### ユーザーを Brevo に同期

```javascript
// Auth0 ユーザーをページネーションで取得
let page = 0;
const perPage = 50;
let hasMore = true;

while (hasMore) {
  const response = await fetch(
    `https://${domain}/api/v2/users?` +
      new URLSearchParams({
        page: page.toString(),
        per_page: perPage.toString(),
        include_totals: 'true',
        search_engine: 'v3',
        q: 'email_verified:true'
      }),
    {
      headers: { 'Authorization': `Bearer ${accessToken}` }
    }
  );

  const { users, total } = await response.json();

  for (const user of users) {
    await tajo.contacts.sync({
      email: user.email,
      attributes: {
        FIRSTNAME: user.given_name,
        LASTNAME: user.family_name,
        LOGIN_COUNT: user.logins_count,
        LAST_LOGIN_DATE: user.last_login,
        SIGNUP_DATE: user.created_at,
        EMAIL_VERIFIED: user.email_verified
      },
      listIds: [20]
    });
  }

  page++;
  hasMore = (page * perPage) < total;
}
```

### Log Streams で認証イベントをトラッキング

```javascript
// Auth0 Log Stream Webhook を設定
// Auth0 ダッシュボード > Monitoring > Streams で設定

app.post('/webhooks/auth0', async (req, res) => {
  // 認可ヘッダーを検証
  const authHeader = req.headers.authorization;
  if (authHeader !== `Bearer ${process.env.AUTH0_WEBHOOK_TOKEN}`) {
    return res.status(401).send('Unauthorized');
  }

  const logs = req.body;

  for (const log of logs) {
    switch (log.data.type) {
      case 's':   // ログイン成功
        await tajo.events.track({
          email: log.data.details.email,
          event: 'user_login',
          properties: {
            ip: log.data.ip,
            user_agent: log.data.user_agent,
            connection: log.data.connection
          }
        });
        break;
      case 'ss':  // サインアップ成功
        await tajo.contacts.sync({
          email: log.data.details.email,
          attributes: { SIGNUP_DATE: log.data.date },
          listIds: [20]
        });
        break;
      case 'sp':  // パスワード変更成功
        await tajo.events.track({
          email: log.data.details.email,
          event: 'password_changed'
        });
        break;
    }
  }

  res.status(200).send('OK');
});
```

### ロールベースセグメンテーション

```javascript
// セグメンテーションのためにユーザーロールを同期
const rolesResponse = await fetch(
  `https://${domain}/api/v2/users/${userId}/roles`,
  {
    headers: { 'Authorization': `Bearer ${accessToken}` }
  }
);

const roles = await rolesResponse.json();
const roleNames = roles.map(r => r.name).join(', ');

await tajo.contacts.update(userEmail, {
  attributes: {
    USER_ROLE: roleNames,
    IS_ADMIN: roles.some(r => r.name === 'admin')
  }
});
```

## レート制限

| エンドポイントカテゴリ | 制限 | 備考 |
| --- | --- | --- |
| Management API | 50 req/秒(無料) | テナント単位 |
| Management API | 100 req/秒(有料) | テナント単位 |
| Authentication API | 変動 | プランに依存 |
| Log Streams | リアルタイム | 配信にレート制限なし |
| ページネーション | 最大 50 アイテム/ページ | `page` と `per_page` パラメータを使用 |

ページネーションが必要

Auth0 Management API は 1 ページあたり最大 50 件の結果を返します。常に `page` と `per_page` パラメータを使用してページネーションを実装してください。合計件数を取得するには `include_totals=true` を含めます。

## トラブルシューティング

| 問題 | 原因 | 解決策 |
| --- | --- | --- |
| 401 Unauthorized | トークン期限切れ | 新しい M2M トークンをリクエスト(24 時間有効) |
| 403 Forbidden | スコープの欠落 | M2M アプリに必要な権限を付与 |
| ユーザーリストが空 | 検索クエリエラー | v3 エンジンには Lucene クエリ構文を使用 |
| メタデータの欠落 | メタデータが未設定 | user\_metadata と app\_metadata を確認 |
| レート制限 429 | リクエスト過多 | リトライヘッダーでバックオフを実装 |

### デバッグモード

```yaml
connectors:
  auth0:
    debug: true
    log_level: verbose
    log_sync: true
```

## ベストプラクティス

1. **Log Streams を使用する** - Logs API のポーリングではなく、リアルタイムイベントストリーミングを使用
2. **ページネーションを実装する** - 大規模テナントでは常にユーザーリストクエリをページネーション
3. **M2M トークンをキャッシュする** - 有効期限近くまでトークンを再利用(デフォルト 24 時間の有効期間)
4. **検索エンジン v3 を使用する** - 効率的なユーザー検索のために Lucene クエリ構文を使用
5. **検証済みユーザーのみ同期する** - 未検証連絡先を避けるため `email_verified:true` でフィルタ
6. **ユーザーメタデータを活用する** - 同期用のカスタム属性を Auth0 user\_metadata に保存

## セキュリティ

- **マシン間 OAuth** - サーバー間認証用のクライアント資格情報グラント
- **スコープ付き権限** - 最小限の必要な Management API スコープを付与
- **トークンローテーション** - M2M トークンはデフォルトで 24 時間後に期限切れ
- **Log Stream 認証** - Webhook エンドポイントにベアラートークン検証を使用
- **テナント分離** - Auth0 テナントごとに個別の設定
- **暗号化された通信** - すべての API 通信に TLS 1.2 以上

## 関連リソース

- [Segment コネクタ](https://tajo.io/jp/docs/connectors/custom/segment)
- [Zapier コネクタ](https://tajo.io/jp/docs/connectors/custom/zapier)
- [顧客同期スキル](https://tajo.io/jp/docs/skills/data-sync/customer-sync)
- [Auth0 Management API ドキュメント](https://auth0.com/docs/api/management/v2)
