Auth0 führt eine Action aus, bevor es einen Nutzer anlegt, der sich mit Passwort oder passwortlosem Code registriert (eine Database- oder Passwordless-Connection), und diese Action kann Bot Protection aufrufen und die Registrierung ablehnen. Die Registrierungsseite gehört Auth0, auf Auth0s Domain, also hat die Action kein _kz-Cookie: Die Entscheidung stützt sich auf IP und User-Agent.
Der Tag
Setzen Sie den Tag auf Ihre eigenen Seiten, wo Menschen ankommen, bevor sie sich registrieren, und wo sie sich anmelden und bezahlen, damit diese Entscheidungen den Token haben:
<script src="https://korzen.dev/v1/tag.js" data-site-key="YOUR_SITE_KEY" async></script>
Der Aufruf
Die Action. Auth0 gibt ihr insgesamt 20 Sekunden; der Aufruf hält sich an Ihren Timeout, und alles andere lässt die Registrierung durch:
// Auth0 Dashboard: Actions, Triggers, pre-user-registration; a new Action. // Add the secret KORZEN_API_KEY to the Action. exports.onExecutePreUserRegistration = async (event, api) => { let d = null; try { const res = await fetch("https://korzen.dev/v1/decide", { method: "POST", headers: { Authorization: `Bearer ${event.secrets.KORZEN_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ ip: event.request.ip, user_agent: event.request.user_agent, ja4: event.security_context?.ja4 || undefined, // behind Cloudflare only: left out without it headers: { "accept-language": event.request.language }, path: "/signup", method: "POST", }), signal: AbortSignal.timeout(200), }); if (res.ok) d = await res.json(); } catch {} // fail open if (d?.action === "block") { api.access.deny("korzen_block", "We could not create your account."); return; } // "challenge": Auth0's own CAPTCHA or MFA, if your plan has them if (d?.request_id) api.user.setAppMetadata("korzen_request_id", d.request_id); };
Auth0 gibt der Action die Sprache und den User-Agent des Browsers, aber keinen der anderen Header der Anfrage, daher leitet der Aufruf nur accept-language weiter: Die Header, die ein Browser-Build gleich sendet und die Bot Protection in den Aufrufen Ihres eigenen Servers liest, fehlen hier.
Bei einem Tenant, dessen Verkehr über Cloudflare kommt (die Enterprise-Pläne von Auth0), hat das Event auch security_context.ja4: den JA4 des TLS-Handshakes des Besuchers mit der Edge von Auth0, in derselben Form, die Bot Protection von Cloudflare vor Ihrem eigenen Server liest. Der Aufruf sendet ihn als ja4, wenn er da ist; ohne ihn bleibt das Feld weg.
Die IP des Besuchers
event.request.ip ist die Adresse, die Auth0 erreicht hat, bereits die des Besuchers: nichts einzurichten. Auf einer Custom Domain hinter Ihrem eigenen Proxy siehe Auth0s Einstellungen für Custom Domains zur IP des Besuchers.
Die Entscheidungen von Auth0 kommen ohne das Token des Tags. Hat Bot Protection Ihren Tag auf anderen Seiten gesehen, erhöht ein fehlendes Token den Score ein wenig (no_token), allein aber nie bis bot.
Die Aktion anwenden
Lesen Sie nur action. Bei block antworten Sie mit demselben Fehler, den die Aktion zeigt, wenn sie aus einem anderen Grund scheitert, damit ein Bot nichts lernt. Bei challenge nutzen Sie die Prüfung, die Sie schon haben (ein CAPTCHA, ein Code per E-Mail oder Telefon); ohne eine machen Sie weiter. Das Konto beginnt im Monitor-Modus, in dem action immer allow ist: Für Besucher ändert sich nichts, bis Sie den Block-Modus einschalten.
Die request_id aufbewahren
Jede Antwort hat eine request_id. Bewahren Sie sie bei dem auf, was die Aktion erstellt hat, in einer Spalte des Kontos oder der Bestellung, oder in einer Logzeile mit deren ID. Sie benennt diese Entscheidung, wenn Sie uns dazu etwas fragen, und lässt Sie später herausfinden, welche Antwort ein Fake-Konto durchgelassen hat.
Auf Ihrem Rechner testen
Verwenden Sie Ihren Entwicklungs-Tenant. Im Action-Editor führt Test sie mit einem Beispiel-Event aus; registrieren Sie sich dann auf Ihrer Login-Seite, und die Entscheidung erscheint auf der Seite Entscheidungen des Dashboards unter /signup. Prüfen Sie fail-open mit einem falschen KORZEN_API_KEY-Secret: Die Registrierung geht durch.
Häufige Fehler
- Social Sign-ups. Google, GitHub und ähnliche lösen den Pre-User-Registration-Trigger nicht aus; eine Post-Login-Action kann Bot Protection bei ihrer ersten Anmeldung nach ihnen fragen.
/v1/decideaus dem Browser aufrufen. Der API key würde jeden Besucher erreichen; der Aufruf gehört auf Ihren Server.- Kein Timeout, oder ein Fehler, der die Registrierung stoppt. Jede andere Antwort als
200, und keine Antwort rechtzeitig, bedeutet: den Besucher durchlassen.