Conector Auth0
Starea conectorului: Planificat Încă neconstruit. Tajo nu rulează astăzi acest conector.
Ilustrație · date de exemplu
Exemplu de sincronizare
Sursă
Auth0
Starea conectorului: Planificat
Destinație
Celălalt instrument al tău
Starea conectorului: Instrument personalizat
Maparea câmpurilor
| Câmp sursă | Câmp destinație | Valoare exemplu |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Ciornă
- Verifică o înregistrare
- Aprobă această versiune
Stările se referă la fiecare conector și nu garantează că această sincronizare este pregătită. Câmpurile sunt ilustrative. Verifică schema și permisiunile reale înainte de sincronizare.
Conectați Auth0 la Brevo prin Tajo pentru a sincroniza profilurile utilizatorilor autentificați ca contacte de marketing, a declanșa automatizări bazate pe evenimente de autentificare și a îmbogăți datele clienților cu informații din gestionarea identității și accesului.
Prezentare generală
| Proprietate | Valoare |
|---|---|
| Platformă | Auth0 (de Okta) |
| Categorie | Identitate și acces (Personalizat) |
| Complexitate configurare | Medie |
| Integrare oficială | Nu |
| Date sincronizate | Utilizatori, Evenimente, Roluri, Identități |
| Metodă de autentificare | OAuth 2.0 Machine-to-Machine |
Funcționalități
- Sincronizare profil utilizator - Sincronizați profilurile utilizatorilor Auth0 cu contactele Brevo
- Evenimente de autentificare - Declanșați automatizări la autentificare, înregistrare și resetarea parolei
- Segmentare bazată pe roluri - Segmentați contactele pe baza rolurilor și permisiunilor Auth0
- Date identitate socială - Îmbogățiți contactele cu informații de profil din autentificarea socială
- Urmărire activitate de autentificare - Urmăriți ultima autentificare, numărul de autentificări și datele dispozitivului
- Suport multi-tenant - Sincronizați utilizatori din mai mulți tenanți Auth0
Cerințe preliminare
Înainte de a începe, asigurați-vă că aveți:
- Un cont Auth0 cu acces API
- O aplicație Machine-to-Machine înregistrată în Auth0
- Permisiuni API de management acordate aplicației M2M
- Un cont Brevo cu acces API
- Un cont Tajo cu permisiuni de conector
Autentificare
OAuth 2.0 Machine-to-Machine
# Create an M2M application in Auth0 Dashboardexport 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/// Get Management API access tokenconst 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 is valid for 24 hours by defaultPermisiuni API
Acordați doar scopurile necesare aplicației M2M: read:users, read:user_idp_tokens, read:roles și read:logs. Evitați acordarea permisiunilor de scriere dacă nu sunt necesare.
Configurare
Configurare de bază
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 * * *" # Every 4 hours
lists: all_users: 20 verified_users: 21 social_login: 22Mapare câmpuri
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_ROLEPuncte finale API
| Punct final | Metodă | Descriere |
|---|---|---|
https://{domain}/api/v2/users | GET | Listează sau caută utilizatori |
https://{domain}/api/v2/users/{id} | GET | Obține un utilizator |
https://{domain}/api/v2/users/{id} | PATCH | Actualizează metadatele utilizatorului |
https://{domain}/api/v2/users/{id}/roles | GET | Obține rolurile utilizatorului |
https://{domain}/api/v2/roles | GET | Listează toate rolurile |
https://{domain}/api/v2/logs | GET | Obține evenimentele de jurnal |
https://{domain}/api/v2/stats/active-users | GET | Obține numărul de utilizatori activi |
https://{domain}/api/v2/stats/daily | GET | Obține statisticile zilnice |
https://{domain}/oauth/token | POST | Obține token de acces |
Exemple de cod
Inițializare conector
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});Sincronizare utilizatori cu Brevo
// Paginate through Auth0 userslet 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;}Urmărire evenimente de autentificare prin Log Streams
// Set up Auth0 Log Stream webhook// Configure in Auth0 Dashboard > Monitoring > Streams
app.post('/webhooks/auth0', async (req, res) => { // Verify authorization header 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': // Successful login 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': // Successful signup await tajo.contacts.sync({ email: log.data.details.email, attributes: { SIGNUP_DATE: log.data.date }, listIds: [20] }); break; case 'sp': // Successful password change await tajo.events.track({ email: log.data.details.email, event: 'password_changed' }); break; } }
res.status(200).send('OK');});Segmentare bazată pe roluri
// Sync user roles for segmentationconst 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') }});Limite de rată
| Categorie punct final | Limită | Note |
|---|---|---|
| Management API | 50 cereri/sec (Gratuit) | Per tenant |
| Management API | 100 cereri/sec (Plătit) | Per tenant |
| Authentication API | Variabil | Bazat pe plan |
| Log Streams | Timp real | Fără limită de rată la livrare |
| Paginare | Maxim 50 elemente/pagină | Utilizați parametrii page și per_page |
Paginare obligatorie
Auth0 Management API returnează maxim 50 rezultate per pagină. Implementați întotdeauna paginarea folosind parametrii page și per_page. Includeți include_totals=true pentru a obține numărul total.
Depanare
| Problemă | Cauză | Soluție |
|---|---|---|
| 401 Neautorizat | Token expirat | Solicitați un nou token M2M (expirare 24h) |
| 403 Interzis | Scopuri lipsă | Acordați permisiunile necesare aplicației M2M |
| Listă utilizatori goală | Eroare interogare căutare | Utilizați sintaxa Lucene pentru motorul v3 |
| Metadate lipsă | Metadate nesetate | Verificați user_metadata și app_metadata |
| Limită rată 429 | Prea multe cereri | Implementați backoff cu anteturile de reîncercare |
Modul de depanare
connectors: auth0: debug: true log_level: verbose log_sync: trueBune practici
- Utilizați Log Streams - Streaming de evenimente în timp real în loc de interogarea API-ului de jurnale
- Implementați paginarea - Paginați întotdeauna interogările de listare a utilizatorilor pentru tenanți mari
- Stocați în cache tokenii M2M - Reutilizați tokenii până aproape de expirare (durată de viață implicită 24h)
- Utilizați motorul de căutare v3 - Utilizați sintaxa Lucene pentru căutări eficiente de utilizatori
- Sincronizați doar utilizatorii verificați - Filtrați pe
email_verified:truepentru a evita contactele neverificate - Valorificați metadatele utilizatorului - Stocați atribute personalizate în Auth0 user_metadata pentru sincronizare
Securitate
- OAuth Machine-to-Machine - Grant de credențiale client pentru autentificare server-la-server
- Permisiuni cu scop limitat - Acordați scopurile minime necesare din Management API
- Rotație token - Tokenii M2M expiră după 24 de ore în mod implicit
- Autentificare Log Stream - Utilizați verificare token bearer pentru punctele finale webhook
- Izolare tenant - Configurații separate per tenant Auth0
- Transport criptat - TLS 1.2+ pentru toate comunicațiile API