Auth0 Konektor
Povežite Auth0 s Brevom putem Taja kako biste sinkronizirali autentificirane korisničke profile kao marketinške kontakte, pokretali automatizacije na temelju događaja autentifikacije i obogatili korisničke podatke uvidima u upravljanje identitetom i pristupom.
Pregled
| Svojstvo | Vrijednost |
|---|---|
| Platforma | Auth0 (by Okta) |
| Kategorija | Identitet i pristup (Prilagođeno) |
| Složenost postavljanja | Srednje |
| Službena integracija | Ne |
| Sinkronizirani podaci | Korisnici, Događaji, Uloge, Identiteti |
| Metoda autentifikacije | Machine-to-Machine OAuth 2.0 |
Značajke
- Sinkronizacija korisničkih profila - Sinkronizirajte Auth0 korisničke profile s Brevo kontaktima
- Događaji autentifikacije - Pokrećite automatizacije pri prijavi, registraciji i resetiranju lozinke
- Segmentacija temeljena na ulogama - Segmentirajte kontakte na temelju Auth0 uloga i dozvola
- Podaci o društvenom identitetu - Obogatite kontakte informacijama profila društvene prijave
- Praćenje aktivnosti prijave - Pratite zadnju prijavu, broj prijava i podatke o uređaju
- Podrška za više stanara - Sinkronizirajte korisnike kroz više Auth0 stanara
Preduvjeti
Prije nego što počnete, osigurajte da imate:
- Auth0 račun s API pristupom
- Machine-to-Machine aplikaciju registriranu u Auth0
- Management API dozvole dodijeljene M2M aplikaciji
- Brevo račun s API pristupom
- Tajo račun s dozvolama konektora
Autentifikacija
Machine-to-Machine OAuth 2.0
# Stvorite M2M aplikaciju u Auth0 nadzornoj pločiexport 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/// Dobivanje Management API tokena za pristupconst 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 prema zadanim postavkama važeći 24 sataAPI dozvole
Dodijelite samo potrebne opsege vašoj M2M aplikaciji: read:users, read:user_idp_tokens, read:roles i read:logs. Izbjegavajte dodjeljivanje dozvola za pisanje osim ako nije potrebno.
Konfiguracija
Osnovna konfiguracija
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 * * *" # Svakih 4 sata
lists: all_users: 20 verified_users: 21 social_login: 22Mapiranje 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_ROLEAPI krajnje točke
| Krajnja točka | Metoda | Opis |
|---|---|---|
https://{domain}/api/v2/users | GET | Popis ili pretraživanje korisnika |
https://{domain}/api/v2/users/{id} | GET | Dohvaćanje korisnika |
https://{domain}/api/v2/users/{id} | PATCH | Ažuriranje korisničkih metapodataka |
https://{domain}/api/v2/users/{id}/roles | GET | Dohvaćanje korisničkih uloga |
https://{domain}/api/v2/roles | GET | Popis svih uloga |
https://{domain}/api/v2/logs | GET | Dohvaćanje zapisnih događaja |
https://{domain}/api/v2/stats/active-users | GET | Dohvaćanje broja aktivnih korisnika |
https://{domain}/api/v2/stats/daily | GET | Dohvaćanje dnevnih statistika |
https://{domain}/oauth/token | POST | Dobivanje tokena za pristup |
Primjeri 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});Sinkronizacija korisnika s Brevom
// Paginacija kroz Auth0 korisnikelet 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 događaja autentifikacije putem Log Streamova
// Postavljanje Auth0 Log Stream webhookova// Konfigurirajte u Auth0 Nadzorna ploča > Praćenje > Streamovi
app.post('/webhooks/auth0', async (req, res) => { // Provjera zaglavlja autorizacije 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': // Uspješna prijava 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': // Uspješna registracija await tajo.contacts.sync({ email: log.data.details.email, attributes: { SIGNUP_DATE: log.data.date }, listIds: [20] }); break; case 'sp': // Uspješna promjena lozinke await tajo.events.track({ email: log.data.details.email, event: 'password_changed' }); break; } }
res.status(200).send('OK');});Segmentacija temeljena na ulogama
// Sinkronizacija korisničkih uloga za segmentacijuconst 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 krajnje točke | Ograničenje | Napomene |
|---|---|---|
| Management API | 50 zah./sek (Besplatni) | Po stanaru |
| Management API | 100 zah./sek (Plaćeni) | Po stanaru |
| Authentication API | Varira | Na temelju plana |
| Log Streams | U stvarnom vremenu | Nema ograničenja brzine isporuke |
| Paginacija | Maks. 50 stavki/stranica | Koristite parametre page i per_page |
Paginacija je obavezna
Auth0 Management API vraća maksimalno 50 rezultata po stranici. Uvijek implementirajte paginaciju koristeći parametre page i per_page. Uključite include_totals=true za dobivanje ukupnog broja.
Rješavanje problema
| Problem | Uzrok | Rješenje |
|---|---|---|
| 401 Unauthorized | Token je istekao | Zatražite novi M2M token (istek 24h) |
| 403 Forbidden | Nedostaju opsezi | Dodijelite potrebne dozvole M2M aplikaciji |
| Prazan popis korisnika | Greška u upitu pretrage | Koristite Lucene sintaksu upita za v3 engine |
| Nedostaju metapodaci | Metapodaci nisu postavljeni | Provjerite user_metadata i app_metadata |
| Ograničenje brzine 429 | Previše zahtjeva | Implementirajte povratak s header-ima za ponovni pokušaj |
Način otklanjanja grešaka
connectors: auth0: debug: true log_level: verbose log_sync: truePreporučene prakse
- Koristite Log Streamove - Streaming događaja u stvarnom vremenu umjesto anketiranja Logs API-ja
- Implementirajte paginaciju - Uvijek paginirajte upite popisa korisnika za velike stanare
- Predmemorirajte M2M tokene - Ponovo koristite tokene do blizu isteka (zadani rok trajanja 24h)
- Koristite search engine v3 - Koristite Lucene sintaksu upita za učinkovito pretraživanje korisnika
- Sinkronizirajte samo verificirane korisnike - Filtrirajte po
email_verified:trueda izbjegnete neverificirane kontakte - Iskoristite korisničke metapodatke - Pohranite prilagođene atribute u Auth0 user_metadata za sinkronizaciju
Sigurnost
- Machine-to-Machine OAuth - Dodjela korisničkih vjerodajnica za autentifikaciju server-to-server
- Opsežne dozvole - Dodijelite minimalne potrebne Management API opsege
- Rotacija tokena - M2M tokeni prema zadanim postavkama istječu nakon 24 sata
- Log Stream autentifikacija - Koristite verifikaciju bearer tokena za webhook krajnje točke
- Izolacija stanara - Zasebne konfiguracije po Auth0 stanaru
- Šifrirani transport - TLS 1.2+ za sve API komunikacije