Auth0 konektor

Poveži Auth0 sa Brevo putem Tajo kako bi sinhronizovao/la autentifikovane korisničke profile kao marketinške kontakte, pokrenuo/la automatizacije zasnovane na autentifikacionim događajima i obogatio/la podatke o kupcima uvidima iz upravljanja identitetom i pristupom.

Pregled

SvojstvoVrednost
PlatformaAuth0 (by Okta)
KategorijaIdentitet i pristup (Prilagođeno)
Složenost podešavanjaSrednje
Zvanična integracijaNe
Sinhronizovani podaciKorisnici, Događaji, Uloge, Identiteti
Metod autentifikacijeMachine-to-Machine OAuth 2.0

Karakteristike

  • Sinhronizacija korisničkih profila - Sinhronizuj Auth0 korisničke profile sa Brevo kontaktima
  • Autentifikacioni događaji - Pokretanje automatizacija pri prijavi, registraciji i resetovanju lozinke
  • Segmentacija zasnovana na ulogama - Segmentiraj kontakte na osnovu Auth0 uloga i dozvola
  • Podaci o socijalnom identitetu - Obogaćivanje kontakata informacijama iz profila socijalnih prijava
  • Praćenje aktivnosti prijave - Prati poslednju prijavu, broj prijava i podatke o uređaju
  • Multi-tenant podrška - Sinhronizuj korisnike kroz više Auth0 tenanta

Preduslovi

Pre nego što započneš, proveri da imaš:

  1. Auth0 nalog sa API pristupom
  2. Machine-to-Machine aplikaciju registrovanu u Auth0
  3. Dozvole Management API-ja dodeljene M2M aplikaciji
  4. Brevo nalog sa API pristupom
  5. Tajo nalog sa dozvolama konektora

Autentifikacija

Machine-to-Machine OAuth 2.0

Terminal window
# Create an M2M application in Auth0 Dashboard
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/
// Get Management API access token
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 is valid for 24 hours by default

API dozvole

Dodeli samo potrebne skopove svojoj M2M aplikaciji: read:users, read:user_idp_tokens, read:roles i read:logs. Izbegavaj dodeljivanje dozvola za pisanje osim ako nije neophodno.

Konfiguracija

Osnovno podešavanje

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

Mapiranje polja

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 endpointi

EndpointMetodaOpis
https://{domain}/api/v2/usersGETListanje ili pretraga korisnika
https://{domain}/api/v2/users/{id}GETDohvatanje korisnika
https://{domain}/api/v2/users/{id}PATCHAžuriranje metapodataka korisnika
https://{domain}/api/v2/users/{id}/rolesGETDohvatanje uloga korisnika
https://{domain}/api/v2/rolesGETListanje svih uloga
https://{domain}/api/v2/logsGETDohvatanje log događaja
https://{domain}/api/v2/stats/active-usersGETDohvatanje broja aktivnih korisnika
https://{domain}/api/v2/stats/dailyGETDohvatanje dnevnih statistika
https://{domain}/oauth/tokenPOSTDohvatanje access tokena

Primeri koda

Inicijalizacija konektora

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

Sinhronizacija korisnika sa Brevo

// Paginate through Auth0 users
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;
}

Praćenje autentifikacionih događaja putem 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');
});

Segmentacija zasnovana na ulogama

// Sync user roles for segmentation
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')
}
});

Ograničenja brzine

Kategorija endpointaLimitNapomene
Management API50 zahteva/sek (Free)Po tenantu
Management API100 zahteva/sek (Paid)Po tenantu
Authentication APIZavisiNa osnovu plana
Log StreamsReal-timeBez ograničenja isporuke
PaginacijaMaksimalno 50 stavki/straniciKoristi page i per_page parametre

Paginacija je obavezna

Auth0 Management API vraća maksimalno 50 rezultata po stranici. Uvek implementiraj paginaciju koristeći parametre page i per_page. Uključi include_totals=true da dobiješ ukupan broj.

Rešavanje problema

ProblemUzrokRešenje
401 UnauthorizedToken istekaoZatraži novi M2M token (rok 24h)
403 ForbiddenNedostaju skopoviDodeli potrebne dozvole M2M aplikaciji
Prazna lista korisnikaGreška upita pretrageKoristi Lucene sintaksu upita za v3 engine
Nedostaju metapodaciMetapodaci nisu postavljeniProveri user_metadata i app_metadata
Limit 429Previše zahtevaImplementiraj usporavanje sa retry headerima

Debug režim

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

Najbolje prakse

  1. Koristi Log Streams - Streaming događaja u realnom vremenu umesto ispitivanja Logs API-ja
  2. Implementiraj paginaciju - Uvek paginiraj upite liste korisnika za velike tenante
  3. Keširaj M2M tokene - Ponovo koristi tokene do blizu isteka (podrazumevano 24h)
  4. Koristi search engine v3 - Koristi Lucene sintaksu upita za efikasnu pretragu korisnika
  5. Sinhronizuj samo verifikovane korisnike - Filtriraj po email_verified:true da izbegneš neverifikovane kontakte
  6. Koristi korisničke metapodatke - Čuvaj prilagođene atribute u Auth0 user_metadata za sinhronizaciju

Bezbednost

  • Machine-to-Machine OAuth - Dozvola korisničkih akreditiva za server-to-server autentifikaciju
  • Skopovane dozvole - Dodeli minimum potrebnih Management API skopova
  • Rotacija tokena - M2M tokeni ističu nakon 24h po podrazumevanom podešavanju
  • Log Stream autentifikacija - Koristi verifikaciju bearer tokena za webhook endpointe
  • Izolacija tenanta - Odvojena konfiguracija po Auth0 tenantu
  • Enkriptovani transport - TLS 1.2+ za svu API komunikaciju

Povezani resursi

Subscribe to updates

developer-docs

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

auto-detect
AI асистент

Здраво! Питајте ме о документацији.