Конектор Auth0

Свържете Auth0 с Brevo чрез Tajo, за да синхронизирате автентицирани потребителски профили като маркетингови контакти, задействайте автоматизации на базата на събития за автентикация и обогатете данните за клиентите с прозрения от управлението на идентичности и достъп.

Преглед

СвойствоСтойност
ПлатформаAuth0 (от Okta)
КатегорияIdentity & Access (Персонализирана)
Сложност на настройкаСредна
Официална интеграцияНе
Синхронизирани данниПотребители, събития, роли, идентичности
Метод на автентикацияMachine-to-Machine OAuth 2.0

Функции

  • Синхронизация на потребителски профили – Синхронизирайте потребителските профили от Auth0 към контактите в Brevo
  • Събития за автентикация – Задействайте автоматизации при login, регистрация и нулиране на парола
  • Сегментация на базата на роли – Сегментирайте контактите въз основа на роли и разрешения в Auth0
  • Данни от социална идентичност – Обогатете контактите с профилна информация от социален login
  • Проследяване на активност за вход – Проследявайте последен вход, брой входове и данни за устройство
  • Поддръжка на множество тенанти – Синхронизирайте потребители между множество Auth0 тенанти

Предварителни условия

Преди да започнете, уверете се, че имате:

  1. Акаунт в Auth0 с API достъп
  2. Machine-to-Machine приложение, регистрирано в Auth0
  3. Предоставени Management API разрешения към M2M приложението
  4. Акаунт в Brevo с API достъп
  5. Акаунт в Tajo с разрешения за конектори

Автентикация

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 разрешения

Предоставяйте само необходимите обхвати на вашето 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_ROLE

API крайни точки

EndpointMethodОписание
https://{domain}/api/v2/usersGETСписък или търсене на потребители
https://{domain}/api/v2/users/{id}GETИзвличане на потребител
https://{domain}/api/v2/users/{id}PATCHОбновяване на потребителски метаданни
https://{domain}/api/v2/users/{id}/rolesGETИзвличане на роли на потребител
https://{domain}/api/v2/rolesGETСписък на всички роли
https://{domain}/api/v2/logsGETИзвличане на log събития
https://{domain}/api/v2/stats/active-usersGETИзвличане на броя активни потребители
https://{domain}/api/v2/stats/dailyGETИзвличане на дневна статистика
https://{domain}/oauth/tokenPOSTИзвличане на токен за достъп

Примери за код

Инициализация на конектора

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

Проследяване на събития за автентикация чрез 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 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')
}
});

Лимити на заявки

Категория крайни точкиЛимитЗабележки
Management API50 заявки/сек (Free)За тенант
Management API100 заявки/сек (Paid)За тенант
Authentication APIВарираНа базата на плана
Log StreamsВ реално времеБез лимит на заявки за доставката
ПагинацияМаксимум 50 елемента/страницаИзползвайте параметрите page и per_page

Изисква се пагинация

Auth0 Management API връща максимум 50 резултата на страница. Винаги прилагайте пагинация чрез параметрите page и per_page. Включете include_totals=true, за да получите общия брой.

Отстраняване на проблеми

ПроблемПричинаРешение
401 UnauthorizedИзтекъл токенЗаявете нов M2M токен (24ч валидност)
403 ForbiddenЛипсващи обхватиПредоставете необходимите разрешения на M2M приложението
Празен списък на потребителиГрешка в заявката за търсенеИзползвайте Lucene синтаксис за v3 engine
Липсващи метаданниМетаданните не са зададениПроверете user_metadata и app_metadata
Rate limit 429Твърде много заявкиПриложете отлагане с retry хедърите

Debug режим

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

Най-добри практики

  1. Използвайте Log Streams – Стрийминг на събития в реално време вместо допитване на Logs API
  2. Имплементирайте пагинация – Винаги пагинирайте заявките за списъци с потребители за големи тенанти
  3. Кеширайте M2M токените – Използвайте повторно токените до близо до изтичане (24ч по подразбиране)
  4. Използвайте search engine v3 – Използвайте Lucene синтаксис за ефективни потребителски търсения
  5. Синхронизирайте само верифицирани потребители – Филтрирайте по email_verified:true, за да избегнете неверифицирани контакти
  6. Използвайте потребителски метаданни – Съхранявайте персонализирани атрибути в Auth0 user_metadata за синхронизация

Сигурност

  • Machine-to-Machine OAuth – Client credentials grant за server-to-server автентикация
  • Обхватни разрешения – Предоставяйте минимално необходимите Management API обхвати
  • Ротация на токени – M2M токените изтичат след 24 часа по подразбиране
  • Автентикация на Log Stream – Използвайте bearer token верификация за webhook крайни точки
  • Изолация на тенанти – Отделни конфигурации за всеки Auth0 тенант
  • Криптиран транспорт – TLS 1.2+ за всички API комуникации

Свързани ресурси

Subscribe to updates

developer-docs

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

auto-detect
AI асистент

Здравейте! Попитайте ме за документацията.