Aller au contenu principal

Risk API

Endpoints d'evaluation de risque, de monitoring de securite et de gestion des evenements de securite. Le systeme implemente un moteur de detection de fraude base sur des regles.

Base URL : /api/v2/risk

Endpoints

MethodeEndpointDescriptionAuth
GET/risk/scoreScore de risque du compteOui
GET/risk/eventsEvenements de securiteOui
GET/risk/events/:idDetails d'un evenementOui
POST/risk/events/:id/acknowledgeAcquitter un evenementOui
GET/risk/overviewVue d'ensemble securiteOui

GET /risk/score

Obtenir le score de risque actuel du compte.

GET /api/v2/risk/score
Authorization: Bearer <access_token>

Reponse 200 OK

{
"score": 25,
"level": "LOW",
"factors": [
{
"type": "NEW_DEVICE",
"impact": 15,
"description": "Login from new device",
"occurredAt": "2025-01-15T08:00:00Z"
},
{
"type": "LOCATION_CHANGE",
"impact": 10,
"description": "Login from new city",
"occurredAt": "2025-01-15T08:00:00Z"
}
],
"recommendation": "ALLOW",
"lastCalculatedAt": "2025-01-15T10:30:00Z"
}

GET /risk/events

Lister les evenements de securite du compte.

GET /api/v2/risk/events?severity=HIGH&acknowledged=false&page=1&limit=20
Authorization: Bearer <access_token>

Query Parameters

ParametreTypeDefautDescription
typestring--Filtrer par type d'evenement
severitystring--Filtrer par severite
acknowledgedboolean--Filtrer par acquittement
fromISO date30 joursDate de debut
toISO datemaintenantDate de fin
pagenumber1Numero de page
limitnumber20Resultats par page

Reponse 200 OK

{
"data": [
{
"id": "event-uuid-1",
"type": "IMPOSSIBLE_TRAVEL",
"severity": "HIGH",
"description": "Login detected 500km away within 30 minutes",
"metadata": {
"previousLocation": {
"city": "Paris",
"country": "France"
},
"newLocation": {
"city": "London",
"country": "UK"
},
"distance": 344,
"timeDelta": 1800
},
"action": "CHALLENGE",
"acknowledged": false,
"createdAt": "2025-01-15T09:00:00Z"
}
],
"meta": {
"page": 1,
"limit": 20,
"total": 5,
"unacknowledged": 1
}
}

POST /risk/events/:id/acknowledge

Acquitter un evenement de risque (marquer comme examine).

POST /api/v2/risk/events/:id/acknowledge
Authorization: Bearer <access_token>
Content-Type: application/json

{
"note": "This was me traveling for work"
}

Reponse 200 OK

{
"id": "event-uuid",
"acknowledged": true,
"acknowledgedAt": "2025-01-15T10:30:00Z",
"note": "This was me traveling for work"
}

GET /risk/overview

Vue d'ensemble complete de la securite du compte.

GET /api/v2/risk/overview
Authorization: Bearer <access_token>

Reponse 200 OK

{
"riskScore": {
"current": 25,
"level": "LOW",
"trend": "STABLE"
},
"summary": {
"totalEvents": 12,
"unacknowledgedEvents": 1,
"last30Days": {
"criticalEvents": 0,
"highEvents": 1,
"mediumEvents": 3,
"lowEvents": 8
}
},
"devices": {
"total": 3,
"trusted": 2,
"suspicious": 0,
"new": 1
},
"sessions": {
"active": 2,
"maxAllowed": 4,
"unusualLocations": 0
},
"recentActivity": {
"lastLogin": "2025-01-15T08:00:00Z",
"lastPasswordChange": "2024-12-01T00:00:00Z",
"lastProfileChange": "2025-01-10T14:00:00Z"
},
"recommendations": [
{
"type": "REVIEW_DEVICES",
"priority": "LOW",
"message": "You have 1 new device. Review your device list.",
"actionUrl": "/settings/devices"
}
]
}

Types d'evenements de risque

TypeDescriptionSeverite par defaut
NEW_DEVICEConnexion depuis un appareil non reconnuLOW
LOCATION_CHANGEConnexion depuis un nouvel emplacementLOW
IMPOSSIBLE_TRAVELConnexion geographiquement impossibleHIGH
FAILED_LOGINSMultiples tentatives de connexion echoueesMEDIUM
BRUTE_FORCEAttaque brute-force suspecteeCRITICAL
CONCURRENT_SESSIONSLimite de sessions depasseeMEDIUM
VPN_PROXYConnexion depuis un VPN/proxy connuLOW
ACCOUNT_SHARINGPartage de compte suspecteMEDIUM
PASSWORD_SPRAYMeme mot de passe sur plusieurs comptesHIGH
RATE_LIMIT_EXCEEDEDViolations repetees du rate limitMEDIUM

Niveaux de severite

SeveriteImpact scoreDescription
CRITICAL+40 a +50Action immediate requise
HIGH+25 a +40Investigation rapide
MEDIUM+15 a +25Surveiller la situation
LOW+5 a +15Informatif

Calcul du score de risque

ScoreNiveauAction recommandee
0-30LOWALLOW (acces normal)
31-60MEDIUMSTEP_UP (verification supplementaire)
61-85HIGHCHALLENGE (re-authentification)
86-100CRITICALBLOCK (acces bloque)

Decroissance du score

  • -5 points par jour sans incident
  • Score minimum : 0
  • Reinitialisation lors d'un changement de mot de passe

Regles du moteur de risque

Deplacement impossible

SI distance_connexion > 500km ET temps_depuis_derniere_connexion < 1 heure
ALORS score += 40, severite = HIGH, action = CHALLENGE

SI distance_connexion > 300km ET temps_depuis_derniere_connexion < 2 heures
ALORS score += 25, severite = MEDIUM, action = STEP_UP

Tentatives de connexion echouees

SI tentatives_echouees >= 3 en 10 minutes
ALORS score += 15, severite = MEDIUM, action = STEP_UP

SI tentatives_echouees >= 5 en 10 minutes
ALORS score += 25, severite = HIGH, action = ACCOUNT_LOCK

Confiance de l'appareil

SI device.trustScore < 20
ALORS score += 20, severite = MEDIUM, action = STEP_UP

SI device.status == SUSPICIOUS
ALORS score += 35, severite = HIGH, action = CHALLENGE

VPN/Proxy

SI ip DANS liste_vpn_connus OU ip DANS liste_proxy_connus
ALORS score += 20, severite = LOW, action = LOG

Actions

ActionDescription
ALLOWAcces normal
LOGAutoriser mais enregistrer pour examen
STEP_UPVerification supplementaire requise
CHALLENGERe-authentification requise
BLOCKAcces refuse
ACCOUNT_LOCKVerrouillage temporaire du compte

Codes d'erreur

CodeHTTPDescription
RISK_001404Evenement de risque introuvable
RISK_002400Evenement deja acquitte
RISK_003403Acces aux evenements d'un autre compte interdit