Auth0-koppling

Anslut Auth0 till Brevo via Tajo för att synka autentiserade användarprofiler som marknadsföringskontakter, utlösa automationer baserade på autentiseringshändelser och berika din kunddata med insikter om identitet och åtkomsthantering.

Översikt

EgenskapVärde
PlattformAuth0 (by Okta)
KategoriIdentitet & åtkomst (Anpassad)
InstallationskomplexitetMedel
Officiell integrationNej
Data som synkasAnvändare, händelser, roller, identiteter
AutentiseringsmetodMachine-to-Machine OAuth 2.0

Funktioner

  • Synkronisering av användarprofiler - Synka Auth0-användarprofiler till Brevo-kontakter
  • Autentiseringshändelser - Utlös automationer vid inloggning, registrering och lösenordsåterställning
  • Rollbaserad segmentering - Segmentera kontakter baserat på Auth0-roller och behörigheter
  • Data från sociala identiteter - Berika kontakter med profildata från social inloggning
  • Spårning av inloggningsaktivitet - Följ senaste inloggning, antal inloggningar och enhetsdata
  • Stöd för flera tenanter - Synka användare över flera Auth0-tenanter

Förutsättningar

Innan du börjar, se till att du har:

  1. Ett Auth0-konto med API-åtkomst
  2. En Machine-to-Machine-applikation registrerad i Auth0
  3. Management API-behörigheter beviljade till M2M-applikationen
  4. Ett Brevo-konto med API-åtkomst
  5. Ett Tajo-konto med kopplingsbehörigheter

Autentisering

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-behörigheter

Bevilja endast nödvändiga scopes till din M2M-applikation: read:users, read:user_idp_tokens, read:roles och read:logs. Undvik att ge skrivbehörigheter om det inte behövs.

Konfiguration

Grundinställning

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

Fältmappning

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-endpoints

EndpointMetodBeskrivning
https://{domain}/api/v2/usersGETLista eller sök användare
https://{domain}/api/v2/users/{id}GETHämta en användare
https://{domain}/api/v2/users/{id}PATCHUppdatera användarmetadata
https://{domain}/api/v2/users/{id}/rolesGETHämta användarroller
https://{domain}/api/v2/rolesGETLista alla roller
https://{domain}/api/v2/logsGETHämta logghändelser
https://{domain}/api/v2/stats/active-usersGETHämta antal aktiva användare
https://{domain}/api/v2/stats/dailyGETHämta daglig statistik
https://{domain}/oauth/tokenPOSTHämta åtkomsttoken

Kodexempel

Initiera kopplingen

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

Synka användare till 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;
}

Följ autentiseringshändelser via 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');
});

Rollbaserad segmentering

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

Hastighetsbegränsningar

Endpoint-kategoriGränsNoteringar
Management API50 förfr./sek (Free)Per tenant
Management API100 förfr./sek (Paid)Per tenant
Authentication APIVarierarBaserat på plan
Log StreamsRealtidIngen hastighetsbegränsning vid leverans
PagineringMax 50 objekt/sidaAnvänd parametrarna page och per_page

Paginering krävs

Auth0 Management API returnerar högst 50 resultat per sida. Implementera alltid paginering med parametrarna page och per_page. Inkludera include_totals=true för att få totalantalet.

Felsökning

ProblemOrsakLösning
401 UnauthorizedToken utgångenBegär ny M2M-token (24h giltighet)
403 ForbiddenSaknar scopesBevilja nödvändiga behörigheter till M2M-appen
Tom användarlistaFel i sökfrågaAnvänd Lucene-frågesyntax för v3-motorn
Saknad metadataMetadata ej inställdKontrollera user_metadata och app_metadata
Hastighetsbegränsning 429För många förfrågningarImplementera backoff med retry-headers

Felsökningsläge

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

Bästa praxis

  1. Använd Log Streams - Händelsestreaming i realtid istället för att polla Logs-API:et
  2. Implementera paginering - Paginera alltid användarlistfrågor för stora tenanter
  3. Cacha M2M-tokens - Återanvänd tokens tills de närmar sig utgång (24h standardlivstid)
  4. Använd sökmotor v3 - Använd Lucene-frågesyntax för effektiva användarsökningar
  5. Synka endast verifierade användare - Filtrera på email_verified:true för att undvika overifierade kontakter
  6. Utnyttja user_metadata - Lagra anpassade attribut i Auth0 user_metadata för synk

Säkerhet

  • Machine-to-Machine OAuth - Client credentials grant för server-till-server-autentisering
  • Scopade behörigheter - Bevilja minsta nödvändiga Management API-scopes
  • Tokenrotation - M2M-tokens går ut efter 24 timmar som standard
  • Log Stream-autentisering - Använd bearer token-verifiering för webhook-endpoints
  • Tenantisolering - Separata konfigurationer per Auth0-tenant
  • Krypterad transport - TLS 1.2+ för all API-kommunikation

Relaterade resurser

Subscribe to updates

developer-docs

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

auto-detect
AI-assistent

Hej! Fråga mig om dokumentationen.