OAuth discovery voor AI-agents: authenticatie van de toekomst
Waarom AI-agents authenticatie nodig hebben
Naarmate AI-agents meer taken zelfstandig uitvoeren, groeit de behoefte aan veilige authenticatie. Een AI-agent die namens jou een vlucht boekt, een bestelling plaatst of toegang vraagt tot beschermde data, moet zich kunnen identificeren en autorisatie verkrijgen. Traditionele authenticatiemethoden zoals gebruikersnaam en wachtwoord zijn hiervoor ongeschikt: je wilt geen inloggegevens delen met een AI-agent.
OAuth 2.0 is al jaren de standaard voor gedelegeerde autorisatie op het web. Het maakt het mogelijk om een applicatie beperkte toegang te geven tot je account zonder je wachtwoord te delen. Voor AI-agents wordt OAuth steeds relevanter, maar dan met een belangrijke toevoeging: discovery. De agent moet zelfstandig kunnen ontdekken hoe en waar hij autorisatie kan aanvragen.
OAuth discovery — bibliotheekterm is de beveiligingslaag die samen met MCP-servers de basis vormt voor veilige agent-interactie. Waar MCP — bibliotheekterm definieert wat een agent kan doen, bepaalt OAuth wie dat mag doen en onder welke voorwaarden. Het is een essentieel onderdeel van de agent-ready stack naast je robots.txt configuratie.
OAuth Authorization Server Metadata
De basis van OAuth discovery is het Authorization Server Metadata document, gedefinieerd in RFC 8414. Dit JSON-document beschrijft alle endpoints en mogelijkheden van je OAuth-server en is beschikbaar op een gestandaardiseerde locatie. AI-agents kunnen dit document automatisch ophalen om te begrijpen hoe ze autorisatie kunnen aanvragen.
// Locatie: /.well-known/oauth-authorization-server
// Content-Type: application/json
{
"issuer": "https://auth.example.nl",
"authorization_endpoint": "https://auth.example.nl/authorize",
"token_endpoint": "https://auth.example.nl/token",
"registration_endpoint": "https://auth.example.nl/register",
"scopes_supported": [
"read:profile",
"read:products",
"write:orders",
"read:scan-results"
],
"response_types_supported": [
"code"
],
"grant_types_supported": [
"authorization_code",
"client_credentials"
],
"token_endpoint_auth_methods_supported": [
"client_secret_basic",
"client_secret_post"
],
"code_challenge_methods_supported": [
"S256"
]
}De belangrijkste velden uitgelegd
Elk veld in het metadata document speelt een specifieke rol in het discovery proces. Het issuer veld identificeert de autorisatieserver uniek. De endpoints vertellen de agent waar hij autorisatieverzoeken en tokenverzoeken naartoe moet sturen. Het registration_endpoint is bijzonder interessant voor AI-agents: het maakt dynamic client registration mogelijk, waardoor een agent zichzelf kan registreren zonder menselijke tussenkomst.
Verdiep je verder: MCP Servers: hoe AI-agents met je website communiceren | A2A protocol: agent-to-agent communicatie | Security headers die AI-vertrouwen opbouwen
OAuth Protected Resource Metadata
Naast de Authorization Server Metadata bestaat er ook de Protected Resource Metadata (RFC 9728). Dit document beschrijft de beveiligde resource zelf en vertelt AI-agents welke autorisatieserver ze moeten gebruiken en welke scopes nodig zijn om toegang te krijgen.
// Locatie: /.well-known/oauth-protected-resource
// Content-Type: application/json
{
"resource": "https://api.example.nl",
"authorization_servers": [
"https://auth.example.nl"
],
"scopes_supported": [
"read:products",
"write:orders"
],
"bearer_methods_supported": [
"header"
],
"resource_documentation": "https://api.example.nl/docs"
}- Het resource veld identificeert de API of dienst die beschermd is.
- authorization_servers verwijst naar de OAuth-server die tokens uitgeeft voor deze resource.
- scopes_supported vertelt welke permissies beschikbaar zijn.
- bearer_methods_supported geeft aan hoe het access token moet worden meegegeven (header, body of query).
- resource_documentation linkt naar de API-documentatie voor de agent.
De discovery flow voor AI-agents
Wanneer een AI-agent toegang wil tot een beschermde resource, doorloopt hij een gestandaardiseerde discovery flow. Dit proces verloopt volledig automatisch zonder menselijke tussenkomst, behalve bij de autorisatiestap waar de gebruiker toestemming geeft.
- De agent probeert een beschermde resource te benaderen en ontvangt een 401 Unauthorized response.
- De agent haalt de Protected Resource Metadata op via /.well-known/oauth-protected-resource.
- Uit dit document leest de agent welke autorisatieserver hij moet gebruiken.
- De agent haalt de Authorization Server Metadata op via /.well-known/oauth-authorization-server.
- De agent registreert zichzelf als client via het registration_endpoint (dynamic client registration).
- De agent initieert een OAuth autorisatie-flow en vraagt de gebruiker om toestemming.
- Na toestemming ontvangt de agent een access token waarmee hij de beschermde resource kan benaderen.
Visuele weergave van de flow
AI-Agent Resource Server Auth Server
| | |
|--- GET /api/data ----------->| |
|<-- 401 Unauthorized ---------| |
| | |
|--- GET /.well-known/oauth-protected-resource ---------->|
|<-- Protected Resource Metadata -------------------------|
| | |
|--- GET /.well-known/oauth-authorization-server -------->|
|<-- Authorization Server Metadata ---------------------->|
| | |
|--- POST /register (dynamic client registration) ------>|
|<-- client_id + client_secret --------------------------->|
| | |
|--- Redirect user to /authorize ----------------------->|
|<-- Authorization code (via redirect) ------------------>|
| | |
|--- POST /token (code + PKCE verifier) ---------------->|
|<-- access_token ----------------------------------------|
| | |
|--- GET /api/data (Bearer token) ------>| |
|<-- 200 OK + data --------------------| |Gebruik altijd PKCE (Proof Key for Code Exchange) in combinatie met de authorization code flow voor AI-agents. Dit voorkomt dat een kwaadwillende agent een onderschepte autorisatiecode kan misbruiken. Specificeer code_challenge_methods_supported: ["S256"] in je metadata.
Dynamic Client Registration: de sleutel voor agents
Dynamic Client Registration (RFC 7591) is een van de meest impactvolle features voor AI-agents. In traditionele OAuth-flows moet een ontwikkelaar handmatig een applicatie registreren bij de autorisatieserver. Met dynamic registration kan een AI-agent dit volledig autonoom doen.
// Dynamic Client Registration request
POST /register HTTP/1.1
Host: auth.example.nl
Content-Type: application/json
{
"client_name": "Claude AI Agent",
"redirect_uris": [
"https://claude.ai/oauth/callback"
],
"grant_types": ["authorization_code"],
"response_types": ["code"],
"token_endpoint_auth_method": "client_secret_basic",
"scope": "read:products read:profile"
}
// Response
{
"client_id": "generated-client-id",
"client_secret": "generated-secret",
"client_name": "Claude AI Agent",
"grant_types": ["authorization_code"],
"redirect_uris": ["https://claude.ai/oauth/callback"]
}Implementatie in Laravel
Voor Laravel-projecten biedt het Laravel Passport of Laravel Sanctum pakket een solide basis voor OAuth-implementatie. Passport ondersteunt volledige OAuth 2.0 flows inclusief authorization codes, terwijl Sanctum beter past bij eenvoudiger token-gebaseerde authenticatie. Voor AI-agent discovery is Passport de aangewezen keuze vanwege de volledige OAuth 2.0 ondersteuning.
De discovery endpoints (/.well-known/oauth-authorization-server en /.well-known/oauth-protected-resource) moeten je handmatig toevoegen als routes die de juiste JSON-metadata serveren. Zorg dat deze endpoints publiek toegankelijk zijn zonder authenticatie.
// routes/web.php
Route::get('/.well-known/oauth-authorization-server', function () {
return response()->json([
'issuer' => config('app.url'),
'authorization_endpoint' => config('app.url') . '/oauth/authorize',
'token_endpoint' => config('app.url') . '/oauth/token',
'registration_endpoint' => config('app.url') . '/oauth/register',
'scopes_supported' => ['read:profile', 'read:products'],
'response_types_supported' => ['code'],
'grant_types_supported' => ['authorization_code'],
'code_challenge_methods_supported' => ['S256'],
]);
});
Route::get('/.well-known/oauth-protected-resource', function () {
return response()->json([
'resource' => config('app.url') . '/api',
'authorization_servers' => [config('app.url')],
'scopes_supported' => ['read:profile', 'read:products'],
'bearer_methods_supported' => ['header'],
'resource_documentation' => config('app.url') . '/api/docs',
]);
});Vergeet niet om naast deze OAuth-endpoints ook je andere agent-ready componenten in te richten. Je HTTPS en HSTS configuratie is een randvoorwaarde: OAuth-flows mogen uitsluitend over beveiligde verbindingen verlopen. En je security headers dragen bij aan het vertrouwen dat AI-agents in je server hebben.
De toekomst van agent-authenticatie
OAuth discovery voor AI-agents staat nog in de kinderschoenen, maar de ontwikkelingen gaan snel. Het MCP-protocol integreert al met OAuth voor authenticatie, en steeds meer AI-platforms ondersteunen gestandaardiseerde discovery. Door nu al de juiste metadata endpoints te implementeren, maak je je website klaar voor een toekomst waarin AI-agents een significant deel van je verkeer en transacties vertegenwoordigen.
De combinatie van OAuth discovery, MCP-servers en de juiste robots.txt configuratie vormt samen het fundament van een agent-ready website. Elk onderdeel speelt een specifieke rol: robots.txt — bibliotheekterm bepaalt wat gelezen mag worden, MCP definieert de beschikbare functionaliteit en OAuth regelt de beveiligde toegang.
Samenvatting: de belangrijkste punten
- OAuth 2.0 met discovery-endpoints is de standaard voor veilige authenticatie van AI-agents bij je website.
- De Authorization Server Metadata (RFC 8414) en Protected Resource Metadata (RFC 9728) vormen samen de basis waarmee agents autonoom autorisatie kunnen verkrijgen.
- Dynamic Client Registration (RFC 7591) maakt het mogelijk dat AI-agents zich zelfstandig registreren zonder menselijke tussenkomst.
- PKCE (Proof Key for Code Exchange) is een verplichte beveiligingslaag die voorkomt dat onderschepte autorisatiecodes misbruikt worden.
- OAuth discovery vormt samen met MCP en robots.txt het fundament van een agent-ready website.
Veelgestelde vragen
Is OAuth discovery hetzelfde als OpenID Connect discovery?
Ze lijken op elkaar, maar zijn niet identiek. OpenID Connect (OIDC) discovery (/.well-known/openid-configuration) is specifiek gericht op identiteitsverificatie. OAuth Authorization Server Metadata (/.well-known/oauth-authorization-server) is breder en gericht op autorisatie. Voor AI-agents die toegang nodig hebben tot beschermde resources is de OAuth variant het meest relevant. In de praktijk implementeer je vaak beide.
Moet elke website OAuth discovery implementeren?
Nee. OAuth discovery is alleen relevant als je website beschermde resources aanbiedt waar AI-agents toegang toe nodig hebben. Als je website puur informatief is (blog, documentatie, portfolio), zijn andere AEO — bibliotheekterm-maatregelen zoals llms.txt — bibliotheekterm, robots.txt en gestructureerde data — bibliotheekterm belangrijker. OAuth wordt relevant zodra je transacties, personalisatie of beschermde data aanbiedt.
Hoe voorkom ik misbruik van dynamic client registration?
Er zijn meerdere strategieen. Je kunt rate limiting toepassen op het registration endpoint, een initieel registratietoken vereisen of registraties handmatig goedkeuren voor ze actief worden. De MCP-specificatie beveelt ook aan om scopes te beperken bij initiele registratie en pas uit te breiden na verificatie van de agent.
Kan ik Laravel Sanctum gebruiken in plaats van Passport?
Sanctum is geschikt voor eenvoudige token-gebaseerde API-authenticatie, maar mist volledige OAuth 2.0 ondersteuning (authorization code flow, dynamic registration). Voor AI-agent discovery is Passport de betere keuze. Als je al Sanctum gebruikt, kun je overwegen om de discovery endpoints handmatig te implementeren en de daadwerkelijke token-uitgifte via Sanctum te laten lopen voor eenvoudigere use cases.
Hoe test ik of mijn OAuth discovery correct werkt?
Begin met het handmatig ophalen van je .well-known endpoints in de browser of met curl. Controleer of de JSON geldig is en alle verplichte velden bevat. Test vervolgens de volledige flow met een MCP-client zoals de Claude desktop app. Onze AEO-scanner controleert ook of de .well-known endpoints bereikbaar zijn en correct geconfigureerd.
In de agent-economie is authenticatie geen afterthought maar een feature. Websites die AI-agents veilig en gestandaardiseerd toegang bieden, worden de preferred partners van de volgende generatie digitale assistenten.
Hoe scoort jouw website op AI-gereedheid?
Krijg binnen 30 seconden je AEO-score en ontdek wat je kunt verbeteren.