Auth0 کنیکٹر
توثیق شدہ صارف پروفائلز کو مارکیٹنگ رابطوں کے طور پر سنک کرنے، توثیقی ایونٹس کی بنیاد پر آٹومیشنز کو متحرک کرنے، اور شناخت اور رسائی کے انتظام کی بصیرتوں کے ساتھ اپنے کسٹمر ڈیٹا کو بہتر بنانے کے لیے Tajo کے ذریعے Auth0 کو Brevo سے منسلک کریں۔
جائزہ
| خاصیت | قدر |
|---|---|
| پلیٹ فارم | Auth0 (Okta کی جانب سے) |
| زمرہ | شناخت اور رسائی (حسب ضرورت) |
| سیٹ اپ کی پیچیدگی | معتدل |
| آفیشل انٹیگریشن | نہیں |
| سنک شدہ ڈیٹا | صارفین، ایونٹس، رولز، شناختیں |
| توثیقی طریقہ | Machine-to-Machine OAuth 2.0 |
خصوصیات
- صارف پروفائل سنک - Auth0 صارف پروفائلز کو Brevo رابطوں سے سنک کریں
- توثیقی ایونٹس - لاگ ان، سائن اپ، اور پاس ورڈ ری سیٹ پر آٹومیشنز کو متحرک کریں
- رول پر مبنی سیگمنٹیشن - Auth0 رولز اور اجازتوں کی بنیاد پر رابطوں کو سیگمنٹ کریں
- سوشل شناختی ڈیٹا - سوشل لاگ ان پروفائل معلومات سے رابطوں کو بہتر بنائیں
- لاگ ان سرگرمی ٹریکنگ - آخری لاگ ان، لاگ ان کاؤنٹ، اور ڈیوائس ڈیٹا ٹریک کریں
- ملٹی-ٹینینٹ سپورٹ - متعدد Auth0 ٹینینٹس میں صارفین کو سنک کریں
ضروریات
شروع کرنے سے پہلے، یقینی بنائیں کہ آپ کے پاس ہے:
- API رسائی کے ساتھ Auth0 اکاؤنٹ
- Auth0 میں رجسٹرڈ Machine-to-Machine ایپلی کیشن
- M2M ایپلی کیشن کو دی گئی Management API اجازتیں
- API رسائی کے ساتھ Brevo اکاؤنٹ
- کنیکٹر اجازتوں کے ساتھ Tajo اکاؤنٹ
توثیق
Machine-to-Machine OAuth 2.0
# Auth0 ڈیش بورڈ میں M2M ایپلی کیشن بنائیںexport 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/// Management API رسائی ٹوکن حاصل کریں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();// ٹوکن ڈیفالٹ کے طور پر 24 گھنٹے کے لیے درست ہے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_ROLEAPI اینڈ پوائنٹس
| اینڈ پوائنٹ | طریقہ | تفصیل |
|---|---|---|
https://{domain}/api/v2/users | GET | صارفین کی فہرست یا تلاش |
https://{domain}/api/v2/users/{id} | GET | ایک صارف حاصل کریں |
https://{domain}/api/v2/users/{id} | PATCH | صارف میٹا ڈیٹا اپ ڈیٹ کریں |
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 | رسائی ٹوکن حاصل کریں |
کوڈ مثالیں
کنیکٹر کو شروع کریں
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 سے سنک کریں
// Auth0 صارفین کے ذریعے پیجینیٹ کریں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 کے ذریعے توثیقی ایونٹس ٹریک کریں
// Auth0 Log Stream webhook سیٹ اپ کریں// Auth0 ڈیش بورڈ > Monitoring > Streams میں کنفیگر کریں
app.post('/webhooks/auth0', async (req, res) => { // authorization ہیڈر کی تصدیق کریں 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': // کامیاب لاگ ان 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': // کامیاب سائن اپ await tajo.contacts.sync({ email: log.data.details.email, attributes: { SIGNUP_DATE: log.data.date }, listIds: [20] }); break; case 'sp': // کامیاب پاس ورڈ تبدیلی await tajo.events.track({ email: log.data.details.email, event: 'password_changed' }); break; } }
res.status(200).send('OK');});رول پر مبنی سیگمنٹیشن
// سیگمنٹیشن کے لیے صارف کے رولز سنک کریں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 API | 50 req/sec (Free) | فی ٹینینٹ |
| Management API | 100 req/sec (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 ایپ کو ضروری اجازتیں دیں |
| خالی صارف فہرست | تلاش کی استفسار کی خرابی | v3 انجن کے لیے Lucene query syntax استعمال کریں |
| غائب میٹا ڈیٹا | میٹا ڈیٹا سیٹ نہیں | user_metadata اور app_metadata چیک کریں |
| ریٹ کی حد 429 | بہت زیادہ درخواستیں | ری ٹرائی ہیڈرز کے ساتھ بیک آف نافذ کریں |
ڈیبگ موڈ
connectors: auth0: debug: true log_level: verbose log_sync: trueبہترین طریقے
- Log Streams استعمال کریں - Logs API کی پولنگ کے بجائے ریئل ٹائم ایونٹ اسٹریمنگ
- پیجینیشن نافذ کریں - بڑے ٹینینٹس کے لیے ہمیشہ صارف فہرست کی استفسار کو پیجینیٹ کریں
- M2M ٹوکنز کیشے کریں - میعاد ختم ہونے کے قریب تک ٹوکنز کا دوبارہ استعمال کریں (ڈیفالٹ 24 گھنٹے کی عمر)
- search engine v3 استعمال کریں - موثر صارف تلاش کے لیے Lucene query syntax استعمال کریں
- صرف تصدیق شدہ صارفین کو سنک کریں - غیر تصدیق شدہ رابطوں سے بچنے کے لیے
email_verified:trueپر فلٹر کریں - صارف میٹا ڈیٹا کا فائدہ اٹھائیں - سنک کے لیے Auth0 user_metadata میں حسب ضرورت خصوصیات محفوظ کریں
سیکیورٹی
- Machine-to-Machine OAuth - سرور ٹو سرور توثیق کے لیے client credentials grant
- محدود اجازتیں - کم از کم ضروری Management API اسکوپس دیں
- ٹوکن کی گردش - M2M ٹوکنز ڈیفالٹ کے طور پر 24 گھنٹے بعد ختم ہو جاتے ہیں
- Log Stream توثیق - ویب ہک اینڈ پوائنٹس کے لیے bearer token verification استعمال کریں
- ٹینینٹ تنہائی - فی Auth0 ٹینینٹ علیحدہ کنفیگریشنز
- خفیہ کردہ ٹرانسپورٹ - تمام API مواصلات کے لیے TLS 1.2+