Konektor Auth0
Propojte Auth0 s Brevo přes Tajo pro synchronizaci ověřených profilů uživatelů jako marketingových kontaktů, spouštění automatizací na základě autentizačních událostí a obohacení zákaznických dat o poznatky ze správy identit a přístupu.
Přehled
| Vlastnost | Hodnota |
|---|---|
| Platforma | Auth0 (od Okta) |
| Kategorie | Identita a přístup (Vlastní) |
| Složitost nastavení | Střední |
| Oficiální integrace | Ne |
| Synchronizovaná data | Uživatelé, Události, Role, Identity |
| Metoda ověření | Machine-to-Machine OAuth 2.0 |
Funkce
- Synchronizace profilů uživatelů – Synchronizujte profily uživatelů Auth0 do kontaktů Brevo
- Autentizační události – Spouštějte automatizace při přihlášení, registraci a resetování hesla
- Segmentace podle rolí – Segmentujte kontakty na základě rolí a oprávnění Auth0
- Data sociálních identit – Obohacujte kontakty o informace z profilů sociálního přihlášení
- Sledování přihlašovací aktivity – Sledujte poslední přihlášení, počet přihlášení a data zařízení
- Podpora více tenantů – Synchronizujte uživatele napříč více tenanty Auth0
Předpoklady
Než začnete, ujistěte se, že máte:
- Účet Auth0 s přístupem k API
- Aplikaci Machine-to-Machine zaregistrovanou v Auth0
- Oprávnění Management API udělená M2M aplikaci
- Účet Brevo s přístupem k API
- Účet Tajo s oprávněními ke konektoru
Ověření
Machine-to-Machine OAuth 2.0
# Vytvoření M2M aplikace v řídicím panelu Auth0export AUTH0_DOMAIN=your-tenant.auth0.comexport AUTH0_CLIENT_ID=your_client_idexport AUTH0_CLIENT_SECRET=your_client_secretexport AUTH0_AUDIENCE=https://your-tenant.auth0.com/api/v2/// Získání přístupového tokenu Management APIconst 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();// Token je platný standardně 24 hodinOprávnění API
Udělte své M2M aplikaci pouze požadované rozsahy: read:users, read:user_idp_tokens, read:roles a read:logs. Vyhněte se udělování oprávnění k zápisu, pokud nejsou potřeba.
Konfigurace
Základní nastavení
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 * * *" # Každé 4 hodiny
lists: all_users: 20 verified_users: 21 social_login: 22Mapování polí
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_ROLEKoncové body API
| Koncový bod | Metoda | Popis |
|---|---|---|
https://{domain}/api/v2/users | GET | Výpis nebo vyhledávání uživatelů |
https://{domain}/api/v2/users/{id} | GET | Získání uživatele |
https://{domain}/api/v2/users/{id} | PATCH | Aktualizace metadat uživatele |
https://{domain}/api/v2/users/{id}/roles | GET | Získání rolí uživatele |
https://{domain}/api/v2/roles | GET | Výpis všech rolí |
https://{domain}/api/v2/logs | GET | Získání událostí protokolu |
https://{domain}/api/v2/stats/active-users | GET | Získání počtu aktivních uživatelů |
https://{domain}/api/v2/stats/daily | GET | Získání denní statistiky |
https://{domain}/oauth/token | POST | Získání přístupového tokenu |
Příklady kódu
Inicializace konektoru
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});Synchronizace uživatelů do Brevo
// Stránkování přes uživatele Auth0let 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;}Sledování autentizačních událostí přes Log Streams
// Nastavení webhooku Log Stream Auth0// Konfigurujte v řídicím panelu Auth0 > Monitoring > Streams
app.post('/webhooks/auth0', async (req, res) => { // Ověření autorizační hlavičky 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': // Úspěšné přihlášení 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': // Úspěšná registrace await tajo.contacts.sync({ email: log.data.details.email, attributes: { SIGNUP_DATE: log.data.date }, listIds: [20] }); break; case 'sp': // Úspěšná změna hesla await tajo.events.track({ email: log.data.details.email, event: 'password_changed' }); break; } }
res.status(200).send('OK');});Segmentace podle rolí
// Synchronizace rolí uživatelů pro segmentaciconst 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') }});Omezení rychlosti
| Kategorie koncového bodu | Limit | Poznámky |
|---|---|---|
| Management API | 50 požadavků/s (Free) | Na tenanta |
| Management API | 100 požadavků/s (Placený) | Na tenanta |
| Authentication API | Různé | Závisí na plánu |
| Log Streams | Real-time | Žádný limit rychlosti doručování |
| Stránkování | Max 50 položek/stránku | Používejte parametry page a per_page |
Vyžadováno stránkování
Management API Auth0 vrací maximálně 50 výsledků na stránku. Vždy implementujte stránkování pomocí parametrů page a per_page. Zahrňte include_totals=true pro získání celkového počtu.
Řešení problémů
| Problém | Příčina | Řešení |
|---|---|---|
| 401 Unauthorized | Token vypršel | Požádejte o nový M2M token (platnost 24 h) |
| 403 Forbidden | Chybějící rozsahy | Udělte požadovaná oprávnění M2M aplikaci |
| Prázdný seznam uživatelů | Chyba vyhledávacího dotazu | Používejte syntaxi Lucene pro vyhledávací engine v3 |
| Chybějící metadata | Metadata nejsou nastavena | Zkontrolujte user_metadata a app_metadata |
| Limit rychlosti 429 | Příliš mnoho požadavků | Implementujte zpětné odběrání s hlavičkami opakování |
Režim ladění
connectors: auth0: debug: true log_level: verbose log_sync: trueOsvědčené postupy
- Používejte Log Streams – Real-time streamování událostí místo pollování Logs API
- Implementujte stránkování – Vždy stránkujte dotazy na seznam uživatelů pro velké tenanty
- Ukládejte M2M tokeny do mezipaměti – Znovu používejte tokeny dokud se nepřiblíží vypršení (výchozí životnost 24 h)
- Používejte search engine v3 – Používejte syntaxi Lucene pro efektivní vyhledávání uživatelů
- Synchronizujte pouze ověřené uživatele – Filtrujte na
email_verified:truepro vyloučení neověřených kontaktů - Využívejte metadata uživatelů – Ukládejte vlastní atributy v user_metadata Auth0 pro synchronizaci
Zabezpečení
- Machine-to-Machine OAuth – Grant klientských přihlašovacích údajů pro autentizaci server-server
- Rozsahová oprávnění – Udělte minimální požadované rozsahy Management API
- Rotace tokenů – M2M tokeny vypršejí standardně po 24 hodinách
- Ověření Log Stream – Používejte ověření bearer tokenem pro webhookové koncové body
- Izolace tenantů – Oddělené konfigurace na tenanta Auth0
- Šifrovaný přenos – TLS 1.2+ pro veškerou komunikaci API