Kotlin (Java and Kotlin)
Sign in with Atheron in Kotlin.
Melden Sie sich an, um Ihre eigene Test-Client-ID in den Beispielen zu sehen.
Coming soon. org.aton-network:aton-network-sdk is not published on Maven Central yet, so the install line on this page does not work until it is. Until then, everything works over plain HTTP: pick cURL in any code block, or start from Endpoints.
Kotlin uses the same packages: aton-network-sdk for the core and aton-network-spring-boot-starter for Spring Boot. Every example on these pages has a Kotlin version; pick Kotlin at the top of any code block. For Spring, apply the kotlin("plugin.spring") Gradle plugin as Spring Boot's own Kotlin guide does.
Set ATHERON_CLIENT_ID, ATHERON_CLIENT_SECRET and ATHERON_REDIRECT_URI on your server (or atheron.client-id, atheron.client-secret and atheron.redirect-uri in application.properties), and ATHERON_WEBHOOK_SECRET (or atheron.webhook-secrets) for webhooks.
The app
// app/auth/[...atheron]/route.ts: every Sign in with Atheron route in one file.
// Set ATHERON_CLIENT_ID, ATHERON_CLIENT_SECRET, ATHERON_SECRET and
// ATHERON_REDIRECT_URI=https://your.app/auth/callback (the address you registered).
import { Atheron } from "@aton-network/nextjs";
const atheron = Atheron();
export const { GET, POST } = atheron.handlers;Protect a page
// proxy.ts (middleware.ts before Next 16): anybody not signed in goes to Atheron first, then back.
import { Atheron } from "@aton-network/nextjs";
const atheron = Atheron({ protect: ["/account", "/settings"] });
export async function proxy(request: Request): Promise<Response | undefined> {
return atheron.proxy(request);
}
// In a server component, read the person with: await atheron.user(await cookies())Check a webhook
// Check that a webhook came from Atheron before you act on it. Pass the raw body, exactly as received.
import { verifyWebhook, type WebhookEvent } from "@aton-network/sdk";
export async function handleWebhook(request: Request): Promise<Response> {
const raw = await request.text();
const ok = await verifyWebhook(request.headers.get("atheron-signature"), raw, process.env.ATHERON_WEBHOOK_SECRET!);
if (!ok) return new Response("bad signature", { status: 400 });
const event = JSON.parse(raw) as WebhookEvent;
if (event.type === "consent.revoked") {
// Delete the refresh token you hold for event.data.sub, and stop using what you read.
}
return new Response(null, { status: 204 });
}Follow the events stream
PKCE, state and nonce are checked on every sign-in, the flow is spent on use and lasts ten minutes, the session ID changes when somebody signs in, a return address is always a path on your site, signing out revokes the refresh token at Atheron, and a sign-out from another site is refused.
# Follow the events stream. -N keeps curl from buffering; pass the last id you handled to resume.
curl -N https://developers.aton-network.org/api/v1/events \
-H "Authorization: Bearer $ATHERON_API_KEY" \
-H "Accept: text/event-stream" \
-H "Last-Event-ID: $LAST_EVENT_ID"retry: 3000
event: ready
data: {"types":null}
id: 5b1c2a8e-0000-4000-8000-000000000001
event: user.signed_in
data: {"id":"5b1c2a8e-0000-4000-8000-000000000001","type":"user.signed_in","created":"2026-10-15T17:02:11.000Z","client_id":"live-1a2b3c4d5e6f7a8b","data":{"sub":"9a6d4c1e-1f0b-4a51-8a8e-3b2f6c0d7e11","scopes":["openid","email"],"at":"2026-10-15T17:02:11.000Z"}}
: beatFragen Sie Atlas
KI-AssistentFragen Sie alles zu Mit Atheron anmelden, zur API oder zum Portal. Die Antwort kommt aus unserer Dokumentation, mit Links zu den genutzten Seiten.