Konektor Auth0

Połącz Auth0 z Brevo przez Tajo, aby synchronizować uwierzytelnione profile użytkowników jako kontakty marketingowe, wyzwalać automatyzacje na podstawie zdarzeń uwierzytelniania i wzbogacać dane klientów o informacje z zarządzania tożsamością i dostępem.

Przegląd

WłaściwośćWartość
PlatformaAuth0 (by Okta)
KategoriaTożsamość i Dostęp (Niestandardowa)
Poziom konfiguracjiŚredni
Integracja oficjalnaNie
Synchronizowane daneUżytkownicy, Zdarzenia, Role, Tożsamości
Metoda uwierzytelnianiaMachine-to-Machine OAuth 2.0

Funkcje

  • Synchronizacja profili użytkowników - Synchronizuj profile użytkowników Auth0 z kontaktami Brevo
  • Zdarzenia uwierzytelniania - Wyzwalaj automatyzacje przy logowaniu, rejestracji i resetowaniu hasła
  • Segmentacja oparta na rolach - Segmentuj kontakty na podstawie ról i uprawnień Auth0
  • Dane tożsamości społecznościowej - Wzbogacaj kontakty o informacje z profili logowania społecznościowego
  • Śledzenie aktywności logowania - Śledź ostatnie logowanie, liczbę logowań i dane urządzenia
  • Obsługa wielu dzierżawców - Synchronizuj użytkowników między wieloma dzierżawcami Auth0

Wymagania wstępne

Zanim zaczniesz, upewnij się, że masz:

  1. Konto Auth0 z dostępem do API
  2. Aplikację Machine-to-Machine zarejestrowaną w Auth0
  3. Uprawnienia Management API przyznane aplikacji M2M
  4. Konto Brevo z dostępem do API
  5. Konto Tajo z uprawnieniami konektora

Uwierzytelnianie

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

Uprawnienia API

Przyznaj tylko wymagane zakresy do swojej aplikacji M2M: read:users, read:user_idp_tokens, read:roles i read:logs. Unikaj przyznawania uprawnień zapisu, chyba że są potrzebne.

Konfiguracja

Podstawowa konfiguracja

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

Mapowanie pól

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

Endpointy API

EndpointMetodaOpis
https://{domain}/api/v2/usersGETLista lub wyszukiwanie użytkowników
https://{domain}/api/v2/users/{id}GETPobierz użytkownika
https://{domain}/api/v2/users/{id}PATCHAktualizuj metadane użytkownika
https://{domain}/api/v2/users/{id}/rolesGETPobierz role użytkownika
https://{domain}/api/v2/rolesGETLista wszystkich ról
https://{domain}/api/v2/logsGETPobierz zdarzenia logów
https://{domain}/api/v2/stats/active-usersGETPobierz liczbę aktywnych użytkowników
https://{domain}/api/v2/stats/dailyGETPobierz statystyki dzienne
https://{domain}/oauth/tokenPOSTPobierz token dostępu

Przykłady kodu

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

Synchronizuj użytkowników z 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;
}

Śledź zdarzenia uwierzytelniania przez 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');
});

Segmentacja oparta na rolach

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

Limity API

Kategoria endpointuLimitUwagi
Management API50 żądań/sek (Free)Na dzierżawcę
Management API100 żądań/sek (Płatny)Na dzierżawcę
Authentication APIRóżneZależy od planu
Log StreamsCzas rzeczywistyBrak limitu dostarczania
PaginacjaMaks. 50 elementów/stronaUżywaj parametrów page i per_page

Wymagana paginacja

Auth0 Management API zwraca maksymalnie 50 wyników na stronę. Zawsze implementuj paginację używając parametrów page i per_page. Uwzględnij include_totals=true, aby uzyskać łączną liczbę.

Rozwiązywanie problemów

ProblemPrzyczynaRozwiązanie
401 UnauthorizedToken wygasłZażądaj nowego tokenu M2M (wygaśnięcie po 24h)
403 ForbiddenBrak zakresówPrzyznaj wymagane uprawnienia do aplikacji M2M
Pusta lista użytkownikówBłąd zapytania wyszukiwaniaUżywaj składni zapytania Lucene dla silnika v3
Brakujące metadaneMetadane nie ustawioneSprawdź user_metadata i app_metadata
Limit 429Za dużo żądańWdrożyj wycofanie z nagłówkami retry

Tryb debug

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

Najlepsze praktyki

  1. Używaj Log Streams - Strumieniowanie zdarzeń w czasie rzeczywistym zamiast odpytywania Logs API
  2. Wdrożyj paginację - Zawsze stronicuj zapytania listy użytkowników dla dużych dzierżawców
  3. Buforuj tokeny M2M - Ponownie używaj tokenów do czasu wygaśnięcia (domyślny czas życia 24h)
  4. Używaj silnika wyszukiwania v3 - Używaj składni zapytania Lucene dla efektywnych wyszukiwań użytkowników
  5. Synchronizuj tylko zweryfikowanych użytkowników - Filtruj na email_verified:true, aby unikać niezweryfikowanych kontaktów
  6. Korzystaj z metadanych użytkownika - Przechowuj niestandardowe atrybuty w Auth0 user_metadata do synchronizacji

Bezpieczeństwo

  • Machine-to-Machine OAuth - Przyznanie poświadczeń klienta dla uwierzytelniania serwer-serwer
  • Uprawnienia z zakresu - Przyznaj minimalnie wymagane zakresy Management API
  • Rotacja tokenów - Tokeny M2M domyślnie wygasają po 24 godzinach
  • Uwierzytelnianie Log Stream - Używaj weryfikacji tokenu bearer dla endpointów webhook
  • Izolacja dzierżawców - Oddzielne konfiguracje na dzierżawcę Auth0
  • Zaszyfrowany transport - TLS 1.2+ dla całej komunikacji API

Powiązane zasoby

Subscribe to updates

developer-docs

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

auto-detect
Asystent AI

Cześć! Zapytaj mnie o dokumentację.