Auth0 Bağlayıcısı
Auth0’ı Tajo üzerinden Brevo’ya bağlayarak kimliği doğrulanmış kullanıcı profillerini pazarlama kişileri olarak senkronize edin, kimlik doğrulama olaylarına göre otomasyonları tetikleyin ve müşteri verilerinizi kimlik ve erişim yönetimi içgörüleriyle zenginleştirin.
Genel Bakış
| Özellik | Değer |
|---|---|
| Platform | Auth0 (Okta tarafından) |
| Kategori | Kimlik ve Erişim (Özel) |
| Kurulum Karmaşıklığı | Orta |
| Resmi Entegrasyon | Hayır |
| Senkronize Edilen Veri | Kullanıcılar, Olaylar, Roller, Kimlikler |
| Kimlik Doğrulama Yöntemi | Machine-to-Machine OAuth 2.0 |
Özellikler
- Kullanıcı profili senkronizasyonu - Auth0 kullanıcı profillerini Brevo kişilerine senkronize edin
- Kimlik doğrulama olayları - Giriş, kayıt ve şifre sıfırlama için otomasyonları tetikleyin
- Rol tabanlı segmentasyon - Kişileri Auth0 rollerine ve izinlerine göre segmentlere ayırın
- Sosyal kimlik verileri - Kişileri sosyal giriş profil bilgileriyle zenginleştirin
- Giriş aktivitesi takibi - Son girişi, giriş sayısını ve cihaz verilerini takip edin
- Çok kiracılı destek - Birden fazla Auth0 kiracısı arasında kullanıcıları senkronize edin
Ön Koşullar
Başlamadan önce sahip olmanız gerekenler:
- API erişimi olan bir Auth0 hesabı
- Auth0’da kayıtlı bir Machine-to-Machine uygulaması
- M2M uygulamasına verilen Management API izinleri
- API erişimi olan bir Brevo hesabı
- Bağlayıcı izinleri olan bir Tajo hesabı
Kimlik Doğrulama
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 defaultAPI İzinleri
M2M uygulamanıza yalnızca gerekli kapsamları verin: read:users, read:user_idp_tokens, read:roles ve read:logs. Gerekmedikçe yazma izinleri vermekten kaçının.
Yapılandırma
Temel Kurulum
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: 22Alan Eşleme
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 Uç Noktaları
| Uç Nokta | Yöntem | Açıklama |
|---|---|---|
https://{domain}/api/v2/users | GET | Kullanıcıları listele veya ara |
https://{domain}/api/v2/users/{id} | GET | Bir kullanıcıyı getir |
https://{domain}/api/v2/users/{id} | PATCH | Kullanıcı meta verilerini güncelle |
https://{domain}/api/v2/users/{id}/roles | GET | Kullanıcı rollerini getir |
https://{domain}/api/v2/roles | GET | Tüm rolleri listele |
https://{domain}/api/v2/logs | GET | Log olaylarını getir |
https://{domain}/api/v2/stats/active-users | GET | Aktif kullanıcı sayısını getir |
https://{domain}/api/v2/stats/daily | GET | Günlük istatistikleri getir |
https://{domain}/oauth/token | POST | Erişim belirteci al |
Kod Örnekleri
Bağlayıcıyı Başlat
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});Kullanıcıları Brevo’ya Senkronize Et
// 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 Üzerinden Kimlik Doğrulama Olaylarını Takip Et
// 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');});Rol Tabanlı Segmentasyon
// 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') }});Hız Limitleri
| Uç Nokta Kategorisi | Limit | Notlar |
|---|---|---|
| Management API | 50 istek/sn (Ücretsiz) | Kiracı başına |
| Management API | 100 istek/sn (Ücretli) | Kiracı başına |
| Authentication API | Değişir | Plana göre |
| Log Streams | Gerçek zamanlı | Teslimatta hız limiti yok |
| Sayfalama | Sayfa başına maksimum 50 öğe | page ve per_page parametrelerini kullanın |
Sayfalama Gerekli
Auth0 Management API sayfa başına maksimum 50 sonuç döndürür. Her zaman page ve per_page parametrelerini kullanarak sayfalama uygulayın. Toplam sayıyı almak için include_totals=true ekleyin.
Sorun Giderme
| Sorun | Neden | Çözüm |
|---|---|---|
| 401 Unauthorized | Belirtecin süresi doldu | Yeni M2M belirteci isteyin (24 saat süreli) |
| 403 Forbidden | Kapsamlar eksik | M2M uygulamasına gerekli izinleri verin |
| Boş kullanıcı listesi | Arama sorgusu hatası | v3 motoru için Lucene sorgu söz dizimini kullanın |
| Meta veriler eksik | Meta veri ayarlanmamış | user_metadata ve app_metadata’yı kontrol edin |
| Hız limiti 429 | Çok fazla istek | Yeniden deneme başlıkları ile geri çekilme uygulayın |
Hata Ayıklama Modu
connectors: auth0: debug: true log_level: verbose log_sync: trueEn İyi Uygulamalar
- Log Streams kullanın - Logs API’sini yoklamak yerine gerçek zamanlı olay akışı
- Sayfalama uygulayın - Büyük kiracılar için kullanıcı listesi sorgularını her zaman sayfalayın
- M2M belirteçlerini önbelleğe alın - Belirteçleri sona erene kadar yeniden kullanın (varsayılan 24 saatlik ömür)
- Search engine v3 kullanın - Verimli kullanıcı aramaları için Lucene sorgu söz dizimini kullanın
- Yalnızca doğrulanmış kullanıcıları senkronize edin - Doğrulanmamış kişileri önlemek için
email_verified:truefiltresi uygulayın - Kullanıcı meta verilerinden yararlanın - Senkronize edilecek özel öznitelikleri Auth0 user_metadata’da saklayın
Güvenlik
- Machine-to-Machine OAuth - Sunucudan sunucuya kimlik doğrulama için client credentials grant
- Kapsamlandırılmış izinler - Minimum gerekli Management API kapsamlarını verin
- Belirteç rotasyonu - M2M belirteçleri varsayılan olarak 24 saat sonra sona erer
- Log Stream kimlik doğrulaması - Webhook uç noktaları için bearer belirteç doğrulaması kullanın
- Kiracı izolasyonu - Auth0 kiracısı başına ayrı yapılandırmalar
- Şifreli aktarım - Tüm API iletişimleri için TLS 1.2+