Spring naar inhoud

OAuth2-authenticatie

Deze tekst is vertaald met AI. Als je de originele tekst in het Engels wilt bekijken, klik dan hier.

Met OAuth2 kunnen applicaties veilig toegang krijgen tot WordPress.com- en Jetpack-sites zonder dat ze de wachtwoorden van gebruikers nodig hebben. Het biedt nauwkeurige controle over waar elke app toegang toe heeft.

Met OAuth2 kunnen apps alleen de specifieke rechten aanvragen die ze nodig hebben via “scopes”. Wanneer gebruikers een app autoriseren, kunnen ze precies zien en bepalen welke toegang ze verlenen.

Gebruikers loggen in met hun WordPress.com-account en kunnen de aangevraagde rechten goedkeuren of weigeren, zodat ze controle houden over hun gegevens terwijl ze apps veilig koppelen.

Op zoek naar codevoorbeelden? Bekijk de WordPress.com REST API Examples-repository, die voorbeeldprojecten bevat die OAuth-authenticatie en API-gebruik in verschillende programmeertalen en frameworks demonstreren. De repository bevat voorbeelden van zowel OAuth-gebaseerde authenticatie voor door gebruikers geautoriseerde bewerkingen als Application Password-authenticatie voor directe toegang tot API-endpoints.

Vereisten

Voordat je je OAuth2-applicatie ontwikkelt, moet je een WordPress.com-applicatie hebben geregistreerd met de volgende gegevens:

  1. Client ID: Identificeert je applicatie
  2. Client Secret: Authenticeert je applicatie (bewaar veilig)
  3. Redirect URI: Waar gebruikers terugkeren na autorisatie

Je kunt deze inloggegevens verkrijgen via de WordPress.com Applications Manager.

Gebruik dit formulier om een nieuwe WordPress.com-applicatie te registreren

OAuth2-endpoints

Als OAuth2 nieuw voor je is, kun je meer leren op https://oauth.net/. Voor WordPress.com-integratie moet je de belangrijkste OAuth2-endpoints begrijpen die beschikbaar zijn onder de namespace https://public-api.wordpress.com/oauth2/. Deze endpoints werken consistent voor zowel WordPress.com-sites als sites die met Jetpack zijn verbonden.

Autorisatie-endpoint

Endpoint: https://public-api.wordpress.com/oauth2/authorize

Methode: GET (via gebruikers-redirect)

Hier begint de OAuth2-flow. Gebruikers krijgen een autorisatie-interface te zien om de machtigingen die je applicatie aanvraagt te controleren en goed te keuren. Het endpoint valideert de inloggegevens van je applicatie en de redirect-URI, en genereert veilige autorisatiecodes voor tokenuitwisseling.

Vereiste parameters:

  • client_id: De client-ID van je applicatie
  • redirect_uri: Moet overeenkomen met de geregistreerde redirect-URI
  • response_type: “code” voor autorisatiecodeflow of “token” voor impliciete flow

Optionele parameters:

  • scope: Machtigingen gescheiden door spaties (standaard toegang tot één blog)
  • state: Aanbevolen voor CSRF-bescherming
  • blog: Specifieke blog-URL of ID voor toegang tot één site

Voorbeeld van autorisatie-URL (autorisatiecodeflow):

https://public-api.wordpress.com/oauth2/authorize?client_id=12345&redirect_uri=https%3A%2F%2Fyourapp.com%2Fcallback&response_type=code&scope=posts%20media&state=abc123xyz

Voorbeeld van autorisatie-URL (impliciete flow):

https://public-api.wordpress.com/oauth2/authorize?client_id=12345&redirect_uri=https%3A%2F%2Fyourapp.com%2Fcallback&response_type=token&scope=posts%20media&state=abc123xyz

Voorbeeld van autorisatie-URL (specifieke blog):

https://public-api.wordpress.com/oauth2/authorize?client_id=12345&redirect_uri=https%3A%2F%2Fyourapp.com%2Fcallback&response_type=code&blog=yourblog.wordpress.com&scope=posts%20media&state=abc123xyz

Respons/actie: Na goedkeuring door de gebruiker wordt er omgeleid naar je redirect_uri met:

  • Autorisatiecodeflow: ?code=AUTHORIZATION_CODE&state=YOUR_STATE
  • Impliciete flow: #access_token=TOKEN&expires_in=64800&token_type=bearer&site_id=BLOG_ID
  • Weigering door gebruiker: ?error=access_denied

Belangrijke opmerking: De parameter redirect_uri moet exact overeenkomen met de redirect URI die is geregistreerd bij het maken van je applicatie. Zelfs kleine verschillen (zoals ontbrekende afsluitende slashes) zorgen ervoor dat de autorisatie mislukt. Dit is een beveiligingsmaatregel om schadelijke redirects te voorkomen.

Endpoint voor tokenaanvraag

Endpoint: https://public-api.wordpress.com/oauth2/token

Methode: POST

Dit beveiligde server-naar-server-endpoint verwerkt twee verschillende grant types voor het verkrijgen van access tokens. Kies het juiste grant type op basis van je gebruikssituatie:

Authorization Code Grant (productiegebruik)

Gebruik dit grant type voor alle productietoepassingen. Het wisselt autorisatiecodes (ontvangen via gebruikersautorisatie) in voor access tokens, terwijl je client secret veilig blijft.

Vereiste parameters:

  • client_id: De client-ID van je toepassing
  • client_secret: De client secret van je toepassing
  • code: Autorisatiecode uit de autorisatiestap
  • grant_type: Moet “authorization_code” zijn
  • redirect_uri: Moet overeenkomen met de authorization redirect URI

Voorbeeldaanvraag:

curl -X POST https://public-api.wordpress.com/oauth2/token 
  -d "client_id=12345" 
  -d "client_secret=your_client_secret" 
  -d "code=received_authorization_code" 
  -d "grant_type=authorization_code" 
  -d "redirect_uri=https://yourapp.com/callback"
curl -X POST https://public-api.wordpress.com/oauth2/token   -d “client_id=12345”   -d “client_secret=your_client_secret”   -d “code=received_authorization_code”   -d “grant_type=authorization_code”   -d “redirect_uri=https://yourapp.com/callback”

Password Grant (alleen ontwikkeling en testen)

Met dit granttype kunnen applicatie-eigenaren tokens rechtstreeks verkrijgen met hun WordPress.com-inloggegevens, waarbij de gebruikersautorisatiestroom wordt overgeslagen.

Gebruik Password Grant voor:

  • Het testen van API-endpoints tijdens de ontwikkeling
  • Geautomatiseerd testen waarbij het simuleren van gebruikersautorisatie niet praktisch is
  • Persoonlijke ontwikkeling op je eigen WordPress.com-sites

Beveiligingsbeperkingen:

  • Werkt alleen met je eigen WordPress.com-inloggegevens (niet die van andere gebruikers)
  • Vereist dat je inloggegevens in je code blootstelt
  • Slaat de gebruikerstoestemming en beveiligingsvoordelen van OAuth2 over
  • Gebruik dit nooit in productieapplicaties

Vereiste parameters:

  • client_id: De client-ID van je applicatie
  • client_secret: Het clientgeheim van je applicatie
  • grant_type: Moet “password” zijn
  • username: Je WordPress.com-gebruikersnaam
  • password: Je WordPress.com-wachtwoord (of Applicatiewachtwoord als 2FA is ingeschakeld)

Voorbeeldaanvraag:

curl -X POST https://public-api.wordpress.com/oauth2/token 
  -d "client_id=12345" 
  -d "client_secret=your_client_secret" 
  -d "grant_type=password" 
  -d "username=your_username" 
  -d "password=your_password_or_app_password"
curl -X POST https://public-api.wordpress.com/oauth2/token   -d “client_id=12345”   -d “client_secret=your_client_secret”   -d “grant_type=password”   -d “username=your_username”   -d “password=your_password_or_app_password”

Tweefactorauthenticatie: Als je 2FA hebt ingeschakeld, maak je een applicatiewachtwoord aan in je WordPress.com-accountinstellingen en gebruik je dat in plaats van je gewone wachtwoord.

Migratiepad: Begin met Password Grant voor ontwikkelgemak, maar implementeer Authorization Code Flow voordat je naar productie gaat. Zie Password Grant als een ontwikkelsnelkoppeling die in live applicaties moet worden vervangen door correcte gebruikersautorisatie.

Indeling van tokenrespons (beide Grant Types):

{
    "access_token": "YOUR_API_TOKEN",
    "blog_id": "blog_id_number", 
    "blog_url": "https://yourblog.wordpress.com",
    "token_type": "bearer"
}
{     “access_token”: “YOUR_API_TOKEN”,     “blog_id”: “blog_id_number”,      “blog_url”: “https://yourblog.wordpress.com”,     “token_type”: “bearer” }

Endpoint voor tokeninformatie

Endpoint: https://public-api.wordpress.com/oauth2/token-info

Methode: GET

Biedt veilige tokenvalidatie en -inspectie. Retourneert gedetailleerde informatie over tokens, inclusief gebruikers-ID, blog-ID en scope-machtigingen. Essentieel om de authenticiteit van tokens te verifiëren, vooral wanneer tokens tussen systemen of in mobiele applicaties worden verzonden.

Vereiste parameters:

  • client_id: De client-ID van je applicatie
  • token: Het access token dat je wilt valideren

Voorbeeldaanvraag:

GET https://public-api.wordpress.com/oauth2/token-info?client_id=12345&token=your_access_token_here

Voorbeeld-CURL-request:

curl "https://public-api.wordpress.com/oauth2/token-info?client_id=12345&token=your_access_token_here"

Reactie-indeling (geldig token):

{
    "client_id": "12345",
    "user_id": "123456789",
    "blog_id": "987654321", 
    "scope": "posts,media"
}
{     “client_id”: “12345”,     “user_id”: “123456789”,     “blog_id”: “987654321”,      “scope”: “posts,media” }

Reactie (ongeldig token): retourneert een fout als het token niet is geautoriseerd voor je applicatie of ongeldig is.

Authenticatie-eindpunt

Eindpunt: https://public-api.wordpress.com/oauth2/authenticate

Methode: GET (via gebruikersredirect)

Een gespecialiseerd eindpunt voor WordPress.com Connect-applicaties die alleen basisverificatie van de gebruikersidentiteit nodig hebben. Geoptimaliseerd voor de functionaliteit ‘Inloggen met WordPress.com’, ontworpen voor identiteitsverificatie in plaats van contentbeheer.

Vereiste parameters:

  • client_id: De client-ID van je applicatie
  • redirect_uri: Moet overeenkomen met de geregistreerde Redirect URI
  • response_type: Gebruik “code” voor veilige uitwisseling aan serverzijde

Optionele parameters:

  • scope: Meestal “auth” voor toegang tot basisprofielgegevens
  • state: Aanbevolen voor CSRF-bescherming

Voorbeeld-URL voor authenticatie:

https://public-api.wordpress.com/oauth2/authenticate?client_id=12345&redirect_uri=https%3A%2F%2Fyourapp.com%2Fauth-callback&response_type=code&scope=auth&state=random_secure_string

Reactie/actie: Na goedkeuring door de gebruiker wordt er omgeleid naar je redirect_uri met een autorisatiecode. Wissel deze code uit bij het token-endpoint om een token met beperkte scope te ontvangen, waarmee doorgaans alleen toegang wordt geboden tot:

Beschikbare API-toegang:

  • /me/-endpoint voor basisinformatie over het gebruikersprofiel
  • Gegevens voor verificatie van gebruikersidentiteit (ID, username, email, avatar_URL, verified status)

OAuth2-workflows

WordPress.com ondersteunt twee belangrijke OAuth2-workflows, elk ontworpen voor verschillende applicatietypen en beveiligingsvereisten:

Authorization Code Flow (aanbevolen)

De Authorization Code Flow is de standaard OAuth2-workflow voor server-side applicaties waarin je client secrets veilig kunt opslaan. Deze flow biedt de hoogste beveiliging door een autorisatiecode in te wisselen voor een access token via een beveiligd server-naar-serververzoek.

Beveiligingsvoordeel: Het client secret verschijnt nooit in client-side code en access tokens worden verkregen via geauthenticeerde serververzoeken.

Stroomdiagram dat de OAuth2 authorization code flow illustreert, met stappen voor gebruikerslogin, weergave van de autorisatiepagina, goedkeuring van machtigingen en ophalen van access tokens via gebruiker, applicatie en WordPress.com-autorisatieserver.

Implicit Flow (verouderd)

De Implicit Flow is ontworpen voor browsergebaseerde applicaties waarbij de access token rechtstreeks in het URL-fragment wordt geretourneerd. Deze aanpak wordt tegenwoordig echter als minder veilig beschouwd en is grotendeels vervangen door veiligere alternatieven zoals PKCE (Proof Key for Code Exchange).

Belangrijk: We raden aan om waar mogelijk de Authorization Code Flow te gebruiken voor betere beveiliging.

Stroomdiagram dat het OAuth2 Implicit Flow-proces (verouderd) illustreert, met stappen voor gebruikersautorisatie, waaronder het starten van inlogverzoeken, het weergeven van autorisatiepagina's en omleiden met autorisatiecodes.

OAuth2-scopes en machtigingen

De kracht van OAuth2 ligt in het gedetailleerde machtigingensysteem. Wanneer je autorisatie aanvraagt, geef je scopes op die precies bepalen waartoe je applicatie toegang krijgt.

Beschikbare scopes

  • users: Gebruikersinformatie bekijken
  • sites: Algemene site-informatie en opties bekijken
  • posts: Berichten bekijken en beheren
  • comments: Reacties op berichten bekijken en beheren
  • taxonomy: Tags en categorieën bekijken en beheren
  • follow: Blogs volgen en niet meer volgen
  • sharing: Socialmediadiensten koppelen
  • freshly-pressed: Berichten van vers van de pers bekijken
  • notifications: Gebruikersmeldingen bekijken en beheren
  • insights: Analytics voor je applicatie bekijken
  • read: Reader-abonnementen beheren en bekijken
  • stats: Sitestatistieken bekijken
  • media: Sitemedia beheren
  • menus: Sitemenu’s bekijken en beheren
  • batch: Meerdere GET-verzoeken in batches uitvoeren
  • videos: Video-informatie bekijken

Speciale scopes

  • global: Verleent uitgebreide toegang tot gebruikersgegevens in alle WordPress.com-diensten en gekoppelde sites
  • auth: Beperkte scope die alleen toegang biedt tot het /me/-endpoint voor basis-authenticatiestromen. Zie WordPress.com Connect voor meer gerelateerde informatie.

Best practices voor scopes

Volg altijd het principe van minimale rechten:

// Request only necessary permissions
const scopes = 'posts,media'; // Not 'global' unless truly needed
// Request only necessary permissions const scopes = ‘posts,media’; // Not ‘global’ unless truly needed

OAuth2-authenticatie implementeren

Stap 1: autorisatieverzoek

Stuur gebruikers naar het autorisatie-endpoint met de vereiste parameters:

Vereiste parameters

  • client_id: De client-ID van je applicatie
  • redirect_uri: Moet overeenkomen met de URI die is geregistreerd in de instellingen van je applicatie
  • response_type: Gebruik “code” voor de autorisatiecode-flow of “token” voor de impliciete flow

Optionele parameters

  • blog: Specifieke blog-URL of ID voor toegang tot één site
  • scope: Lijst met aangevraagde machtigingen, gescheiden door spaties
  • state: Aanbevolen beveiligingsparameter om CSRF-aanvallen te voorkomen

Voorbeeld van autorisatie-URL

const authUrl = `https://public-api.wordpress.com/oauth2/authorize?` +
  `client_id=${clientId}&` +
  `redirect_uri=${encodeURIComponent(redirectUri)}&` +
  `response_type=code&` +
  `scope=posts,media&` +
  `state=${secureRandomString}`;

// // Redirect user to authorization
window.location.href = authUrl;
const authUrl = `https://public-api.wordpress.com/oauth2/authorize?` +   `client_id=${clientId}&` +   `redirect_uri=${encodeURIComponent(redirectUri)}&` +   `response_type=code&` +   `scope=posts,media&` +   `state=${secureRandomString}`; // // Redirect user to authorization window.location.href = authUrl;

Stap 2: uitwisseling van autorisatiecode

Na gebruikersautorisatie ontvang je (op de locatie van redirect_url) een autorisatiecode die moet worden ingewisseld voor een toegangstoken.

Server-side tokenuitwisseling

Doe een POST-aanvraag naar het token-endpoint:

$curl = curl_init( 'https://public-api.wordpress.com/oauth2/token' );

curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, array(
    'client_id' => $your_client_id,
    'redirect_uri' => $your_redirect_url,
    'client_secret' => $your_client_secret_key,
    'code' => $_GET['code'], // The authorization code
    'grant_type' => 'authorization_code'
) );

curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);

$auth = curl_exec( $curl );
$secret = json_decode( $auth );
$access_token = $secret->access_token;
$curl = curl_init( ‘https://public-api.wordpress.com/oauth2/token’ ); curl_setopt( $curl, CURLOPT_POST, true ); curl_setopt( $curl, CURLOPT_POSTFIELDS, array(     ‘client_id’ => $your_client_id,     ‘redirect_uri’ => $your_redirect_url,     ‘client_secret’ => $your_client_secret_key,     ‘code’ => $_GET[‘code’], // The authorization code     ‘grant_type’ => ‘authorization_code’ ) ); curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1); $auth = curl_exec( $curl ); $secret = json_decode( $auth ); $access_token = $secret->access_token;

Geslaagde respons

{
    "access_token": "YOUR_API_TOKEN",
    "blog_id": "blog_id_number",
    "blog_url": "https://yourblog.wordpress.com",
    "token_type": "bearer"
}
{     “access_token”: “YOUR_API_TOKEN”,     “blog_id”: “blog_id_number”,     “blog_url”: “https://yourblog.wordpress.com”,     “token_type”: “bearer” }

Stap 3: geauthenticeerde API-aanroepen doen

Gebruik het Bearer-token in de Authorization-header voor alle API-aanvragen:

$access_token = 'YOUR_API_TOKEN';
$curl = curl_init( 'https://public-api.wordpress.com/rest/v1/me/' );

curl_setopt( $curl, CURLOPT_HTTPHEADER, array( 'Authorization: Bearer ' . $access_token ) );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );

$response = curl_exec( $curl );
$access_token = ‘YOUR_API_TOKEN’; $curl = curl_init( ‘https://public-api.wordpress.com/rest/v1/me/’ ); curl_setopt( $curl, CURLOPT_HTTPHEADER, array( ‘Authorization: Bearer ‘ . $access_token ) ); curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 ); $response = curl_exec( $curl );

Geavanceerde OAuth2-functies

Beheer van token-scopes

Verschillende token-scopes bieden verschillende toegangsniveaus:

  • Tokens voor één blog: Geven toegang tot één specifieke blog
  • Globale tokens: Bieden toegang tot alle WordPress.com- en gekoppelde Jetpack-sites van de gebruiker
  • Gebruikersspecifieke endpoints: Sommige endpoints (likes, follows) werken over blogs heen met elke gebruikerstoken

Client-side (impliciete) OAuth

Voor client-side applicaties kunnen tokens worden teruggegeven in het URL-fragment met de impliciete flow:

https://yourapp.com/callback#access_token=TOKEN&expires_in=64800&token_type=bearer&site_id=BLOG_ID

Belangrijke aandachtspunten:

  • Tokens verlopen momenteel na twee weken
  • Gebruik de waarde expires_in om tokenvernieuwing af te handelen
  • Alleen geschikt voor openbare clients waar secrets niet veilig kunnen worden opgeslagen

Tokenvalidatie en -beheer

Het correct beheren van OAuth2-tokens is cruciaal voor een robuuste applicatie. Dit omvat het valideren van tokens, het afhandelen van API-responses en het zorgvuldig beheren van tokenverloop of onvoldoende rechten.

Stroomdiagram dat het proces illustreert voor het valideren van een applicatietoken, inclusief gebruikersidentificatie, API-aanvragen en het afhandelen van verschillende responsscenario's zoals tokengeldigheid, verlopen tokens en machtigingsproblemen.

Endpoint voor tokeninformatie

Controleer de authenticiteit van het token met het endpoint voor tokeninformatie:

GET https://public-api.wordpress.com/oauth2/token-info?client_id=your_client_id&token=your_token

Geldige response:

{
    "client_id": "your_client_id",
    "user_id": "user_id_number",
    "blog_id": "blog_id_number",
    "scope": "posts,media"
}
{     “client_id”: “your_client_id”,     “user_id”: “user_id_number”,     “blog_id”: “blog_id_number”,     “scope”: “posts,media” }

Ontwikkeling en testen

Testen met Password Grant (alleen clienteigenaren)

Applicatie-eigenaren kunnen de password grant gebruiken om het authenticatietoken te verkrijgen:

$curl = curl_init( 'https://public-api.wordpress.com/oauth2/token' );

curl_setopt( $curl, CURLOPT_POST, true );

curl_setopt( $curl, CURLOPT_POSTFIELDS, array(
    'client_id' => $your_client_id,
    'client_secret' => $your_client_secret_key,
    'grant_type' => 'password',
    'username' => $your_wpcom_username,
    'password' => $your_wpcom_password, // Use Application Password if 2FA enabled
) );

curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1);
$auth = curl_exec( $curl );
$auth = json_decode( $auth );
$access_token = $auth->access_token;
$curl = curl_init( ‘https://public-api.wordpress.com/oauth2/token’ ); curl_setopt( $curl, CURLOPT_POST, true ); curl_setopt( $curl, CURLOPT_POSTFIELDS, array(     ‘client_id’ => $your_client_id,     ‘client_secret’ => $your_client_secret_key,     ‘grant_type’ => ‘password’,     ‘username’ => $your_wpcom_username,     ‘password’ => $your_wpcom_password, // Use Application Password if 2FA enabled ) ); curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1); $auth = curl_exec( $curl ); $auth = json_decode( $auth ); $access_token = $auth->access_token;

Belangrijk: Voor deze methode is een Applicatiewachtwoord vereist als tweefactorauthenticatie is ingeschakeld.

Best practices voor beveiliging en foutafhandeling

Implementatierichtlijnen

  1. Validatie van de state-parameter: Valideer de state-parameter altijd om CSRF-aanvallen te voorkomen
  2. Veilige tokenopslag: Sla toegangstokens veilig op met passende versleuteling
  3. Minimale scope-aanvragen: Vraag alleen de rechten aan die je applicatie echt nodig heeft
  4. Duidelijke communicatie met gebruikers: Leg uit waarom specifieke rechten vereist zijn
  5. Correcte foutafhandeling: Handel autorisatiefouten, verlopen tokens en scope-wijzigingen netjes af

HTTPS-vereisten

Alle OAuth2-communicatie moet HTTPS gebruiken om tokens en autorisatiecodes tijdens de overdracht te beschermen.

Tokenbeheer

  • Sla toegangstokens veilig op aan de serverzijde
  • Implementeer geschikte mechanismen voor het vernieuwen van tokens
  • Bied duidelijke documentatie over de levenscyclus van tokens
  • Handel verlopen tokens netjes af in je applicatie

Foutafhandeling

Veelvoorkomende OAuth2-fouten en hun betekenis:

  • access_denied: Gebruiker heeft autorisatie geweigerd
  • invalid_client: Ongeldige clientreferenties
  • invalid_grant: Ongeldige of verlopen autorisatiecode
  • invalid_scope: Aangevraagd bereik is ongeldig of niet beschikbaar

Implementeer altijd uitgebreide foutafhandeling om gebruikers duidelijke feedback te geven wanneer er autorisatieproblemen optreden.

Conclusie

OAuth2 biedt een veilige, gebruiksvriendelijke authenticatiemethode voor WordPress.com-integraties. Door goed bereikbeheer, beveiligingspraktijken en foutafhandeling te implementeren, kun je applicaties bouwen die de privacy van gebruikers respecteren en tegelijk krachtige functionaliteit bieden. Het fijnmazige machtigingensysteem zorgt ervoor dat gebruikers controle houden over hun gegevens, terwijl je applicatie waardevolle functies kan leveren.

Ga voor volledige documentatie van API-endpoints en aanvullende voorbeelden naar de WordPress.com REST API-referentie.

Laatste update: juni 23, 2026