在 Okta 管理控制台中, 报告 → 系统日志 允许您搜索事件并下载结果。对于 JSON,使用系统日志 API:GET /api/v1/logs,带有起始和结束时间,按照下一个链接直到结束。下面是一个简短的脚本。Okta 保留系统日志事件 90 天。
当身份成为边界时,Okta 的系统日志就是门户日志。它记录每一次登录、每次 MFA 推送、每次因素重置和每次管理员角色更改。Prime Core 有 58 条针对 Okta 数据的检测规则,映射到 32 个 MITRE ATT&CK 技术。其中包括:密码喷射(T1110.003)、MFA 疲劳(T1621)和攻击者篡改 MFA 注册(T1556.006)。
在您开始之前
保留期为 90 天。 任何旧的内容仅存在于您流式传输或转发 Okta 日志的地方,例如 SIEM。
您需要一个令牌。 一个 API 令牌(安全 → API → 令牌)继承创建它的管理员的权限。只读管理员对于日志足够。对于任何自动化操作,具有 okta.logs.read 范围的 OAuth 服务应用是更干净的选择。不论哪种情况,令牌都是凭据。请将其从 shell 历史记录中排除,并在完成后撤销它。
适用速率限制。 日志端点有其自己的速率限制。大时间窗口很好,只是不能立即。
使用系统日志 API 导出
这个 Python 脚本遍历一个时间窗口并逐行写入事件。需要 requests(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 # 下一个链接已经带有查询
始终设置 until. 没有它,Okta 将处理请求为实时轮询,并不断返回下一个链接。您的循环将永远运行,等待新事件。
要缩小范围,添加一个过滤器到参数中,例如 “filter”: ‘eventType eq “user.session.start”‘。或者使用 “q”: “jane” 进行关键字搜索。
要寻找的内容
| eventType | 为什么重要 |
|---|---|
| user.session.start with outcome.result: FAILURE | 登录失败;来自一个 IP 范围的许多用户意味着喷射攻击 |
| user.mfa.okta_verify.deny_push | 用户拒绝了推送;这些的激增是正进行中的 MFA 疲劳 |
| user.mfa.factor.deactivate, user.mfa.factor.reset_all | 因素被移除,通常是在帮助台社会工程电话之后 |
| user.account.privilege.grant | 授予了管理员角色 |
| policy.rule.update, policy.lifecycle.update | 登录或 MFA 策略更改,可能被削弱 |
| system.api_token.create | 一个新的 API 令牌,一种保持访问的安静方式 |
讲述故事的字段:actor.alternateId(谁),client.ipAddress 和 client.geographicalContext(从哪里),outcome(发生了什么),以及 debugContext.debugData(细节)。
上传、清理并在 LogTotal 中审核
- 上传。 打开 logtotal.com 并拖入 .jsonl 文件。
- 清理。
- 审核。
当出错时
| 症状 | 可能的原因 | Fix |
|---|---|---|
| 401 | 错误或已撤销的令牌,或缺少 SSWS 前缀 | 检查头格式;创建一个新令牌 |
| 403 | 令牌创建者缺乏读取日志的权限 | 使用具有日志访问权限的管理员令牌 |
| 429 | 达到速率限制 | 等待 X-Rate-Limit-Reset 中的时间,然后继续 |
| 脚本永远不会完成 | 查询中没有 until | 设置 until |
| 没有超过 90 天的内容 | Okta 保留 | 检查您的 SIEM 或日志流目的地 |
FAQ
我不能只使用管理控制台吗?
对于快速查看短时间窗口,是的。对于任何您想分析或保存的内容,API 为您提供完整的 JSON 和每一个字段。
这包括 Auth0 吗?
不。这本指南关于 Okta Workforce Identify。Auth0 有自己的日志格式和 API。