Identiteitsverificatie
Met identiteitsverificatie kun je ingelogde gebruikers in de Eloquent-chatwidget veilig identificeren. Wanneer een gebruiker op je website is geauthenticeerd, kun je Eloquent een ondertekende JWT doorgeven zodat de agent weet wie de gebruiker is en een meer gepersonaliseerde supportervaring kan bieden.
In Eloquent wordt identiteitsverificatie afgehandeld via de identify-integratie. Je server maakt een ondertekende JWT, je frontend geeft die token door aan de Eloquent-widget en Eloquent verifieert de token voordat het gesprek aan een agentprofiel wordt gekoppeld.
Wanneer identiteitsverificatie te gebruiken
Personaliseer de chatervaring
Gebruik identiteitsverificatie wanneer je wilt dat de agent ingelogde gebruikers herkent en reageert met gebruikersspecifieke context.
- Begroet gebruikers bij naam of met accountgegevens
- Begrijp het abonnement, de rol of het plan van de gebruiker
- Bied support op basis van geverifieerde profielinformatie
- Koppel gesprekken in de loop van de tijd aan dezelfde bekende gebruiker
Gebruik geverifieerde gebruikerscontext
De geverifieerde JWT-claims worden als systeemcontext aan de agent toegevoegd. Hierdoor kan de agent tijdens het beantwoorden van de gebruiker betrouwbare identiteitsinformatie gebruiken.
- Gebruikers-ID (vereist)
- E-mailadres (aanbevolen)
- Naam
- Plan- of abonnementsniveau
- Alle andere aangepaste claims die je in de JWT opneemt
Houd agentprofielen up-to-date
Elke geldige identiteitstoken maakt of werkt een Eloquent-agentprofiel bij voor de opgegeven user_id. Dit betekent dat gebruikersinformatie actueel kan blijven zonder het profiel elders handmatig bij te werken.
Implementatiehandleiding
Vereisten
- Het Eloquent-embedscript is op je website geïnstalleerd.
- De
identify-functie is ingeschakeld voor je bedrijf of agent. - Je hebt toegang tot de integratie-instellingen van de agent in het Eloquent-dashboard.
Haal je JWT-secret op
- Open het Eloquent-dashboard.
- Selecteer de agent die je wilt configureren.
- Ga naar
Integrations -> Identity Verification. - Genereer een JWT-secret.
- Sla de secret veilig op je server op, bijvoorbeeld in een omgevingsvariabele.
De JWT-secret wordt alleen getoond wanneer deze wordt gegenereerd. Houd hem privé en stel hem nooit bloot in frontendcode.
JWT-identiteitsverificatie
JWT-overzicht
Eloquent gebruikt een JSON Web Token om te verifiëren dat de huidige websitebezoeker een echte geauthenticeerde gebruiker uit je eigen applicatie is. De JWT wordt op je server ondertekend met de secret uit het Eloquent-dashboard.
Wanneer Eloquent de token ontvangt, verifieert het de handtekening met de geconfigureerde secret. Als de token geldig is, maakt of werkt Eloquent het agentprofiel voor die gebruiker bij en koppelt het de geverifieerde identiteit aan het chatverzoek.
JWT-payload
De JWT-payload moet een user_id bevatten.
Vereiste claims:
user_id: een stabiele unieke identificator voor de gebruiker in je systeem
Optionele claims:
email: het e-mailadres van de gebruiker (aanbevolen)name: de naam van de gebruikerplan: het plan of abonnementsniveau van de gebruikerrole: de rol van de gebruiker in je applicatie- Alle andere aangepaste attributen die je beschikbaar wilt maken voor de agent
Eloquent slaat email rechtstreeks op in het agentprofiel wanneer dit wordt meegegeven. Andere aangepaste claims worden opgeslagen als profielclaims.
Genereer de JWT op je server
JWT's moeten server-side worden gegenereerd. Genereer ze niet in de browser, omdat je daarmee je Eloquent JWT-secret zou blootstellen.
import jwt from "jsonwebtoken";
const secret = process.env.ELOQUENT_JWT_SECRET;
const token = jwt.sign(
{
user_id: user.id,
email: user.email,
name: user.name,
plan: user.plan,
role: user.role,
},
secret,
{
expiresIn: "1h",
algorithm: "HS256",
}
);
Geef de token terug aan je frontend
Je applicatie moet een geauthenticeerd endpoint beschikbaar stellen dat een token retourneert voor de momenteel ingelogde gebruiker.
app.post("/api/eloquent-token", async (req, res) => {
const user = await getCurrentUser(req);
if (!user) {
return res.status(401).json({
message: "Unauthorized",
});
}
const token = jwt.sign(
{
user_id: user.id,
email: user.email,
name: user.name,
plan: user.plan,
},
process.env.ELOQUENT_JWT_SECRET,
{
expiresIn: "1h",
algorithm: "HS256",
}
);
return res.json({ token });
});
Identificeer de gebruiker in de frontend
Nadat je frontend de ondertekende JWT heeft ontvangen, geef je deze door aan de Eloquent-widget met window.eloquent("identify", { token }).
async function identifyEloquentUser() {
const response = await fetch("/api/eloquent-token", {
method: "POST",
credentials: "include",
});
if (!response.ok) {
return;
}
const data = await response.json();
window.eloquent("identify", {
token: data.token,
});
}
identifyEloquentUser();
}
Roep identify aan nadat het Eloquent-embedscript is geladen en, indien mogelijk, voordat de gebruiker een chat start.
Volledig voorbeeld
Stap 1: Gebruiker logt in
Authenticeer de gebruiker met je bestaande inlogflow. Na het inloggen kan je backend een Eloquent-identiteitstoken voor die gebruiker aanmaken.
app.post("/api/login", async (req, res) => {
const { email, password } = req.body;
const user = await authenticateUser(email, password);
if (!user) {
return res.status(401).json({
message: "Invalid credentials",
});
}
const token = jwt.sign(
{
user_id: user.id,
email: user.email,
name: user.name,
plan: user.plan,
support_tier: user.supportTier,
},
process.env.ELOQUENT_JWT_SECRET,
{
expiresIn: "1h",
algorithm: "HS256",
}
);
return res.json({
user: {
id: user.id,
email: user.email,
name: user.name,
},
eloquentToken: token,
});
});
Stap 2: Geef de token door aan Eloquent
async function loginUser() {
const response = await fetch("/api/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
credentials: "include",
body: JSON.stringify({
email: "[email protected]",
password: "password",
}),
});
if (!response.ok) {
return;
}
const data = await response.json();
window.eloquent("identify", {
token: data.eloquentToken,
});
}
Stap 3: Eloquent verifieert de gebruiker
Wanneer de gebruiker een chatbericht verstuurt, neemt Eloquent de identiteitstoken op in het chatverzoek. De backend verifieert de JWT met de geconfigureerde secret.
Als de token geldig is, zal Eloquent:
- Het agentprofiel aanmaken of bijwerken voor de opgegeven
user_id - De
email-claim opslaan wanneer deze wordt meegegeven - Aanvullende claims opslaan als profielclaims
- Het profiel aan het gesprek koppelen
- De geverifieerde identiteitsgegevens toevoegen als systeemcontext voor de agent
Beveiligingsbest practices
- Genereer JWT's alleen op je server.
- Sla de Eloquent JWT-secret op in een omgevingsvariabele.
- Stel de JWT-secret nooit bloot in frontend-JavaScript.
- Gebruik kortlevende tokens, bijvoorbeeld
1h. - Gebruik een stabiele interne gebruikers-ID voor
user_id. - Vermijd het gebruik van e-mails als
user_id, omdat e-mails kunnen veranderen. - Neem alleen claims op die nuttig zijn voor support of personalisatie.
- Neem geen wachtwoorden, betalingsgegevens, toegangstokens of andere zeer gevoelige data op.
Gedragsnotities
- De token moet zijn ondertekend met
HS256. - De JWT moet
user_idbevatten. - De
email-claim is optioneel. - Aanvullende claims worden ondersteund.
- Ongeldige, verlopen of ontbrekende tokens worden voor identiteitsdoeleinden genegeerd.
- Standaard JWT-timingclaims zoals
iat,expennbfworden niet opgeslagen als profielclaims.
Problemen oplossen
Gebruiker is niet geïdentificeerd
- Controleer of de agent een JWT-secret geconfigureerd heeft.
- Bevestig dat de frontend
window.eloquent("identify", { token })aanroept. - Bevestig dat de token vóór of tijdens de chatsessie wordt verzonden.
JWT-verificatie mislukt
- Bevestig dat de token is ondertekend met
HS256. - Bevestig dat de server hetzelfde secret gebruikt dat in Eloquent is gegenereerd.
- Bevestig dat de token niet is verlopen.
- Bevestig dat de JWT-payload een string
user_idbevat.
Profielgegevens ontbreken
- Bevestig dat de JWT de claims bevat die je verwacht.
- Gebruik
emailvoor het e-mailveld van het profiel. - Gebruik extra top-level JWT-claims voor aangepaste profielclaims.
- Onthoud dat
iat,expennbfniet als profielclaims worden opgeslagen.