Index: src/server.js
===================================================================
--- src/server.js	(revision 732272a320793693be207b1b67af729b1feca30f)
+++ src/server.js	(revision 8501ee8ff9d5923c6378b479dc3a5553bfdf9884)
@@ -66,4 +66,5 @@
 import ogRoutes from './routes/og.js';
 import apRoutes from './routes/activitypub.js';
+import owaRoutes, { owaMiddleware } from './routes/openwebauth.js';
 import oauthRoutes from './routes/oauth.js';
 import { apWants, startDeliveryWorker, selfHealTimeline, migrateReactions } from './services/ActivityPubService.js';
@@ -311,4 +312,10 @@
 // ActivityPub: WebFinger + /ap/* (site-agnostic, resolves the site by slug).
 app.use(apRoutes);
+// OpenWebAuth (FEP-61cf): het token-endpoint en het inlogformulier.
+app.use(owaRoutes);
+// En op elk GET-verzoek kijken of er een token wordt ingewisseld (?owt=) of een
+// stroom gestart (?zid=). Na de sessie, want het resultaat gaat IN de sessie;
+// voor de pagina's, want een poort verderop moet de uitkomst al kunnen zien.
+app.use(owaMiddleware);
 // ActivityPub C2S: OAuth 2.0 (native/web clients). Site-agnostic; the consent
 // screen picks which site the token can post as.
