AI-agenten · Les

Authenticatie: API-keys en OAuth

Bearer-tokens, headers met API-keys en OAuth2-flows voor API-toegang door agents.

Les 2 van 413 stappen

Authenticatie: API-keys en OAuth is een gratis AI-agenten-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject AI-agenten. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus AI-agenten bevat in totaal 4 lessen.

Waarom authenticatie belangrijk is voor agents

Wanneer je agent een externe API aanroept, moet de server weten wie de aanvraag doet. Authenticatie bewijst je identiteit; autorisatie bepaalt wat je mag doen. Zonder juiste authenticatie retourneert elke aanvraag 401 Unauthorized en kan je agent niets doen.

Twee patronen overheersen bij de ontwikkeling van agents: API-sleutels en OAuth 2.0.

import requests

# Without auth — will get 401
response = requests.get('https://api.openai.com/v1/models')
print(response.status_code)  # 401 Unauthorized

# With API key in header — works
headers = {'Authorization': 'Bearer sk-proj-abc123'}
response = requests.get(
    'https://api.openai.com/v1/models',
    headers=headers
)
print(response.status_code)  # 200

API-sleutel in Authorization-header

Het meest gebruikte patroon is je API-sleutel als Bearer-token mee te sturen in de header Authorization. Het woord "Bearer" geeft aan dat degene die deze token bezit, geautoriseerd is — de server vertrouwt op de houder van de sleutel.

OpenAI, Anthropic, GitHub en de meeste moderne API's gebruiken dit.

import requests
import os

api_key = os.environ['OPENAI_API_KEY']

response = requests.post(
    'https://api.openai.com/v1/chat/completions',
    headers={
        'Authorization': f'Bearer {api_key}',
        'Content-Type': 'application/json'
    },
    json={
        'model': 'gpt-4o-mini',
        'messages': [{'role': 'user', 'content': 'Hello!'}]
    }
)
print(response.json()['choices'][0]['message']['content'])

API-sleutel in aangepaste header (X-API-Key)

Sommige API's — vooral oudere of interne — gebruiken een aangepaste header zoals X-API-Key in plaats van Authorization: Bearer. Het patroon is hetzelfde, alleen de naam van de header verschilt. Controleer altijd de API-documentatie voor de exacte headernaam die wordt verwacht.

import requests
import os

api_key = os.environ['SERVICE_API_KEY']

response = requests.get(
    'https://api.someservice.com/v1/data',
    headers={
        'X-API-Key': api_key,
        'Accept': 'application/json'
    }
)

if response.status_code == 200:
    data = response.json()
    print('Got data:', data)
elif response.status_code == 401:
    print('Invalid API key — check X-API-Key header')

Inloggegevens opslaan in omgevingsvariabelen

Zet API-sleutels nooit rechtstreeks in je broncode. Als je een sleutel naar een openbare repository pusht, vinden bots deze binnen enkele seconden en maken ze er misbruik van. De juiste aanpak is om inloggegevens op te slaan in omgevingsvariabelen en ze tijdens runtime te lezen met os.environ.

Gebruik os.environ.get() met een duidelijke foutmelding als de sleutel ontbreekt.

import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123xyz789'  # simulate a set env var

api_key = os.environ.get('OPENAI_API_KEY')
if not api_key:
    raise EnvironmentError(
        'OPENAI_API_KEY environment variable not set. '
        'Run: export OPENAI_API_KEY=your-key-here'
    )

print('API key loaded from environment (never hard-code it in source)')

python-dotenv gebruiken voor lokale ontwikkeling

Bewaar je sleutels tijdens de ontwikkeling in een .env-bestand in de hoofdmap van je project. Gebruik de library python-dotenv om ze automatisch te laden. Voeg .env toe aan je .gitignore, zodat het bestand nooit wordt vastgelegd.

# .env file (never commit this!)
# OPENAI_API_KEY=sk-proj-abc123
# ANTHROPIC_API_KEY=sk-ant-xyz456
# GITHUB_TOKEN=ghp_abc789

# In your Python code:
from dotenv import load_dotenv
import os

load_dotenv()  # loads .env into os.environ

openai_key = os.environ['OPENAI_API_KEY']
anthropic_key = os.environ['ANTHROPIC_API_KEY']
github_token = os.environ['GITHUB_TOKEN']

print('Keys loaded successfully')

Wat is OAuth 2.0?

OAuth 2.0 is een standaard voor gedelegeerde autorisatie. In plaats van het wachtwoord van een gebruiker aan je agent te geven, laat OAuth de gebruiker je agent toestemming geven om namens die gebruiker te handelen, met een beperkte reikwijdte en een beperkt tijdsvenster. Google, GitHub, Slack en Salesforce gebruiken dit.

Het belangrijkste concept: je agent krijgt na een autorisatiestroom een access token en gebruikt die token vervolgens voor API-aanroepen.

# OAuth flow overview:
#
# 1. Agent redirects user to:
#    https://auth.provider.com/oauth/authorize
#      ?client_id=YOUR_CLIENT_ID
#      &redirect_uri=http://localhost:8080/callback
#      &scope=read:repo%20write:issues
#      &response_type=code
#
# 2. User logs in and grants permission
# 3. Provider redirects to your callback with ?code=AUTH_CODE
# 4. Agent exchanges code for access_token
# 5. Agent uses access_token for API calls

print('OAuth flow: authorize -> code -> token -> API calls')

OAuth2-clientgegevensstroom

De clientgegevensstroom is de eenvoudigste OAuth-stroom voor agents — er is geen interactie met de gebruiker nodig. Je agent authenticeert zich met zijn eigen client-ID en geheim om een token te verkrijgen. Dit wordt gebruikt voor machine-tot-machinecommunicatie (M2M).

Je POST je gegevens naar het tokenendpoint en ontvangt een kortlevend toegangstoken.

import requests
import os

client_id = os.environ['OAUTH_CLIENT_ID']
client_secret = os.environ['OAUTH_CLIENT_SECRET']
token_url = 'https://auth.example.com/oauth/token'

# Request an access token
response = requests.post(token_url, data={
    'grant_type': 'client_credentials',
    'client_id': client_id,
    'client_secret': client_secret,
    'scope': 'read:data write:tasks'
})

token_data = response.json()
access_token = token_data['access_token']
expires_in = token_data['expires_in']  # seconds
print(f'Token valid for {expires_in}s')

OAuth-tokens gebruiken in API-aanroepen

Zodra je een OAuth-toegangstoken hebt, gebruik je het precies zoals een API-sleutel — in de Authorization: Bearer-header. Het verschil is dat OAuth-tokens verlopen, dus je agent moet het token vernieuwen voordat hij aanroepen doet.

import requests
import os
import time

class OAuthClient:
    def __init__(self, client_id, client_secret, token_url):
        self.client_id = client_id
        self.client_secret = client_secret
        self.token_url = token_url
        self.access_token = None
        self.token_expiry = 0

    def get_token(self):
        if time.time() < self.token_expiry - 60:  # 60s buffer
            return self.access_token
        r = requests.post(self.token_url, data={
            'grant_type': 'client_credentials',
            'client_id': self.client_id,
            'client_secret': self.client_secret
        })
        data = r.json()
        self.access_token = data['access_token']
        self.token_expiry = time.time() + data['expires_in']
        return self.access_token

    def get(self, url):
        token = self.get_token()
        return requests.get(url, headers={'Authorization': f'Bearer {token}'})

OAuth 2.0 met de google-auth-bibliotheek

Voor Google-API's handelt de google-auth-bibliotheek alle OAuth-complexiteit voor je af. De bibliotheek vernieuwt tokens automatisch, leest gegevens uit een JSON-bestand en voegt tokens via een AuthorizedSession toe aan aanvragen.

from google.oauth2 import service_account
from google.auth.transport.requests import AuthorizedSession

# Load service account credentials from JSON file
credentials = service_account.Credentials.from_service_account_file(
    'service-account.json',
    scopes=[
        'https://www.googleapis.com/auth/gmail.readonly',
        'https://www.googleapis.com/auth/calendar.events'
    ]
)

# AuthorizedSession auto-refreshes tokens
session = AuthorizedSession(credentials)

response = session.get(
    'https://www.googleapis.com/gmail/v1/users/me/messages'
)
print(response.json())

Beste beveiligingspraktijken voor API-sleutels

Het beveiligen van API-sleutels is cruciaal voor de beveiliging van agents. Volg deze regels:

  • Bewaar sleutels in omgevingsvariabelen of een geheimenbeheerder (AWS Secrets Manager, HashiCorp Vault)
  • Log sleutels nooit — maskeer ze in de uitvoer
  • Vernieuw sleutels regelmatig en trek gecompromitteerde sleutels onmiddellijk in
  • Gebruik het principe van minimale bevoegdheden — vraag alleen de machtigingen aan die je agent nodig heeft
  • Stel IP-toelatingslijsten in voor API-sleutels wanneer de aanbieder dit ondersteunt
import os

os.environ['OPENAI_API_KEY'] = 'sk-proj-abc123xyz789'

def get_key(env_var):
    key = os.environ.get(env_var)
    if not key:
        raise EnvironmentError(f'Missing required env var: {env_var}')
    return key

def mask_key(key):
    if len(key) < 8:
        return '***'
    return key[:4] + '...' + key[-4:]

api_key = get_key('OPENAI_API_KEY')
print(f'Using key: {mask_key(api_key)}')

401 Unauthorized in je agent afhandelen

Wanneer een agent een 401 Unauthorized-antwoord krijgt, mag hij nooit blindelings opnieuw proberen — dat verspilt aanvraagquota. Controleer in plaats daarvan of het token is verlopen (probeer het te vernieuwen) of dat de sleutel zelf ongeldig is (waarschuw onmiddellijk zodat iemand dit kan herstellen).

import requests
import os

def call_api_with_auth_check(url, api_key):
    response = requests.get(
        url,
        headers={'Authorization': f'Bearer {api_key}'}
    )
    if response.status_code == 401:
        error = response.json().get('error', {})
        code = error.get('code', 'unknown')
        if code == 'token_expired':
            print('Token expired — refresh needed')
            # trigger token refresh flow
        else:
            raise PermissionError(
                f'API key rejected: {error.get("message", "401 Unauthorized")}'
            )
    response.raise_for_status()
    return response.json()

Korte controle: opslag van API-sleutels

Toets je begrip van het beheer van aanmeldgegevens.

Samenvatting van authenticatie

Je hebt de twee belangrijkste authenticatiepatronen voor agents geleerd:

  • API-sleutels — doorgegeven in de Authorization: Bearer TOKEN- of X-API-Key-header; eenvoudig en toestandsloos
  • OAuth 2.0 — clientgegevensstroom voor M2M; tokens verlopen en moeten worden vernieuwd
  • Bewaar sleutels altijd in omgevingsvariabelen, nooit in broncode
  • Gebruik lokaal python-dotenv; gebruik in productie omgevingsvariabelen of geheimenbeheerders
  • Handel 401-antwoorden af door te controleren of het token is verlopen of de sleutel ongeldig is

Een degelijke afhandeling van authenticatie is de basis van elke betrouwbare agent.

Gratis beginnen

Leer AI-agenten met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
60
Lessen
239

Veelgestelde vragen

Is de les “Authenticatie: API-keys en OAuth” gratis?

Ja — de volledige tekst van “Authenticatie: API-keys en OAuth” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus AI-agenten wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus AI-agenten bevat in totaal 4 lessen.

Wat leer ik in “Authenticatie: API-keys en OAuth”?

Bearer-tokens, headers met API-keys en OAuth2-flows voor API-toegang door agents. Je oefent met AI-agenten door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met AI-agenten te beginnen?

Ervaring vooraf is niet nodig. AI-agenten op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Authenticatie: API-keys en OAuth”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over AI-agenten?

Ja. Elke les over AI-agenten bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. REST API-basis voor agentontwikkelaars
  2. Authenticatie: API-keys en OAuth
  3. API-responses en fouten afhandelen
  4. Rate limiting en retry-logica
← Terug naar AI-agenten