API-sleutels vs OAuth 2.0 voor partnerintegraties: wat verandert
API-sleutels versus OAuth 2.0: vergelijk onboarding, tokenrotatie, gebruikersniveautoegang en auditbaarheid zodat partnerontwikkelaars veilig kunnen integreren.

Waar je eigenlijk voor kiest bij het kiezen van authenticatie
Wanneer mensen API-sleutels en OAuth 2.0 vergelijken, klinkt het alsof het alleen om beveiliging gaat. Bij partnerintegraties is het ook een operationele keuze: hoe snel partners kunnen beginnen, hoe je later toegang controleert en hoeveel supportwerk er ontstaat als er iets misgaat.
De meeste integraties hebben dezelfde basisbehoeften: een betrouwbare manier om te authenticeren, duidelijke grenzen (rate limits en permissies) en traceerbaarheid zodat je zonder giswerk kunt beantwoorden “wie deed wat”. De gekozen auth-methode bepaalt of die behoeften standaard makkelijk zijn of dat je extra regels, dashboards en handmatige processen moet toevoegen.
Een paar eenvoudige termen houden het gesprek praktisch:
- API-sleutel: een gedeeld geheim dat een partnerapp of systeem identificeert.
- Token (toegangstoken): een tijdgebonden referentie die gebruikt wordt om je API aan te roepen.
- Scope: een benoemde permissie zoals “read invoices” of “create tickets”.
De echte beslissing is wat de integratie vertegenwoordigt.
Als het machine-to-machine is, past een API-sleutel vaak goed. Denk aan: een partner draait ’s nachts een sync vanaf hun server naar jouw API. Er is geen eindgebruiker die op “Allow” klikt. Je geeft meestal om partner-niveau toegang, voorspelbare rotatie en snelle onboarding.
Als het user-delegated is, past OAuth 2.0 meestal beter. Denk aan: een klant koppelt zijn account in een partner-app en elke klant mag alleen toegang geven tot zijn eigen gegevens. Je geeft dan om per-gebruiker permissies, eenvoudige intrekking en schonere auditsporen.
Die keuze verandert je supportlast. Met sleutels besteed je meer tijd aan delen van sleutels, rotatiecoördinatie en het volgen welke sleutel bij welke partneromgeving hoort. Met OAuth besteed je meer tijd aan consent-flows en redirect-configuratie, maar minder tijd aan raden welke persoon of tenant een actie heeft getriggerd.
Als je de integratie-backend bouwt in een tool zoals AppMaster, plan auth vroeg. Het beïnvloedt je datamodel (partners, gebruikers, scopes) en de auditlogs die je vanaf dag één wilt hebben.
Hoe API-sleutels werken in partnerintegraties
API-sleutels zijn de eenvoudigste manier om een partner je API te laten aanroepen. Sleutels winnen meestal op snelheid: je geeft een geheime string, de partner zet die in verzoeken en je kunt direct gegevens uitwisselen.
Waar een sleutel voor staat
Meestal staat een API-sleutel voor een partnerapplicatie (of een integratie), niet voor een specifieke eindgebruiker. Als een partner één sleutel heeft voor het hele team en al hun klanten, ziet alles er vanaf jouw kant hetzelfde uit: “Partner X”. Dat maakt de setup makkelijk, maar de toegang is grofmazig.
In de praktijk worden sleutels uitgegeven in een adminconsole of via een eenmalige provisioning-stap. Partners slaan ze op in een configbestand, environment variable of secrets manager. Het risico is hoe vaak een “tijdelijke” sleutel gekopieerd wordt naar een gedeelde spreadsheet, in een chat wordt geplakt of in client-side code wordt ingebed.
De beperkingen komen snel naar voren. Permissies zijn vaak breed, sleutels zijn gedeelde referenties (dus attributie naar een persoon is lastig), rotatie vereist coördinatie en een gelekte sleutel laat een aanvaller handelen als de partner totdat je die intrekt.
Voorbeeld: een logistieke partner draait ’s nachts imports vanaf hun server. Met één API-sleutel halen ze orders op en pushen statusupdates. Als er iets misgaat, tonen je logs de partner-sleutel, niet of het een ontwikkelaarstest, een geplande job of een gecompromitteerde machine was.
Waar API-sleutels nog steeds goed passen
API-sleutels kunnen goed werken voor server-to-server integraties met een klein aantal stabiele acties, zeker als je de sleutel kunt beperken tot specifieke IP's, endpoints of omgevingen (test vs productie). Als je de API-laag bouwt in een tool zoals AppMaster, zijn sleutels vaak een goede eerste stap voor snelle partnerproeven. Maak alleen van tevoren duidelijk hoe je ze gaat roteren en intrekken voordat je live gaat.
Hoe OAuth 2.0 werkt (zonder het leerboek)
OAuth 2.0 bestaat om één reden: gedelegeerde toegang. Het laat een partnerapp je API aanroepen namens een specifieke gebruiker, zonder dat die gebruiker zijn wachtwoord geeft en zonder dat de partner permanente, onbeperkte toegang krijgt.
Denk eraan als een toestemmingshanddruk tussen drie partijen:
- Gebruiker (resource owner): de persoon van wie de data wordt benaderd.
- Partnerapp (client): de integratie die de partner bouwt.
- Jouw auth-systeem (authorization server): het systeem dat de gebruiker verifieert, om toestemming vraagt en tokens uitgeeft.
Nadat de gebruiker goedkeurt, ontvangt de partnerapp een access token. Dit is de kortdurende referentie die de app naar je API stuurt om te bewijzen dat hij nu toestemming heeft. Access tokens horen snel te verlopen zodat een gelekt token beperkte schade kan aanrichten.
Om te voorkomen dat gebruikers constant hoeven te bevestigen, gebruiken veel setups ook een refresh token. Het refresh token leeft langer en wordt alleen gebruikt om een nieuw access token aan te vragen wanneer het oude verloopt. Een handig denkmodel: access token is voor het aanroepen van APIs, refresh token is om nieuwe access tokens te krijgen.
Scopes maken OAuth praktisch. Een scope is een benoemde permissiegrens zoals “read:invoices” of “write:customers”. Tijdens consent ziet de gebruiker waarvoor de partnerapp vraagt en je systeem registreert wat is goedgekeurd. Je API controleert scopes bij elk request en weigert calls die verder gaan dan wat is toegestaan.
Voorbeeld: een CRM-partner wil contacten synchroniseren. Je kan vereisen dat de partner alleen “read:contacts” en “write:contacts” aanvraagt. Als ze later proberen data te verwijderen, blokkeert de API dat tenzij “delete:contacts” expliciet is goedgekeurd. Dit is in de praktijk één van de grootste verschillen: OAuth maakt least-privilege veel eenvoudiger af te dwingen.
Onboarding: eerste-dag ervaring voor externe ontwikkelaars
Met API-sleutels kan onboarding vrijwel direct zijn. Een partner vraagt om een sleutel, je geeft die (vaak in een partnerportal of per e-mail), en ze voegen hem toe aan een request header. Time-to-first-call is vaak minuten, wat prettig voelt als een partnerteam snel wil bewijzen dat de integratie werkt.
Die snelheid heeft een nadeel: “wie belt er” is op dag één vaag. Als dezelfde sleutel gedeeld wordt binnen een partnerteam, kun je snel een demo draaien, maar het is lastiger om vroeg grenzen te leggen (test vs productie, least privilege en eigenaarschap bij incidenten).
OAuth-onboarding voelt zwaarder omdat er meer onderdelen zijn vóór de eerste succesvolle call. Partners moeten meestal een app registreren, redirect URIs instellen en testgebruikers of een sandbox-account gebruiken. De eerste call kan uren of dagen duren, niet omdat OAuth mysterieus is, maar omdat kleine setupdetails grote vertragingen veroorzaken.
De meest voorkomende blokkades op dag één zijn redirect URI-mismatches, het verwarren van een autorisatiecode met een access token, het mixen van omgevingen (test credentials tegen productie), ontbrekende scopes en het ontbreken van een eenvoudige manier om testgebruikers aan te maken of te resetten.
Documentatie is belangrijker voor OAuth. Voor API-sleutels volstaat vaak een korte “kopieer sleutel, voeg header toe, call endpoint” handleiding. Voor OAuth hebben partners een checklist en een werkend voorbeeld nodig dat ze kunnen draaien.
Als je partnertooling bouwt met AppMaster, kan een klein starter-appje (web UI plus backend-proxy) partners helpen de OAuth-flow end-to-end te doorlopen zonder veel code te schrijven, terwijl het beveiligingsmodel vanaf dag één duidelijk blijft.
Tokenrotatie en intrekking in de echte wereld
Rotatie klinkt simpel totdat je je herinnert dat partners cron-jobs, meerdere omgevingen en iemand hebben die een geheim zes maanden geleden in een spreadsheet plakte. De praktische vraag is niet “kunnen we roteren?”, maar “kunnen we roteren zonder productie te breken?”
Met API-sleutels is rotatie vooral coördinatie. Een veilig patroon is dubbele sleutels met een overlap-venster: je geeft een nieuwe sleutel, accepteert beide tijdelijk en schakelt de oude uit nadat de partner de wissel heeft bevestigd. Het omgekeerde is noodintrekking: als een sleutel uitlekt, wil je met één klik die sleutel kunnen uitschakelen zonder te wachten op hun release.
In de praktijk bevat werkbare sleutelrotatie meestal twee actieve sleutels per partner (huidig en next), aparte sleutels per omgeving (dev, staging, prod), duidelijke labels zodat je weet welk systeem welke sleutel gebruikt, en een getest incidentpad voor onmiddellijke intrekking.
OAuth-rotatie is meer automatisch als je korte access tokens gebruikt. Je laat access tokens snel verlopen en vertrouwt op refresh tokens om te vernieuwen, wat het risico op downtime vermindert wanneer je toegang moet afsluiten. Intrekking richt zich op refresh tokens: eenmaal ingetrokken kan de partner geen nieuwe access tokens meer maken.
Het lastige is beleid: hoe lang refresh tokens leven, of ze herbruikbaar zijn en wat re-authenticatie triggert (wachtwoordreset, admin-verwijdering, verdacht gedrag). Als je snellere incidentrespons nodig hebt, houd access tokens kort en zorg dat het intrekken van refresh tokens betrouwbaar en direct is.
Een veelvoorkomend incident: serverlogs van een partner vangen per ongeluk credentials. Met API-sleutels intrek je de sleutel en stopt de integratie meteen, waarna je haastig een nieuwe uitgeeft en update-coördinatie doet. Met OAuth intrek je refresh tokens voor die partner of gebruiker, en bestaande access tokens verlopen snel daarna, meestal met minder plotselinge downtime.
Gebruikersniveau toegang: per gebruiker, per partner of beide?
Als je alleen hoeft te weten welk bedrijf je API aanroept, is een partner-niveau identiteit vaak voldoende. Maar zodra een partner namens veel eindgebruikers handelt (agenten, managers, klanten) heb je ook een duidelijke gebruikerscontext nodig.
Bij API-sleutels is het gebruikelijke patroon één geheim per partner. Gebruikerscontext wordt dan op drie manieren aangehangen: geen gebruiker (alles lijkt de partner), een user ID meegestuurd in een header of veld, of een impersonation-stijl flow waarbij de partner een user ID signeert die jij eerder gaf. Dit kan werken, maar behandel elk door de partner gestuurd gebruikersidentificatie als onbetrouwbaar tenzij je het kunt verifiëren.
OAuth is gebouwd voor gebruikersniveau toegang. Elke gebruiker geeft toestemming en scopes beperken wat de partner kan doen. Dat maakt least privilege eenvoudiger: de integratie kan contacten lezen maar geen facturen exporteren, of tickets updaten maar geen admin-instellingen wijzigen.
Modelleer permissies wanneer partners voor veel gebruikers handelen
Een eenvoudige manier om dit beheersbaar te houden is identiteiten en permissies te scheiden: partneridentiteit (wie integreert), gebruikersidentiteit (voor wie de actie is), rol (wat de gebruiker in jouw product kan) en scope (wat de partner voor die gebruiker mag doen).
Voorbeeld: een helpdeskpartner synchroniseert tickets voor 200 agenten. Als je alleen één API-sleutel gebruikt, verschijnt elke actie als “Partner A” in je logs. Met OAuth kan elke agent een eigen grant hebben, zodat “Agent Maria heeft ticket 1832 bijgewerkt via Partner A” mogelijk wordt.
Als je beide nodig hebt, gebruik dan een partner-niveau clientidentiteit plus user-delegatie (OAuth-tokens gekoppeld aan een gebruiker). In tools zoals AppMaster past dit netjes op een auth-module voor gebruikers, partnerrecords en permissiecontroles in je businesslogica.
Auditbaarheid en troubleshooting: wie deed wat?
Als er iets misgaat in een partnerintegratie, is het zelden het herstellen van de bug dat het lastig maakt. Het lastige is bewijzen wat er gebeurde.
Met API-sleutels lopen veel teams tegen het gedeelde identiteit-probleem aan. Eén sleutel staat vaak voor “de partner”, niet voor een specifieke persoon of app-instance. Je kunt loggen dat een request met Sleutel A is gedaan, maar bewijs meestal niet welke eindgebruiker het veroorzaakte, of het een medewerker, een script of een gelekte sleutel was. Als de partner de sleutel in meerdere systemen plakt, lijken al je logs hetzelfde.
OAuth geeft een duidelijker spoor: welke gebruiker welke clientapp heeft geautoriseerd, wanneer en welke toegang (scopes) is goedgekeurd. Als de app van een partner gecompromitteerd raakt, kun je vaak de impact beperken tot een client_id of zelfs tot een subset van gebruikers die toestemming gaven.
Auditvragen in security reviews of compliance zijn onder andere: welke gebruiker’s data is benaderd door welke partnerapp en onder welke scope; wanneer is toegang verleend en voor het laatst gebruikt; waar kwamen calls vandaan (IP, omgeving); of iets buiten de goedgekeurde scope viel; en of je toegang voor één gebruiker kunt intrekken zonder de hele integratie te stoppen.
Om troubleshooting snel te maken, leg een paar velden vast bij elk verzoek (ongeacht auth-type): client_id (of key id), subject (user id, indien beschikbaar), scope, IP-adres en een unieke request-ID die je teruggeeft in responses. Voeg timestamps en uitkomsten toe (succes, geweigerd, rate limited) zodat je een incident-tijdlijn in minuten kunt reconstrueren in plaats van dagen.
Veelgemaakte fouten die beveiligings- en supportproblemen veroorzaken
De meeste partner-authincidenten zijn geen “geavanceerde hacks”. Ze ontstaan door kleine keuzes die geheimen makkelijk laten lekken of moeilijk te vervangen maken.
Problemen met API-sleutels beginnen vaak met waar de sleutel belandt. Een partner zet hem in een mobiele of browser-app, waarna hij uit logs, screenshots of chat kan worden gehaald. Een andere veelvoorkomende fout is het behandelen van een sleutel als permanent. Zonder rotatieplan vermijden teams wijzigen, zelfs nadat mensen vertrekken of een repo is blootgesteld.
OAuth-fouten zien er anders uit. Het meest voorkomende supportticket is redirect URI mismatch: het werkt in staging en faalt in productie en de ontwikkelaar snapt niet waarom. Daarna komen te brede scopes “om het te laten werken”, die later securityproblemen opleveren. Verwarrende consent-schermen veroorzaken ook churn als gebruikers permissies zien die niet overeenkomen met wat de integratie doet.
Valkuilen komen in beide benaderingen voor. Langdurige geheimen en tokens vergroten de blast radius. Ontbrekende rate limits laten een bug uitgroeien tot een outage. Ontbrekende replay-bescherming (bijv. hetzelfde gesigneerde verzoek twee keer accepteren) kan dubbele kosten of dubbele records veroorzaken.
Supportproblemen zijn vaak zelfveroorzaakt. Als fouten vaag zijn (“unauthorized”), kunnen partners het probleem niet oplossen zonder te escaleren. Als je geen sandbox en consistente omgevingen biedt, testen partners per ongeluk tegen productie.
Als je guardrails wilt voordat je iemand onboardt, houd ze simpel:
- Bewaar secrets alleen op servers, nooit in client-apps of gedeelde kanalen.
- Maak rotatie en intrekking onderdeel van de overeenkomst, met deadlines en contactpersonen.
- Gebruik duidelijke scopes met begrijpelijke permissienamen.
- Voeg rate limits en idempotency of replay-checks toe voor write-acties.
- Bied een sandbox met realistische data en voorspelbare configuraties.
Als je de integratie-backend bouwt in een tool zoals AppMaster, veranker deze regels in je auth-module en foutresponsen vroeg, voordat partners afhankelijk worden van broos gedrag.
Een praktische beslisgids voor partnerteams
Begin met het gewenste resultaat, niet met de techniek. De echte keuze is of je één integratie toestaat (één service-identiteit) of echte eindgebruikers met verschillende permissies.
Als partners namens individuele gebruikers handelen, is OAuth 2.0 meestal de veiligere standaard. Het laat je calls aan een persoon koppelen, beperken wat die persoon kan doen en toegang afsluiten zonder de hele integratie te breken.
Als de integratie echt server-to-server is en de toegang vaststaat, kunnen API-sleutels volstaan. Dit past bij gevallen zoals “Partner X stuurt ’s nachts voorraadupdates” waar er geen menselijke gebruikerscontext is en dezelfde acties altijd plaatsvinden.
Een korte risico- en operatie-check helpt:
- Als je gebruikersspecifieke permissies nodig hebt (bijv. “Alice kan alleen haar klanten zien”), kies OAuth.
- Als het een vast workflow is met stabiele toegang, kunnen sleutels werken, mits je ze veilig kunt roteren.
- Als de data gevoelig is (PII, betalingen, gezondheid, financiën), neig naar OAuth om scope te beperken en per-gebruiker te auditen.
- Als partnerrijpheid laag is (sleutels worden gedeeld), verkleint OAuth de blast radius.
- Als je hoge volumes en groei verwacht, kies de aanpak die intrekking en troubleshooting makkelijker maakt.
Als je beide moet ondersteunen, stel duidelijke grenzen. Bijvoorbeeld: API-sleutels voor backoffice batch-jobs, OAuth voor functies die een gebruikersaccount raken. Documenteer welke endpoints welke methode accepteren en wat er gebeurt bij intrekking van toegang.
Concreet voorbeeld: een CRM-partner wil leads importeren. Als ze een nightly job draaien onder één bedrijfsaccount, kan een API-sleutel prima zijn. Als salesreps hun eigen accounts koppelen en alleen hun eigen pipelines mogen zien, is OAuth de juiste keuze.
Snelle checks voordat je partners live laat gaan
Voordat je productietoegang opent, behandel auth als een operationeel systeem, niet als een vinkje. De grootste supportbranden bij partnerintegraties beginnen met onduidelijke credentials, vage permissies en ontbrekende logs.
Beveiliging en toegang
Kies één duidelijke uitgifte-route. Of je nu API-sleutels of OAuth gebruikt, de go-live checks lijken op elkaar: wie kan credentials krijgen, wat mogen ze doen en hoe snel kun je ze uitschakelen.
Leg de basisregels vast voor je partnerteam: wie toegang goedkeurt en hoe je partneridentiteit verifieert; hoe expiry en rotatie werken en wat er kapotgaat als rotatie misloopt; een getest “kill switch” die één partner (of één gebruiker) uitschakelt zonder iedereen te raken; gedefinieerde permissies met least-privilege-standaard en duidelijke consent-tekst; en een sandbox met testcredentials, realistische data en voorspelbare rate limits.
Een reality check: als een partner’s API-sleutel in een publieke repo lekt, kun je die in enkele minuten intrekken, de blast radius bevestigen en een nieuwe uitgeven zonder handmatige databaseaanpassingen?
Operaties en support
Zorg dat je bewijs kunt leveren voor “wat gebeurde?”. Elk verzoek moet loggen wie het maakte (partner id, user id indien aanwezig), wat geprobeerd werd (endpoint, scope) en wat het systeem besliste (statuscode, foutreden).
Bevestig ook dat je duidelijke foutmeldingen hebt die partners vertellen wat te repareren (ontbrekende scope, verlopen token, ongeldige handtekening), rate limits die je beschermen zonder partners te verrassen, en een incidentplaybook om toegang te pauzeren en getroffen partners te informeren.
Als je partner-API’s bouwt met AppMaster, stel deze velden en controles vroeg in zodat je gegenereerde backend en logs consistent blijven naarmate eisen veranderen.
Een realistisch voorbeeld: CRM-partnerintegratie
Stel je een partner-CRM voor die contacten synchroniseert naar jouw product voor tientallen gedeelde klanten. Elke klant heeft meerdere teams en niet elk team mag dezelfde contacten zien. De CRM-leverancier wil één herbruikbare integratie, terwijl jij minder supporttickets en schone registraties wilt van wie wat veranderde.
Met API-sleutels lijkt onboarding simpel: je geeft de partner een sleutel en ze pushen contacten. De problemen komen een week later, als een klant vraagt: “Mag Sales synchroniseren, maar Support niet?” Eén sleutel is dan een masterpass geworden.
In deze opzet zijn breekpunten bij API-sleutels voorspelbaar: toegang is vaak alles-of-niets per sleutel (dus je maakt extra sleutels per klant, team of omgeving), lekken dwingen tot rotatie overal, attributie is zwak omdat de sleutel de partnerapp vertegenwoordigt en “uitzetten voor één gebruiker” betekent meestal de hele sleutel uitschakelen.
Met OAuth stuurt de CRM elke klantadmin door een consentstap. Je kunt alleen de scopes voor contactsync aanvragen (read contacts, write contacts, geen billing, geen admininstellingen). Die kleinere toegang voorkomt veel “waarom zien ze dit?” tickets.
Dagelijkse operatie is meestal schoner met OAuth: je kunt toegang intrekken voor één klant (of één gebruiker) zonder anderen te breken, korte access tokens verkleinen de blast radius en auditlogs kunnen acties koppelen aan een klant, een OAuth-client en vaak een specifieke gebruiker.
Als je dit in een platform zoals AppMaster bouwt, ontwerp je je datamodel zodat elke gesynchroniseerde contactupdate de partnerapp, de klantaccount en de handelende gebruiker (wanneer OAuth gebruikt wordt) vastlegt. Dat maakt “dubbele contacten vannacht” veel makkelijker te onderzoeken.
Volgende stappen: stuur een veiligere partnerintegratie op
Schrijf je integratie als twee korte verhalen: het happy path (credentials krijgen, endpoint aanroepen, data zien) en het failure path (verlopen token, ontbrekende scope, verkeerde account). Die ene pagina bespaart dagen support omdat partners zelf kunnen diagnosticeren.
Begin klein met een pilot-partner. Echt verkeer laat snel zien wat je mist: welke endpoints duidelijkere scopes nodig hebben, welke foutmeldingen beter moeten zijn en wat je moet loggen om vragen snel te beantwoorden.
Als je je eigen integratieplatform bouwt, houd de eerste versie eenvoudig. Tools zoals AppMaster helpen je auth-flows, API’s en auditvriendelijke backends sneller te maken, zonder alles handmatig te coderen. Als je het platform wilt verkennen, is AppMaster beschikbaar.
Hier is een praktische checklist om van “het werkt” naar “veilig en supportbaar” te gaan:
- Kies een standaardmethode en documenteer wanneer je uitzonderingen toestaat.
- Stel een rotatiebeleid vast (cadans, overlap en hoe een noodintrekking eruitziet).
- Definieer toegangsregels (partner-breed, gebruikersniveau of beide).
- Bepaal wat je logt (partner ID, user ID indien van toepassing, endpoint, actie, timestamp).
- Bereid een partner-sandbox voor met testcredentials en voorspelbare voorbeelddata.
Maak onboarding tenslotte een begeleide setup, geen speurtocht. Een schone sandbox, duidelijke fouten en bruikbare logs veranderen week-één frustratie in een opgeleverde integratie.
FAQ
Gebruik een API-sleutel wanneer de integratie echt server-to-server is en je alleen het partner-systeem hoeft te identificeren, niet individuele eindgebruikers. Gebruik OAuth 2.0 wanneer de partner-app namens verschillende gebruikers of tenants moet handelen en je per-gebruiker toestemming, scopes en intrekking nodig hebt.
Een API-sleutel identificeert meestal een partnerintegratie als één gedeelde identiteit, waardoor permissies en logs grofmazig zijn. OAuth 2.0 geeft tokens uit die gekoppeld zijn aan de grant van een specifieke gebruiker en aan goedgekeurde scopes, wat gebruikersniveaubeveiliging en betere audit-trails veel eenvoudiger maakt.
Met API-sleutels is onboarding vaak minutenwerk: de partner plakt de sleutel in de requests. OAuth voelt zwaarder omdat partners een app moeten registreren, redirect URIs instellen en een consent-flow doorlopen voordat de eerste succesvolle call lukt.
De meest voorkomende fout is een mismatch in de redirect URI tussen wat de partner heeft geconfigureerd en wat je auth-server verwacht. Andere veelvoorkomende problemen: test- en productiecredentials door elkaar gebruiken, een autorisatiecode verwarren met een access token, en verkeerde scopes aanvragen.
Werk met twee sleutels per partner en een overlap-venster zodat je kunt wisselen zonder downtime: geef een nieuwe sleutel, accepteer beide tijdelijk en schakel de oude uit na bevestiging. Houd aparte sleutels per omgeving en zorg dat je direct kunt intrekken als een sleutel uitlekt.
Houd access tokens kortlevend en vertrouw op refresh tokens om nieuwe access tokens te verkrijgen. Zorg dat het intrekken van refresh tokens betrouwbaar en onmiddellijk is, zodat een partner na intrekken geen nieuwe access tokens kan verversen.
Ga ervan uit dat alles wat in een browser of mobiele app staat kan worden geëxtraheerd; API-sleutels horen op servers. Als er client-side sign-in en gebruikersspecifieke toegang nodig is, is OAuth veiliger omdat je geen permanent gedeeld geheim in de client hoeft te embedden.
Scopes zijn benoemde permissies zoals “read contacts” of “write tickets” die je API bij elke request controleert. Houd scopes klein en afgestemd op echte acties; laat partners alleen aanvragen wat ze nodig hebben zodat je least-privilege kunt afdwingen en latere supportdisputen vermindert.
Log een partneridentifier (key id of client id), de gebruiker of subject indien beschikbaar, de toegekende scope, de endpoint/actie die geprobeerd werd, de beslissing (succes of geweigerd) met een duidelijke reden, het IP-adres en een unieke request-ID die je in responses teruggeeft. Daarmee kun je snel ‘wie deed wat’ beantwoorden tijdens incidenten en supporttickets.
Definieer een standaard auth-methode en wanneer je uitzonderingen toestaat, verifieer dat je credentials snel kunt uitgeven en intrekken, en bevestig rate limits en idempotency voor write-endpoints. Zorg ook voor een sandbox, duidelijke foutmeldingen en een geteste playbook om één partner of één gebruiker te pauzeren zonder iedereen plat te leggen.


