AI Agents · Lektion

Authentifizierung: API-Keys und OAuth

Bearer-Tokens, API-Key-Header und OAuth2-Flows für den API-Zugriff von Agenten.

Lektion 2 von 413 Schritte

Authentifizierung: API-Keys und OAuth ist eine kostenlose AI Agents-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Agents-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Warum Authentifizierung für Agenten wichtig ist

Wenn Ihr Agent eine externe API aufruft, muss der Server wissen, wer die Anfrage stellt. Authentifizierung weist die Identität nach; Autorisierung bestimmt, was Sie tun dürfen. Ohne korrekte Authentifizierung gibt jede Anfrage 401 Unauthorized zurück, und Ihr Agent kann nichts tun.

Zwei Muster dominieren die Entwicklung von Agenten: API-Schlüssel und 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-Schlüssel im Authorization-Header

Das gängigste Muster besteht darin, Ihren API-Schlüssel im Authorization-Header als Bearer-Token zu senden. Das Wort „Bearer“ signalisiert, dass jeder, der diesen Token besitzt, autorisiert ist – der Server vertraut dem Inhaber des Schlüssels.

Dieses Muster wird von OpenAI, Anthropic, GitHub und den meisten modernen APIs verwendet.

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-Schlüssel in einem benutzerdefinierten Header (X-API-Key)

Einige APIs – insbesondere ältere oder interne – verwenden statt Authorization: Bearer einen benutzerdefinierten Header wie X-API-Key. Das Muster ist dasselbe, nur der Name des Headers ist anders. Prüfen Sie immer die API-Dokumentation auf den genau erwarteten Header-Namen.

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')

Anmeldedaten in Umgebungsvariablen speichern

Tragen Sie API-Schlüssel niemals fest in Ihren Quellcode ein. Wenn Sie einen Schlüssel in ein öffentliches Repository committen, finden und missbrauchen Bots ihn innerhalb von Sekunden. Das richtige Muster besteht darin, Anmeldedaten in Umgebungsvariablen zu speichern und sie zur Laufzeit mit os.environ auszulesen.

Verwenden Sie os.environ.get() mit einer eindeutigen Fehlermeldung, wenn der Schlüssel fehlt.

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 für die lokale Entwicklung verwenden

Bewahren Sie Ihre Schlüssel während der Entwicklung in einer .env-Datei im Projektstammverzeichnis auf. Verwenden Sie die Bibliothek python-dotenv, um sie automatisch zu laden. Fügen Sie .env zu .gitignore hinzu, damit die Datei niemals committen wird.

# .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')

Was ist OAuth 2.0?

OAuth 2.0 ist ein Standard für delegierte Autorisierung. Statt Ihrem Agenten das Passwort eines Nutzers zu geben, ermöglicht OAuth dem Nutzer, Ihren Agenten zu autorisieren, in seinem Namen zu handeln – mit begrenztem Geltungsbereich und zeitlich begrenzter Gültigkeit. OAuth wird von Google, GitHub, Slack und Salesforce verwendet.

Das zentrale Konzept: Ihr Agent erhält nach einem Autorisierungsablauf einen Access-Token und verwendet diesen anschließend für API-Aufrufe.

# 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 Client-Credentials-Flow

Der Client-Credentials-Flow ist der einfachste OAuth-Flow für Agenten – es ist keine Benutzerinteraktion erforderlich. Ihr Agent authentifiziert sich mit seiner eigenen Client-ID und seinem eigenen Secret, um ein Token zu erhalten. Dieser Flow wird für die Maschine-zu-Maschine-Kommunikation (M2M) verwendet.

Sie senden Ihre Anmeldedaten per POST an den Token-Endpunkt und erhalten ein kurzlebiges Zugriffstoken.

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 in API-Aufrufen verwenden

Sobald Sie ein OAuth-Zugriffstoken haben, verwenden Sie es genau wie einen API-Schlüssel – im Authorization: Bearer-Header. Der Unterschied besteht darin, dass OAuth-Tokens ablaufen. Ihr Agent muss daher vor API-Aufrufen die Token-Erneuerung durchführen.

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 mit der google-auth-Bibliothek

Für Google-APIs übernimmt die google-auth-Bibliothek die gesamte OAuth-Komplexität für Sie. Sie verwaltet die Token-Erneuerung automatisch, liest Anmeldedaten aus einer JSON-Datei und fügt Tokens über eine AuthorizedSession an Anfragen an.

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())

Best Practices zur Sicherheit von API-Schlüsseln

Der Schutz von API-Schlüsseln ist für die Sicherheit von Agenten entscheidend. Befolgen Sie diese Regeln:

  • Speichern Sie Schlüssel in Umgebungsvariablen oder einem Secrets Manager (AWS Secrets Manager, HashiCorp Vault).
  • Protokollieren Sie Schlüssel niemals – maskieren Sie sie in der Ausgabe.
  • Rotieren Sie Schlüssel regelmäßig und widerrufen Sie kompromittierte Schlüssel sofort.
  • Wenden Sie das Prinzip der geringsten Berechtigungen an – fordern Sie nur die Scopes an, die Ihr Agent benötigt.
  • Setzen Sie IP-Allowlisten für API-Schlüssel, sofern der Anbieter dies unterstützt.
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)}')

Umgang mit 401 Unauthorized in Ihrem Agenten

Wenn ein Agent eine 401 Unauthorized-Antwort erhält, sollte er niemals blind wiederholen – dadurch wird das Rate-Limit-Kontingent verschwendet. Prüfen Sie stattdessen, ob das Token abgelaufen ist (versuchen Sie, es zu erneuern) oder ob der Schlüssel selbst ungültig ist (lösen Sie sofort einen Alarm aus, damit eine Person das Problem beheben kann).

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()

Kurztest: Speicherung von API-Schlüsseln

Testen Sie Ihr Verständnis der Verwaltung von Anmeldedaten.

Zusammenfassung: Authentifizierung

Sie haben die beiden wichtigsten Authentifizierungsmuster für Agenten kennengelernt:

  • API-Schlüssel – werden im Authorization: Bearer TOKEN- oder X-API-Key-Header übergeben; einfach und zustandslos
  • OAuth 2.0 – Client-Credentials-Flow für M2M; Tokens laufen ab und müssen erneuert werden
  • Speichern Sie Schlüssel immer in Umgebungsvariablen, niemals im Quellcode.
  • Verwenden Sie lokal python-dotenv; in der Produktion Umgebungsvariablen oder Secrets Manager.
  • Behandeln Sie 401-Antworten, indem Sie prüfen, ob das Token abgelaufen oder der Schlüssel ungültig ist.

Eine solide Authentifizierungsbehandlung ist das Fundament jedes zuverlässigen Agenten.

Kostenlos starten

Lerne AI Agents mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
60
Lektionen
239

Häufig gestellte Fragen

Ist die Lektion „Authentifizierung: API-Keys und OAuth“ kostenlos?

Ja — der vollständige Text von „Authentifizierung: API-Keys und OAuth“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Agents-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Agents-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Authentifizierung: API-Keys und OAuth“?

Bearer-Tokens, API-Key-Header und OAuth2-Flows für den API-Zugriff von Agenten. Du übst AI Agents mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Agents zu starten?

Keine Vorkenntnisse erforderlich. AI Agents auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Authentifizierung: API-Keys und OAuth“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Agents-Lektion Code schreiben und ausführen?

Ja. Jede AI Agents-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. REST-API-Grundlagen für Agentenentwickler
  2. Authentifizierung: API-Keys und OAuth
  3. API-Responses und Fehler verarbeiten
  4. Rate Limiting und Retry-Logik
← Zurück zu AI Agents