Introduction
BJSecureID est une plateforme de détection et prévention de fraude identitaire. Elle identifie chaque visiteur par son empreinte numérique (fingerprint), calcule un score de confiance, et permet aux plateformes partenaires de sécuriser leurs services.
UUID
Identifiant unique par visiteur
0-100
Trust Score calculé automatiquement
18+
Composants fingerprint collectés
Modes du SDK
Le SDK fonctionne en deux modes selon votre besoin :
Le SDK collecte l'empreinte et identifie le visiteur silencieusement. Aucune interaction avec votre backend. Idéal pour la détection et protection sans modification de votre infrastructure.
- - Collecte fingerprint automatique
- - Identification visiteur (UUID)
- - Trust Score disponible en callback
- - Aucun webhook requis
Le SDK interagit activement avec votre plateforme via webhooks, partage de profils et synchronisation. Idéal pour l'authentification croisée et le mode SSO.
- - Tout le mode passif +
- - Webhooks temps réel
- - Partage de profils sécurisé (HMAC)
- - Mode SSO inter-plateformes
- - Push de données identitaires
1. Intégration rapide
Ajoutez le SDK dans votre page HTML avec votre clé publique :
<script src="https://bjsecureid.com/sdk/bjsecure.js"></script>
<script>
BJSecure.init({
publicKey: 'pk_VOTRE_CLE_PUBLIQUE',
endpoint: 'https://bjsecureid.com/api/v1',
mode: 'passive', // ou 'active'
debug: false,
onReady: function(data) {
console.log('Visiteur:', data.visitor_uuid);
console.log('Score:', data.trust_score);
},
onError: function(err) {
console.error('Erreur:', err);
}
});
</script>
Important : Le SDK ne fonctionnera que sur les domaines autorisés pour votre plateforme. Si vous l'utilisez sur un domaine non enregistré, la requête sera rejetée (403).
2. Options de configuration
| Option | Type | Défaut | Description |
|---|---|---|---|
| publicKey | string | requis | Clé publique de votre plateforme (pk_...) |
| endpoint | string | /api/v1 | URL de base de l'API |
| mode | string | passive | 'passive' ou 'active' |
| autoCollect | bool | true | Collecte automatique au chargement |
| debug | bool | false | Logs dans la console navigateur |
| onReady | function | - | Callback après identification réussie |
| onError | function | - | Callback en cas d'erreur |
3. API REST
Tous les endpoints requièrent le header X-API-Key (clé privée, côté serveur uniquement).
/api/v1/fingerprint
Envoie un fingerprint pour identification (utilisé par le SDK).
Response: { "success": true, "data": { "visitor_uuid", "trust_score", "is_new" } }
/api/v1/visitor/{uuid}
Récupère les informations complètes d'un visiteur.
/api/v1/events
analytics
Reçoit un lot d'événements visiteurs (pages vues, clics, scroll, formulaires, événements custom). Géré automatiquement par le SDK.
Body: { "visitor_uuid": "...", "session_id": "...", "events": [ { "type": "pageview", "url": "..." } ] }
/api/v1/profile
mode actif
Pousse des données de profil (nom, email, NPI, etc.).
Body: { "visitor_uuid": "...", "first_name": "...", "email": "...", "npi": "..." }
/api/v1/profile/{uuid}/secure
mode actif
Envoie sécurisé des données via webhook HMAC-SHA256.
Analytics & suivi d'événements SDK v1.2+
À partir de la v1.2, le SDK journalise automatiquement l'activité du visiteur (pages vues,
clics, défilement, soumissions de formulaire, fin de session) et l'envoie par lots à
/api/v1/events. Aucune
configuration n'est requise : le suivi est actif par défaut.
Événements custom
// Journaliser une action métier
BJSecure.track('inscription_terminee', { plan: 'premium', montant: 15000 });
Capture de formulaires & profil visiteur
Le SDK détecte les champs d'identité remplis (nom, prénom, email, téléphone, NPI) pour construire le profil du visiteur. Garde-fous appliqués automatiquement : les mots de passe, codes OTP et données de paiement ne sont jamais capturés (exclusion côté SDK et serveur).
- • Forcer la capture d'un champ :
data-bjs-capture="ville" - • Exclure un champ :
data-bjs-ignore - • Désactiver toute la capture :
captureFields: false
Options de tracking
| Option | Défaut | Description |
|---|---|---|
| autoTrack | true | Suivi automatique des événements |
| trackClicks | true | Suivi des clics sur liens/boutons |
| trackScroll | true | Profondeur de défilement (25/50/75/100%) |
| trackForms | true | Suivi des soumissions de formulaire |
| captureFields | true | Détection des champs d'identité (profil) |
⚖️ Conformité : la capture de champs de formulaire doit être déclarée dans la politique de confidentialité de votre plateforme et faire l'objet du consentement de l'utilisateur (RGPD / loi béninoise sur la protection des données).
4. Pousser des profils (mode actif)
BJSecure.pushProfile({
first_name: 'Koffi',
last_name: 'Agossou',
email: 'koffi@example.com',
npi: 'NPI-123456789',
id_card_type: 'CNI',
id_card_number: 'AB1234567',
authenticated: true,
custom_data: { role: 'client' }
}).then(res => console.log('OK', res));
5. Webhooks (mode actif)
Chaque webhook est signé avec HMAC-SHA256 pour garantir l'authenticité.
Headers envoyés :
X-BJSecure-Signature: hmac_sha256(payload, webhook_secret) X-BJSecure-Event: visitor.profile.request X-BJSecure-Timestamp: 1234567890 X-BJSecure-Platform: platform_uuid
Vérification côté serveur (PHP) :
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_BJSECURE_SIGNATURE'];
$expected = hash_hmac('sha256', $payload, $webhookSecret);
if (hash_equals($expected, $signature)) {
$data = json_decode($payload, true);
// Traiter les données...
}
6. Trust Score
Le Trust Score (0-100) est calculé automatiquement :
Bonus (+)
- - Profils authentifiés (+10 / plateforme)
- - Ancienneté du visiteur (+2 / mois)
- - Données NPI, email, CNI complètes
- - Données biométriques fournies
Malus (-)
- - Alertes ouvertes (-10 par alerte)
- - Alertes critiques (-15 supplémentaire)
- - Trop de fingerprints (>10 : -2 par FP)
- - Blocages actifs (-20 par blocage)
- - Brute force détecté (-15)
7. Sécurité et domaines
Restriction par domaine : Chaque plateforme enregistre ses domaines autorisés. Le SDK et l'API rejettent toute requête provenant d'un domaine non autorisé.
Clé publique vs privée : La clé publique (pk_...) est utilisée côté client dans le SDK. La clé privée (X-API-Key) est utilisée côté serveur uniquement — ne jamais l'exposer.
Chiffrement : Les secrets API et webhook sont chiffrés en base de données (AES-256).
Rate limiting : L'API est limitée à 60 requêtes/minute par clé API.
Blocage : Une plateforme ou une entité entière peut être bloquée par l'administrateur BJSecureID à tout moment.
8. Association de devices (QR Code)
Permettez à vos utilisateurs d'associer un nouvel appareil à leur identité existante via un QR code ou un code alternatif à 8 caractères.
Flux :
- L'utilisateur ouvre l'appareil de confiance → génère un code
- Un QR code et un code texte (ex:
ABCD-EF12) s'affichent - Sur le nouvel appareil, scanner le QR ou saisir le code
- Le nouvel appareil est automatiquement rattaché au même visiteur
Le code expire après 5 minutes. Un seul code actif par visiteur/plateforme.
Côté appareil de confiance :
// Générer un code d'association
const result = await BJSecure.generateLinkCode();
if (result.success) {
const code = result.data.code; // "ABCD-EF12"
const qrData = result.data.qr_content; // JSON pour QR code
const expiresIn = result.data.expires_in_seconds; // 300
// Afficher le QR code (avec une lib comme qrcode.js)
QRCode.toCanvas(document.getElementById('qr'), qrData);
// Ou afficher le code texte comme alternative
document.getElementById('code').textContent = code;
// Polling optionnel pour détecter quand le code est utilisé
const interval = setInterval(async () => {
const status = await BJSecure.checkLinkStatus(code);
if (status.data?.status === 'used') {
clearInterval(interval);
alert('Nouvel appareil associé !');
}
}, 3000);
}
Côté nouvel appareil :
// Confirmer l'association avec le code saisi ou scanné
const result = await BJSecure.confirmLinkCode('ABCD-EF12');
if (result.success) {
console.log('Associé au visiteur:', result.data.visitor_uuid);
// Le SDK est maintenant lié au même visiteur
}
API endpoints :
POST /api/v1/device-link/generate— Générer un code (appareil de confiance)POST /api/v1/device-link/confirm— Confirmer un code (nouvel appareil)GET /api/v1/device-link/{code}/status— Vérifier le statut d'un code
9. Entités et plateformes
Chaque utilisateur de BJSecureID est rattaché à une entité (organisation, entreprise, gouvernement, etc.).
Une entité peut posséder plusieurs plateformes, chacune avec ses propres clés API, domaines autorisés et mode SDK.
Processus d'inscription :
- Créer un compte entité avec les informations légales
- Attendre la validation par l'équipe BJSecureID
- Ajouter une ou plusieurs plateformes
- Enregistrer les domaines autorisés
- Récupérer les clés publique/privée
- Intégrer le SDK sur vos pages
Types d'entités supportés :