Auth0 कनेक्टर
authenticated user profiles को marketing contacts के रूप में sync करने, authentication events के आधार पर automations trigger करने, और identity एवं access management insights से अपने customer data को समृद्ध करने के लिए Tajo के माध्यम से Auth0 को Brevo से कनेक्ट करें।
अवलोकन
| Property | Value |
|---|---|
| Platform | Auth0 (by Okta) |
| Category | Identity & Access (Custom) |
| Setup Complexity | Medium |
| Official Integration | No |
| Data Synced | Users, Events, Roles, Identities |
| Auth Method | Machine-to-Machine OAuth 2.0 |
विशेषताएं
- User profile sync - Auth0 user profiles को Brevo contacts से sync करें
- Authentication events - login, signup, और password reset पर automations trigger करें
- Role-based segmentation - Auth0 roles और permissions के आधार पर contacts segment करें
- Social identity data - social login profile जानकारी से contacts को समृद्ध करें
- Login activity tracking - last login, login count, और device data ट्रैक करें
- Multi-tenant support - कई Auth0 tenants में users sync करें
पूर्वावश्यकताएं
शुरू करने से पहले, सुनिश्चित करें कि आपके पास हैं:
- API access वाला एक Auth0 account
- Auth0 में एक Machine-to-Machine application registered
- M2M application को दी गई Management API permissions
- API access वाला एक Brevo account
- connector permissions वाला एक Tajo account
प्रमाणीकरण
Machine-to-Machine OAuth 2.0
# Auth0 Dashboard में एक M2M application बनाएं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 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 डिफ़ॉल्ट रूप से 24 घंटे के लिए मान्य होता हैAPI Permissions
अपने M2M application को केवल आवश्यक scopes प्रदान करें: read:users, read:user_idp_tokens, read:roles, और read:logs. आवश्यकता न हो तो write permissions देने से बचें।
कॉन्फ़िगरेशन
बेसिक सेटअप
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 * * *" # हर 4 घंटे में
lists: all_users: 20 verified_users: 21 social_login: 22Field Mapping
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 Endpoints
| Endpoint | Method | विवरण |
|---|---|---|
https://{domain}/api/v2/users | GET | users list या search करें |
https://{domain}/api/v2/users/{id} | GET | एक user प्राप्त करें |
https://{domain}/api/v2/users/{id} | PATCH | user metadata अपडेट करें |
https://{domain}/api/v2/users/{id}/roles | GET | user roles प्राप्त करें |
https://{domain}/api/v2/roles | GET | सभी roles list करें |
https://{domain}/api/v2/logs | GET | log events प्राप्त करें |
https://{domain}/api/v2/stats/active-users | GET | active users count प्राप्त करें |
https://{domain}/api/v2/stats/daily | GET | daily stats प्राप्त करें |
https://{domain}/oauth/token | POST | access token प्राप्त करें |
कोड उदाहरण
कनेक्टर शुरू करें
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});Users को Brevo से Sync करें
// Auth0 users के माध्यम से paginate करें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 के माध्यम से Authentication Events ट्रैक करें
// Auth0 Log Stream webhook सेट करें// Auth0 Dashboard > Monitoring > Streams में कॉन्फ़िगर करें
app.post('/webhooks/auth0', async (req, res) => { // 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': // सफल 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': // सफल signup await tajo.contacts.sync({ email: log.data.details.email, attributes: { SIGNUP_DATE: log.data.date }, listIds: [20] }); break; case 'sp': // सफल password change await tajo.events.track({ email: log.data.details.email, event: 'password_changed' }); break; } }
res.status(200).send('OK');});Role-आधारित Segmentation
// segmentation के लिए user roles sync करें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') }});Rate Limits
| Endpoint Category | Limit | नोट्स |
|---|---|---|
| Management API | 50 req/sec (Free) | प्रति tenant |
| Management API | 100 req/sec (Paid) | प्रति tenant |
| Authentication API | भिन्न | plan पर आधारित |
| Log Streams | Real-time | delivery पर कोई rate limit नहीं |
| Pagination | अधिकतम 50 items/page | page और per_page params का उपयोग करें |
Pagination आवश्यक
Auth0 Management API प्रति page अधिकतम 50 परिणाम लौटाता है। हमेशा page और per_page parameters का उपयोग करके pagination लागू करें। कुल count प्राप्त करने के लिए include_totals=true शामिल करें।
समस्या निवारण
| समस्या | कारण | समाधान |
|---|---|---|
| 401 Unauthorized | Token expire हो गया | नया M2M token request करें (24h expiry) |
| 403 Forbidden | गायब scopes | M2M app को आवश्यक permissions दें |
| खाली user list | Search query error | v3 engine के लिए Lucene query syntax का उपयोग करें |
| गायब metadata | Metadata सेट नहीं है | user_metadata और app_metadata की जांच करें |
| Rate limit 429 | बहुत अधिक requests | retry headers के साथ backoff लागू करें |
Debug Mode
connectors: auth0: debug: true log_level: verbose log_sync: trueसर्वोत्तम प्रथाएं
- Log Streams का उपयोग करें - Logs API को poll करने के बजाय real-time event streaming
- Pagination लागू करें - बड़े tenants के लिए हमेशा user list queries को paginate करें
- M2M tokens cache करें - expiry के निकट तक tokens को reuse करें (24h डिफ़ॉल्ट lifetime)
- search engine v3 का उपयोग करें - कुशल user searches के लिए Lucene query syntax का उपयोग करें
- केवल verified users sync करें - unverified contacts से बचने के लिए
email_verified:trueपर filter करें - user metadata का लाभ उठाएं - sync के लिए Auth0 user_metadata में custom attributes store करें
सुरक्षा
- Machine-to-Machine OAuth - server-to-server auth के लिए client credentials grant
- Scoped permissions - न्यूनतम आवश्यक Management API scopes प्रदान करें
- Token rotation - M2M tokens डिफ़ॉल्ट रूप से 24 घंटे के बाद expire होते हैं
- Log Stream auth - webhook endpoints के लिए bearer token verification का उपयोग करें
- Tenant isolation - प्रति Auth0 tenant अलग configurations
- Encrypted transport - सभी API communications के लिए TLS 1.2+