đ OAuth â Token ophalen
Haal een RS256-gesigneerd bearer token op. Vereist: een geldig mTLS-certificaat.
OAuth Service â Overzicht
De OAuth-dienst is een op maat gemaakte OAuth 2.0 Authorization Service.
Voor machine-to-machine communicatie gebruik je de client credentials-flow
met mTLS-authenticatie (tls_client_auth). Het UZI-certificaat dient als
authenticatiemiddel â er is geen client_id of client_secret nodig.
Het URA-nummer wordt automatisch uit het certificaat gelezen.
De service geeft RS256-gesigneerde JWT access tokens terug.
Stap-voor-stap: token ophalen
- 1
UZI-certificaat gereedmaken
Zorg dat je
client-uzi-chain.crtenclient-uzi.keybeschikbaar zijn. Zie de mTLS-gids. - 2
Scope en target audience bepalen
Je URA-nummer wordt automatisch uit het UZI-certificaat gelezen â er is geen
client_idnodig. Geef metscopede gevraagde rechten op en mettarget_audiencevoor welke dienst het token bedoeld is. - 3
Token ophalen
Stuur een
POST-verzoek naar/oauth/tokenmetgrant_type=client_credentials. De mTLS-verbinding verzorgt de authenticatie â geenclient_secretvereist. - 4
Parameters: scope & target_audience
| Parameter | Waarde | Toelichting |
|---|---|---|
scope | epd:read | Enige geldige scope op dit moment |
target_audience | https://nvi.proeftuin.gf.irealisatie.nl | Token voor NVI |
target_audience | https://pseudoniemendienst.proeftuin.gf.irealisatie.nl | Token voor PRS |
Vraag per dienst een apart token op â een token is gekoppeld aan ÊÊn target_audience.
Token ophalen
curl -s -X POST \ --cert client-uzi-chain.crt \ --key client-uzi.key \ -d "grant_type=client_credentials" \ -d "scope=epd:read" \ -d "target_audience=<audience>" \ https://oauth.proeftuin.gf.irealisatie.nl/oauth/token \ | python3 -m json.tool
[$status, $body] = curlRequest($certFile, $keyFile, 'https://oauth.proeftuin.gf.irealisatie.nl/oauth/token', [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query([ 'grant_type' => 'client_credentials', 'scope' => 'epd:read', 'target_audience' => '<audience>', ]), CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded'], ]); $data = json_decode($body, true); $token = $data['access_token'];
import requests session = requests.Session() session.cert = ("client-uzi-chain.crt", "client-uzi.key") resp = session.post( "https://oauth.proeftuin.gf.irealisatie.nl/oauth/token", data={ "grant_type": "client_credentials", "scope": "epd:read", "target_audience": "<audience>", }, ) token = resp.json()["access_token"]
// Laad PKCS#12-bundle (client-uzi-chain.crt + client-uzi.key) KeyStore keyStore = KeyStore.getInstance("PKCS12"); try (InputStream is = new FileInputStream("client.p12")) { keyStore.load(is, "geheimwachtwoord".toCharArray()); } KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, "geheimwachtwoord".toCharArray()); SSLContext sslCtx = SSLContext.getInstance("TLS"); sslCtx.init(kmf.getKeyManagers(), null, null); HttpClient client = HttpClient.newBuilder() .sslContext(sslCtx) .build(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://oauth.proeftuin.gf.irealisatie.nl/oauth/token")) .header("Content-Type", "application/x-www-form-urlencoded") .POST(HttpRequest.BodyPublishers.ofString( "grant_type=client_credentials&scope=epd:read&target_audience=<audience>")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
Response
{
"token_type": "Bearer",
"access_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Im9hdXRoLWlzc3Vlci0yMDI2LTAxIiwidHlwIjoiSldUIn0.eyJ...",
"refresh_token": "gfr_v1_olQUEkji9Be6Inp5AbkaijnarX07BaeoPlnUAd3m18ESq0bT",
"scope": "epd:read"
}Het refresh_token kan ingewisseld worden voor een nieuw access token via hetzelfde
/oauth/token-endpoint met grant_type=refresh_token. Het nieuwe token
krijgt automatisch dezelfde scope en target_audience als het originele token â
je hoeft deze niet opnieuw mee te sturen.