Auth0 konnektor
Csatlakoztasd az Auth0-t a Brevóhoz a Tajo segítségével, hogy a hitelesített felhasználói profilokat marketing kapcsolatokként szinkronizáld, hitelesítési eseményeken alapuló automatizálásokat indíts, és bővítsd az ügyfél-adataidat identitás- és hozzáférés-kezelési információkkal.
Áttekintés
| Tulajdonság | Érték |
|---|---|
| Platform | Auth0 (by Okta) |
| Kategória | Identitás és hozzáférés (Egyéni) |
| Telepítés bonyolultsága | Közepes |
| Hivatalos integráció | Nem |
| Szinkronizált adatok | Felhasználók, Események, Szerepkörök, Identitások |
| Hitelesítési módszer | Gép-gép OAuth 2.0 |
Funkciók
- Felhasználói profil-szinkronizáció – Auth0 felhasználói profilok szinkronizálása Brevo kapcsolatokba
- Hitelesítési események – Automatizálások indítása bejelentkezéskor, regisztrációkor és jelszóvisszaállításkor
- Szerepkör alapú szegmentálás – Kapcsolatok szegmentálása Auth0 szerepkörök és engedélyek alapján
- Közösségi identitásadatok – Kapcsolatok bővítése közösségi bejelentkezési profil információkkal
- Bejelentkezési tevékenység-követés – Utolsó bejelentkezés, bejelentkezési szám és eszközadatok követése
- Multi-tenant támogatás – Felhasználók szinkronizálása több Auth0 tenant között
Előfeltételek
Mielőtt elkezdenéd, győződj meg róla, hogy rendelkezel:
- Egy Auth0 fiókkal API-hozzáféréssel
- Egy regisztrált gép-gép alkalmazással az Auth0-ban
- A Management API engedélyekkel megadva az M2M alkalmazásnak
- Egy Brevo fiókkal API-hozzáféréssel
- Egy Tajo fiókkal konnektor engedélyekkel
Hitelesítés
Gép-gép OAuth 2.0
# 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 defaultAPI engedélyek
Csak a szükséges hatóköröket add meg az M2M alkalmazásnak: read:users, read:user_idp_tokens, read:roles és read:logs. Kerüld az írási engedélyek megadását, hacsak nem szükséges.
Konfiguráció
Alapbeállítás
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: 22Mezőleképezés
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 végpontok
| Végpont | Módszer | Leírás |
|---|---|---|
https://{domain}/api/v2/users | GET | Felhasználók listázása vagy keresése |
https://{domain}/api/v2/users/{id} | GET | Felhasználó lekérése |
https://{domain}/api/v2/users/{id} | PATCH | Felhasználói metaadatok frissítése |
https://{domain}/api/v2/users/{id}/roles | GET | Felhasználói szerepkörök lekérése |
https://{domain}/api/v2/roles | GET | Az összes szerepkör listázása |
https://{domain}/api/v2/logs | GET | Napló-események lekérése |
https://{domain}/api/v2/stats/active-users | GET | Aktív felhasználók számának lekérése |
https://{domain}/api/v2/stats/daily | GET | Napi statisztikák lekérése |
https://{domain}/oauth/token | POST | Hozzáférési token lekérése |
Kódpéldák
A konnektor inicializálása
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});Felhasználók szinkronizálása a Brevóba
// 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;}Hitelesítési események követése Log Streameken keresztül
// 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');});Szerepkör alapú szegmentálás
// 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') }});Ráta-korlátok
| Végpont kategória | Korlát | Megjegyzések |
|---|---|---|
| Management API | 50 kérés/mp (Ingyenes) | Tenantonként |
| Management API | 100 kérés/mp (Fizetős) | Tenantonként |
| Authentication API | Változó | Csomag függvénye |
| Log Streamek | Valós idejű | Nincs kézbesítési korlát |
| Oldalazás | Max. 50 elem/oldal | Használd a page és per_page paramétereket |
Oldalazás szükséges
Az Auth0 Management API oldalanként legfeljebb 50 eredményt ad vissza. Mindig implementálj oldalazást a page és per_page paraméterekkel. Incl include_totals=true az összes szám lekéréséhez.
Hibaelhárítás
| Probléma | Ok | Megoldás |
|---|---|---|
| 401 Unauthorized | Token lejárt | Kérj új M2M tokent (24 órás lejárat) |
| 403 Forbidden | Hiányzó hatókörök | Add meg a szükséges engedélyeket az M2M alkalmazásnak |
| Üres felhasználói lista | Keresési lekérdezési hiba | Használd a Lucene lekérdezési szintaxist a v3 motorhoz |
| Hiányzó metaadatok | Metaadatok nincsenek beállítva | Ellenőrizd a user_metadata-t és az app_metadata-t |
| Ráta-korlát 429 | Túl sok kérés | Implementálj visszalépést retry fejlécekkel |
Hibakeresési mód
connectors: auth0: debug: true log_level: verbose log_sync: trueLegjobb gyakorlatok
- Használj Log Streameket – Valós idejű esemény-streaming a Logs API lekérdezése helyett
- Implementálj oldalazást – Nagy tenantokhoz mindig lapozd a felhasználói lista lekérdezéseket
- Gyorsítótárazd az M2M tokeneket – Használj újra tokeneket a lejárat közeléig (alapértelmezés 24 órás élettartam)
- Használd a v3 keresési motort – Hatékony felhasználói keresésekhez használj Lucene lekérdezési szintaxist
- Csak ellenőrzött felhasználókat szinkronizálj – Szűrj az
email_verified:truefeltételre, hogy elkerüld az ellenőrizetlen kapcsolatokat - Használd ki a felhasználói metaadatokat – Tárold az egyedi attribútumokat az Auth0 user_metadata-ban szinkronizáláshoz
Biztonság
- Gép-gép OAuth – Client credentials grant szerver-szerver hitelesítéshez
- Hatókörrel korlátozott engedélyek – Add meg a minimálisan szükséges Management API hatóköröket
- Token rotáció – Az M2M tokenek alapértelmezés szerint 24 óra után járnak le
- Log Stream hitelesítés – Használj bearer token ellenőrzést a webhook végpontokon
- Tenant izoláció – Különálló konfigurációk Auth0 tenantonként
- Titkosított átvitel – TLS 1.2+ minden API kommunikációhoz