Σύνδεσμος Auth0
Συνδέστε το Auth0 με το Brevo μέσω Tajo για συγχρονισμό πιστοποιημένων προφίλ χρηστών ως επαφές marketing, ενεργοποίηση αυτοματισμών βάσει εκδηλώσεων πιστοποίησης και εμπλουτισμό των δεδομένων πελατών σας με πληροφορίες διαχείρισης ταυτότητας και πρόσβασης.
Επισκόπηση
| Ιδιότητα | Τιμή |
|---|---|
| Πλατφόρμα | Auth0 (by Okta) |
| Κατηγορία | Ταυτότητα & Πρόσβαση (Προσαρμοσμένο) |
| Πολυπλοκότητα Ρύθμισης | Μεσαία |
| Επίσημη Ενσωμάτωση | Όχι |
| Δεδομένα που Συγχρονίζονται | Χρήστες, Εκδηλώσεις, Ρόλοι, Ταυτότητες |
| Μέθοδος Πιστοποίησης | Machine-to-Machine OAuth 2.0 |
Χαρακτηριστικά
- Συγχρονισμός προφίλ χρήστη - Συγχρονισμός προφίλ χρήστη Auth0 σε επαφές Brevo
- Εκδηλώσεις πιστοποίησης - Ενεργοποίηση αυτοματισμών κατά τη σύνδεση, εγγραφή και επαναφορά κωδικού
- Τμηματοποίηση βάσει ρόλου - Τμηματοποίηση επαφών βάσει ρόλων και δικαιωμάτων Auth0
- Δεδομένα κοινωνικής ταυτότητας - Εμπλουτισμός επαφών με πληροφορίες προφίλ κοινωνικής σύνδεσης
- Παρακολούθηση δραστηριότητας σύνδεσης - Παρακολούθηση τελευταίας σύνδεσης, αριθμού συνδέσεων και δεδομένων συσκευής
- Υποστήριξη πολλαπλών tenant - Συγχρονισμός χρηστών σε πολλαπλά tenants Auth0
Προαπαιτούμενα
Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε:
- Λογαριασμό Auth0 με πρόσβαση API
- Εγγεγραμμένη εφαρμογή Machine-to-Machine στο Auth0
- Δικαιώματα Management API παραχωρημένα στην εφαρμογή M2M
- Λογαριασμό Brevo με πρόσβαση API
- Λογαριασμό Tajo με δικαιώματα συνδέσμου
Πιστοποίηση
Machine-to-Machine 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 defaultΔικαιώματα API
Παραχωρείτε μόνο τα απαιτούμενα scopes στην εφαρμογή M2M: read:users, read:user_idp_tokens, read:roles και read:logs. Αποφύγετε την παροχή δικαιωμάτων εγγραφής εκτός αν είναι απαραίτητο.
Διαμόρφωση
Βασική Ρύθμιση
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Αντιστοίχιση Πεδίων
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_ROLEEndpoints API
| Endpoint | Μέθοδος | Περιγραφή |
|---|---|---|
https://{domain}/api/v2/users | GET | Λίστα ή αναζήτηση χρηστών |
https://{domain}/api/v2/users/{id} | GET | Λήψη χρήστη |
https://{domain}/api/v2/users/{id} | PATCH | Ενημέρωση metadata χρήστη |
https://{domain}/api/v2/users/{id}/roles | GET | Λήψη ρόλων χρήστη |
https://{domain}/api/v2/roles | GET | Λίστα όλων των ρόλων |
https://{domain}/api/v2/logs | GET | Λήψη εκδηλώσεων καταγραφής |
https://{domain}/api/v2/stats/active-users | GET | Λήψη αριθμού ενεργών χρηστών |
https://{domain}/api/v2/stats/daily | GET | Λήψη ημερήσιων στατιστικών |
https://{domain}/oauth/token | POST | Λήψη access token |
Παραδείγματα Κώδικα
Αρχικοποίηση Συνδέσμου
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});Συγχρονισμός Χρηστών στο 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;}Παρακολούθηση Εκδηλώσεων Πιστοποίησης μέσω 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');});Τμηματοποίηση Βάσει Ρόλου
// 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') }});Όρια Ρυθμού
| Κατηγορία Endpoint | Όριο | Σημειώσεις |
|---|---|---|
| Management API | 50 αιτ./δευτ. (Δωρεάν) | Ανά tenant |
| Management API | 100 αιτ./δευτ. (Επί πληρωμή) | Ανά tenant |
| Authentication API | Ποικίλλει | Βάσει πλάνου |
| Log Streams | Πραγματικός χρόνος | Χωρίς όριο ρυθμού παράδοσης |
| Σελιδοποίηση | Μέγ. 50 στοιχεία/σελίδα | Χρησιμοποιήστε παραμέτρους page και per_page |
Απαιτείται Σελιδοποίηση
Το Management API Auth0 επιστρέφει μέγιστο 50 αποτελέσματα ανά σελίδα. Εφαρμόστε πάντα σελιδοποίηση χρησιμοποιώντας τις παραμέτρους page και per_page. Συμπεριλάβετε include_totals=true για να λάβετε τον συνολικό αριθμό.
Αντιμετώπιση Προβλημάτων
| Πρόβλημα | Αιτία | Λύση |
|---|---|---|
| 401 Unauthorized | Το token έληξε | Αίτηση νέου M2M token (λήξη 24ω) |
| 403 Forbidden | Λείπουν scopes | Παραχωρήστε απαιτούμενα δικαιώματα στην εφαρμογή M2M |
| Κενή λίστα χρηστών | Σφάλμα ερωτήματος αναζήτησης | Χρησιμοποιήστε σύνταξη Lucene query για μηχανή v3 |
| Λείπουν metadata | Τα metadata δεν έχουν οριστεί | Ελέγξτε user_metadata και app_metadata |
| Όριο ρυθμού 429 | Υπερβολικά πολλά αιτήματα | Εφαρμόστε backoff με headers επανάληψης |
Λειτουργία Εντοπισμού Σφαλμάτων
connectors: auth0: debug: true log_level: verbose log_sync: trueΒέλτιστες Πρακτικές
- Χρησιμοποιήστε Log Streams - Ροή εκδηλώσεων σε πραγματικό χρόνο αντί polling του Logs API
- Εφαρμόστε σελιδοποίηση - Πάντα σελιδοποιείτε ερωτήματα λίστας χρηστών για μεγάλα tenants
- Κρατήστε M2M tokens στη cache - Επαναχρησιμοποιήστε tokens μέχρι κοντά στη λήξη (προεπιλογή 24ω)
- Χρησιμοποιήστε μηχανή αναζήτησης v3 - Χρησιμοποιήστε σύνταξη Lucene query για αποδοτικές αναζητήσεις χρηστών
- Συγχρονίστε μόνο επαληθευμένους χρήστες - Φιλτράρετε βάσει
email_verified:trueγια αποφυγή μη επαληθευμένων επαφών - Αξιοποιήστε user metadata - Αποθηκεύστε προσαρμοσμένα χαρακτηριστικά στο user_metadata Auth0 για συγχρονισμό
Ασφάλεια
- Machine-to-Machine OAuth - Grant διαπιστευτηρίων client για πιστοποίηση server-to-server
- Δικαιώματα βάσει scope - Παραχωρήστε ελάχιστα απαιτούμενα scopes Management API
- Εναλλαγή token - Τα M2M tokens λήγουν μετά από 24 ώρες εξ ορισμού
- Πιστοποίηση Log Stream - Χρησιμοποιήστε επαλήθευση bearer token για endpoints webhook
- Απομόνωση tenant - Ξεχωριστές διαμορφώσεις ανά tenant Auth0
- Κρυπτογραφημένη μεταφορά - TLS 1.2+ για όλες τις επικοινωνίες API