Dans la console d’administration Okta, Rapports → Journal du Système vous permet de rechercher des événements et de télécharger les résultats. Pour JSON, utilisez l’API du Journal du Système : GET /api/v1/logs avec since et until, en suivant le lien suivant jusqu’à épuisement. Un court script est ci-dessous. Okta conserve les événements du Journal du Système pendant 90 jours.
Lorsque l’identité est le périmètre, le Journal du Système d’Okta est le journal de la porte. Il enregistre chaque connexion, chaque poussée MFA, chaque réinitialisation de facteur et chaque changement de rôle d’admin. Prime Core a 58 règles de détection pour les données Okta, mappées à 32 techniques MITRE ATT&CK. Parmi eux : pulvérisation de mot de passe (T1110.003), fatigue MFA (T1621) et attaquants altérant l’inscription MFA (T1556.006).
Avant de commencer
La rétention est de 90 jours. Tout ce qui est plus ancien n’existe que là où vous avez diffusé ou transféré les journaux Okta, comme un SIEM.
Vous avez besoin d’un jeton. Un jeton API (Sécurité → API → Jetons) hérite des permissions de l’admin qui l’a créé. Un admin en lecture seule suffit pour les journaux. Pour tout ce qui est automatisé, une application de service OAuth avec la portée okta.logs.read est le choix le plus propre. Dans tous les cas, le jeton est un justificatif. Gardez-le hors de l’historique du shell et révoquez-le une fois terminé.
Des limites de taux s’appliquent. Le point d’accès des journaux a sa propre limite de taux. Les grandes fenêtres sont acceptables, mais pas instantanément.
Exporter avec l’API du Journal du Système
Ce script Python parcourt une fenêtre temporelle et écrit un événement par ligne. Il nécessite des demandes (pip install requests) :
import json, os, requests
org = "https://yourorg.okta.com"
headers = {"Authorization": f"SSWS {os.environ['OKTA_TOKEN']}", "Accept": "application/json"}
url = f"{org}/api/v1/logs"
params = {"since": "2026-10-19T00:00:00Z", "until": "2026-10-20T00:00:00Z", "limit": 1000}
with open("okta_1019.jsonl", "w") as out:
while url:
r = requests.get(url, headers=headers, params=params, timeout=60)
r.raise_for_status()
events = r.json()
for e in events:
out.write(json.dumps(e) + "n")
if not events:
break
url = r.links.get("next", {}).get("url")
params = None # le lien suivant porte déjà la requête
Toujours définir until. Sans cela, Okta traite la demande comme un sondage en direct et continue de renvoyer un lien suivant. Votre boucle fonctionnerait indéfiniment, attendant de nouveaux événements.
Pour le réduire, ajoutez un filtre à params, par exemple « filter »: ‘eventType eq « user.session.start »‘. Ou utilisez « q »: « jane » pour une recherche par mot-clé.
À quoi s’attendre
| eventType | Pourquoi c’est important |
|---|---|
| user.session.start avec outcome.result : FAILURE | Connexions échouées ; de nombreux utilisateurs d’une même plage d’IP signifie pulvérisation |
| user.mfa.okta_verify.deny_push | Utilisateur a rejeté une poussée ; une rafale de ceux-ci est une fatigue MFA en cours |
| user.mfa.factor.deactivate, user.mfa.factor.reset_all | Facteurs supprimés, souvent juste après un appel d’ingénierie sociale au helpdesk |
| user.account.privilege.grant | Rôle d’admin accordé |
| policy.rule.update, policy.lifecycle.update | La politique de connexion ou MFA a été modifiée, possiblement affaiblie |
| system.api_token.create | Un nouveau jeton API, une manière discrète de maintenir l’accès |
Les champs qui racontent l’histoire : actor.alternateId (qui), client.ipAddress et client.geographicalContext (d’où), outcome (ce qui s’est passé), et debugContext.debugData (les détails).
Envoyer, assainir et examiner dans LogTotal
- Envoyer. Ouvrez logtotal.com et déposez le fichier .jsonl. [PROOF : écran de téléchargement, limite de taille]
- Assainir. [PROOF: what gets masked: usernames and emails, IPs, device and session IDs]. Look it over before you continue.
- Examiner. [PROOF: what the results screen shows]
Quand ça tourne mal
| Symptôme | Cause probable | Fix |
|---|---|---|
| 401 | Jeton incorrect ou révoqué, ou préfixe SSWS manquant | Vérifiez le format de l’en-tête ; créez un nouveau jeton |
| 403 | Le créateur du jeton n’a pas le droit de lire les journaux | Utilisez un jeton d’un admin avec accès aux journaux |
| 429 | Limite de taux atteinte | Attendez le temps dans X-Rate-Limit-Reset, puis continuez |
| Le script ne se termine jamais | Pas de until dans la requête | Définissez until |
| Rien de plus vieux que 90 jours | Rétention Okta | Vérifiez votre SIEM ou la destination du streaming de journaux |
FAQ
Ne puis-je pas simplement utiliser la console d’administration ?
Pour un petit aperçu d’une courte fenêtre, oui. Pour tout ce que vous souhaitez analyser ou conserver, l’API vous fournit un JSON complet avec chaque champ.
Cela couvre-t-il Auth0 ?
Non. Ce guide concerne Okta Workforce Identity. Auth0 a son propre format de journal et API.