Skip to content

Authenticatie

De DAMS Collection API gebruikt OAuth 2.0 met Bearer Tokens voor authenticatie. Elke API request moet een geldig access token bevatten.

Access Token verkrijgen

Via Keycloak

Open Vlacc gebruikt Keycloak als identity provider. Vraag een access token aan:

bash
curl -X POST \
  "https://auth.cultuurconnect.be/realms/vlacc/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET"

Response:

json
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI...",
  "expires_in": 3600,
  "token_type": "Bearer"
}

Token gebruiken

Voeg het token toe aan de Authorization header:

bash
curl -X GET \
  "https://cultuur-connect-vlacc-uat.cloud.inuits.dev/collection/v1/entities" \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI..."

Token vernieuwen

Tokens verlopen na de aangegeven expires_in tijd (standaard 3600 seconden). Vraag voor het verlopen een nieuw token aan.

Best practice: Token caching

python
import time
import requests

class APIClient:
    def __init__(self, client_id, client_secret):
        self.client_id = client_id
        self.client_secret = client_secret
        self.token = None
        self.token_expires = 0

    def get_token(self):
        # Gebruik cached token als nog geldig
        if self.token and time.time() < self.token_expires - 60:
            return self.token

        # Vraag nieuw token aan
        response = requests.post(
            "https://auth.cultuurconnect.be/realms/vlacc/protocol/openid-connect/token",
            data={
                "grant_type": "client_credentials",
                "client_id": self.client_id,
                "client_secret": self.client_secret
            }
        )
        data = response.json()
        self.token = data["access_token"]
        self.token_expires = time.time() + data["expires_in"]
        return self.token

    def request(self, method, endpoint, **kwargs):
        headers = kwargs.pop("headers", {})
        headers["Authorization"] = f"Bearer {self.get_token()}"
        return requests.request(method, endpoint, headers=headers, **kwargs)

API Credentials aanvragen

Om API toegang te krijgen:

  1. Neem contact op met developers@inuits.eu
  2. Beschrijf je use case
  3. Je ontvangt een client_id en client_secret

Beveiliging

  • Bewaar je credentials veilig (gebruik environment variables)
  • Deel nooit je client_secret
  • Gebruik HTTPS voor alle requests

Scopes en rechten

API tokens kunnen verschillende scopes hebben:

ScopeRechten
readAlleen lezen
writeLezen en schrijven
adminVolledige toegang inclusief verwijderen

Foutafhandeling

401 Unauthorized

json
{
  "error": "Unauthorized",
  "message": "Invalid or expired token"
}

Oplossing: Vraag een nieuw token aan.

403 Forbidden

json
{
  "error": "Forbidden",
  "message": "Insufficient permissions"
}

Oplossing: Controleer je scopes of vraag uitgebreidere rechten aan.

Powered by Elody - Open Source Semantic Data Platform