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

VlastnostHodnota
PlatformaAuth0 (od Okta)
KategorieIdentita a přístup (Vlastní)
Složitost nastaveníStřední
Oficiální integraceNe
Synchronizovaná dataUž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:

  1. Účet Auth0 s přístupem k API
  2. Aplikaci Machine-to-Machine zaregistrovanou v Auth0
  3. Oprávnění Management API udělená M2M aplikaci
  4. Účet Brevo s přístupem k API
  5. Účet Tajo s oprávněními ke konektoru

Ověření

Machine-to-Machine OAuth 2.0

Terminal window
# Vytvoření M2M aplikace v řídicím panelu Auth0
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/
// Získání přístupového tokenu 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();
// Token je platný standardně 24 hodin

Oprá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: 22

Mapová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_ROLE

Koncové body API

Koncový bodMetodaPopis
https://{domain}/api/v2/usersGETVýpis nebo vyhledávání uživatelů
https://{domain}/api/v2/users/{id}GETZískání uživatele
https://{domain}/api/v2/users/{id}PATCHAktualizace metadat uživatele
https://{domain}/api/v2/users/{id}/rolesGETZískání rolí uživatele
https://{domain}/api/v2/rolesGETVýpis všech rolí
https://{domain}/api/v2/logsGETZískání událostí protokolu
https://{domain}/api/v2/stats/active-usersGETZískání počtu aktivních uživatelů
https://{domain}/api/v2/stats/dailyGETZískání denní statistiky
https://{domain}/oauth/tokenPOSTZí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 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;
}

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 segmentaci
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')
}
});

Omezení rychlosti

Kategorie koncového boduLimitPoznámky
Management API50 požadavků/s (Free)Na tenanta
Management API100 požadavků/s (Placený)Na tenanta
Authentication APIRůznéZávisí na plánu
Log StreamsReal-timeŽádný limit rychlosti doručování
StránkováníMax 50 položek/stránkuPouží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émPříčinaŘešení
401 UnauthorizedToken vypršelPožádejte o nový M2M token (platnost 24 h)
403 ForbiddenChybějící rozsahyUdělte požadovaná oprávnění M2M aplikaci
Prázdný seznam uživatelůChyba vyhledávacího dotazuPoužívejte syntaxi Lucene pro vyhledávací engine v3
Chybějící metadataMetadata nejsou nastavenaZkontrolujte user_metadata a app_metadata
Limit rychlosti 429Pří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: true

Osvědčené postupy

  1. Používejte Log Streams – Real-time streamování událostí místo pollování Logs API
  2. Implementujte stránkování – Vždy stránkujte dotazy na seznam uživatelů pro velké tenanty
  3. Ukládejte M2M tokeny do mezipaměti – Znovu používejte tokeny dokud se nepřiblíží vypršení (výchozí životnost 24 h)
  4. Používejte search engine v3 – Používejte syntaxi Lucene pro efektivní vyhledávání uživatelů
  5. Synchronizujte pouze ověřené uživatele – Filtrujte na email_verified:true pro vyloučení neověřených kontaktů
  6. 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

Související zdroje

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI asistent

Ahoj! Zeptejte se mě na dokumentaci.