Zum Inhalt springen
SAP, DATEV und Dynamics Experten
API-Sicherheit

OAuth 2.0 und Token-Sicherheit für ERP-Schnittstellen

Viele ERP-Shop-APIs laufen über statische Keys. Wie Client-Credentials-Flow, mTLS, DPoP, kurze Token-Laufzeiten und Scope-Minimierung die Schnittstelle härten.

13 Min. Lesezeit OAuth 2.0API-SicherheitERP-IntegrationmTLS

Zwischen Online-Shop und ERP fließen die sensibelsten Daten eines Handelsunternehmens: Bestellungen, Kundenstammdaten, Preise, Lagerbestände und Zahlungsinformationen. Trotzdem laufen viele dieser Schnittstellen bis heute über einen einzigen statischen API-Schlüssel oder über Basic Authentication mit einem fest hinterlegten Passwort. Was pragmatisch beginnt, wird mit wachsender Angriffsfläche und steigendem Compliance-Druck teuer. Kompromittierte Zugangsdaten zählen zu den kostspieligsten Einfallstoren überhaupt: Ein Datenleck kostet Unternehmen weltweit im Schnitt 4,44 Millionen US-Dollar (IBM Cost of a Data Breach 2025), und fehlerhafte Authentifizierung rangiert als Broken Authentication auf Platz 2 der OWASP API Security Top 10 (OWASP). Zugleich registrierte das BSI zuletzt rund 309.000 neue Schadprogramm-Varianten pro Tag (BSI). Dieser Beitrag zeigt, wie sich die API-Schicht zwischen ERP und Shop mit OAuth 2.0 absichern lässt: mit dem Client-Credentials-Flow, sender-constrained Tokens per mTLS und DPoP, kurzen Token-Laufzeiten, Rotation und Scope-Minimierung -- orientiert an der aktuellen Sicherheitsempfehlung IETF RFC 9700.

OAuth 2.0: gebundene, kurzlebige Tokens für ERP-APIsClient-Credentials-Flow, mTLS/DPoP und Scope-Minimierung statt statischer KeysShop-ClientMiddleware / KonnektorAuthorization ServerToken-EndpointClient-Credentials-FlowERP / Resource ServerSAP, Dynamics, Wawi1. Token anfordern3. Token vorzeigen2. Access Token ausstellenAccess Tokenscope: orders:read (Least Privilege)exp: 5 Minuten, kurzlebigcnf: mTLS-Zertifikat / DPoPsender-constrained (RFC 9700)Statischer API-Key vs. OAuth-2.0-TokenStatischer API-KeyLaufzeit: unbefristetWiderruf: nur globaler TauschBindung: keine, reines BearerScope: meist VollzugriffOAuth-2.0-TokenLaufzeit: Minuten, rotierendWiderruf: gezielt pro TokenBindung: mTLS oder DPoPScope: eng gefasst je Aufgabe

Warum statische API-Keys und Basic Auth zum Risiko werden

Der Reiz eines statischen API-Schlüssels liegt auf der Hand: Er ist in Minuten eingerichtet, in jeden HTTP-Aufruf kopiert und funktioniert sofort. Genau diese Einfachheit macht ihn zum Problem. Ein solcher Schlüssel ist ein Dauerausweis ohne Ablaufdatum. Er liegt im Klartext in Konfigurationsdateien, in Skripten, in der Zwischenablage von Entwicklern und nicht selten auch in Versionsverwaltungen, in die er versehentlich eingecheckt wurde. Wer ihn einmal besitzt, kann die Schnittstelle unbegrenzt ansprechen -- ohne dass jemand bemerkt, dass der Aufrufer nicht mehr der legitime ist.

Die wirtschaftliche Dimension ist erheblich. Das durchschnittliche Datenleck kostet Unternehmen weltweit 4,44 Millionen US-Dollar, nach 4,88 Millionen im Vorjahr (IBM Cost of a Data Breach 2025). In den USA liegt der Durchschnitt sogar bei 10,22 Millionen US-Dollar (IBM Cost of a Data Breach 2025). Entscheidend für Schnittstellen ist weniger der Durchschnitt als die Dauer: Bis ein Vorfall erkannt und eingedämmt ist, vergehen im Mittel 241 Tage (IBM Cost of a Data Breach 2025). Ein statischer Schlüssel, der in dieser Zeit unbemerkt missbraucht wird, öffnet die Schnittstelle über Monate. Das BSI beschreibt kompromittierte Zugangsdaten und Identitätsdiebstahl als anhaltend wachsende Bedrohung, insbesondere gegen Cloud-Infrastrukturen (BSI).

Der statische Schlüssel ist ein Dauerausweis

Ein fest verdrahteter API-Schlüssel lässt sich nicht gezielt zurückziehen. Wird er kompromittiert, bleibt nur der globale Tausch -- und der legt jede abhängige Integration gleichzeitig lahm. Genau deshalb bleiben solche Schlüssel oft jahrelang im Einsatz, obwohl längst unklar ist, wer sie alles kennt. Ein kurzlebiges, widerrufbares Token dreht dieses Verhältnis um: Es ist im Missbrauchsfall schnell wertlos und lässt sich einzeln entziehen.

OWASP führt fehlerhafte Authentifizierung als API2:2023 Broken Authentication auf Platz 2 der API Security Top 10 (OWASP). Dazu zählen ausdrücklich schwach geschützte Authentifizierungs-Endpunkte, die sich per Brute Force oder Credential Stuffing angreifen lassen, sowie die unsichere Speicherung und Verwaltung von Tokens (OWASP). Auf Platz 1 steht die fehlerhafte Objekt-Autorisierung, Broken Object Level Authorization, bei der eine Schnittstelle Datensätze allein anhand einer übergebenen ID ausliefert (OWASP). Beide Risiken haben eine gemeinsame Wurzel: zu viel Vertrauen in ein einziges, langlebiges Geheimnis. Wie sich diese Schnittstellen im größeren regulatorischen Rahmen einordnen, behandelt unser Beitrag zur NIS2-konformen Absicherung von ERP-Schnittstellen -- hier geht es um die konkreten Authentifizierungsmechanismen darunter.

OAuth 2.0 und der Client-Credentials-Flow für Maschinen

OAuth 2.0 ist der etablierte Standard für delegierte Autorisierung. Statt ein dauerhaftes Passwort weiterzugeben, holt sich ein Client bei einem Autorisierungsserver ein zeitlich begrenztes Access Token ab und legt dieses bei jedem Aufruf der Schnittstelle vor. OAuth kennt mehrere Abläufe, sogenannte Grant Types, je nachdem, ob ein Mensch im Browser beteiligt ist oder zwei Systeme direkt miteinander sprechen. Für die Kommunikation zwischen Shop, Middleware und ERP -- also Maschine zu Maschine ohne interaktiven Nutzer -- ist der Client-Credentials-Flow vorgesehen.

Warum Client-Credentials und nicht der Authorization-Code-Flow

Der Authorization-Code-Flow mit PKCE ist für Anwendungen gedacht, bei denen ein Mensch sich anmeldet und einer App Zugriff auf seine Daten erlaubt. Zwischen ERP und Shop gibt es keinen solchen Nutzer -- die Systeme handeln in eigenem Namen. Dafür ist der Client-Credentials-Flow der richtige: Der Client weist sich mit seinen eigenen Zugangsdaten oder einem Zertifikat aus und erhält ein Token, das genau seine Maschinenrolle abbildet. Den Implicit-Flow und den Passwort-Grant (ROPC) rät RFC 9700 dagegen ausdrücklich ab (IETF RFC 9700).

Im Client-Credentials-Flow authentifiziert sich der Client direkt am Token-Endpunkt des Autorisierungsservers und erhält ein Access Token zurück. Die Anmeldung erfolgt nicht mehr über ein Passwort im Klartext, sondern idealerweise über ein Client-Zertifikat. So sieht ein solcher Token-Request im Kern aus:

Token-Request im Client-Credentials-Flow
POST /oauth/token HTTP/1.1
Host: auth.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&scope=orders:read inventory:write

# Antwort: kurzlebiges Access Token mit engem Scope,
# gebunden an das Client-Zertifikat (mTLS) oder an einen DPoP-Schlüssel

Der zentrale Ort für diese Logik ist in der Praxis die Middleware: Sie holt Tokens ab, erneuert sie rechtzeitig, hält Zertifikate vor und setzt die Absicherung einheitlich durch, statt sie in jeder einzelnen Punkt-zu-Punkt-Verbindung erneut zu implementieren. Das Access Token, das der Server ausstellt, ist bewusst kurzlebig und trägt nur die Berechtigungen, die der jeweilige Prozess wirklich braucht.

Bearer-Tokens und ihr Grundproblem

Ein einfaches Access Token ist zunächst ein Bearer Token -- ein Inhaber-Token. Der Name ist Programm: Wer das Token besitzt, darf es benutzen, ganz gleich, ob er der rechtmäßige Client ist oder ein Angreifer, der es abgefangen hat. Der Server prüft nur, ob das Token gültig ist, nicht, wer es vorlegt. Damit hat ein Bearer Token denselben konzeptionellen Schwachpunkt wie ein statischer Schlüssel, nur mit kürzerer Lebensdauer. Gerät es in falsche Hände -- durch ein Leck in Logdateien, einen kompromittierten Proxy oder eine fehlerhafte Fehlermeldung -- lässt es sich bis zum Ablauf ungehindert weiterverwenden.

Ein Bearer Token ist wie Bargeld: Wer es findet, kann es ausgeben. Sender-constrained Tokens verwandeln dieses Bargeld in einen personalisierten Scheck, der nur mit dem passenden Ausweis gilt.

ERP Schnittstellenagentur

Sender-constrained Tokens: mTLS und DPoP

Genau hier setzt die aktuelle Sicherheitsempfehlung an. RFC 9700, die seit Januar 2025 gültige Best Current Practice für OAuth-2.0-Sicherheit, empfiehlt, Access Tokens an ihren Absender zu binden (IETF RFC 9700). Ein solches sender-constrained Token ist nur nutzbar, wenn der Aufrufer zusätzlich den Besitz eines bestimmten Geheimnisses nachweist -- eines privaten Schlüssels oder eines Zertifikats. Ein gestohlenes Token allein bringt einem Angreifer dann nichts mehr. RFC 9700 nennt zwei standardisierte Verfahren dafür: Mutual TLS nach RFC 8705 und Demonstrating Proof of Possession, kurz DPoP, nach RFC 9449 (IETF RFC 9700).

Bei mutual TLS weisen sich beide Seiten mit Zertifikaten aus -- nicht nur der Server gegenüber dem Client, sondern auch der Client gegenüber dem Server. Das ausgestellte Token wird an den öffentlichen Schlüssel des Client-Zertifikats gebunden; der Resource Server akzeptiert es nur über dieselbe zertifikatsgesicherte Verbindung. DPoP verfolgt dasselbe Ziel auf Anwendungsebene: Der Client erzeugt pro Anfrage einen signierten Nachweis mit seinem privaten Schlüssel, den der Server gegen den im Token hinterlegten Schlüssel prüft. Beide Verfahren machen ein abgefangenes Token wertlos, unterscheiden sich aber in Infrastruktur und Einsatzprofil.

Aspektmutual TLS (RFC 8705)DPoP (RFC 9449)
Bindung anClient-ZertifikatÖffentlich-privates Schlüsselpaar
EbeneTransportschicht (TLS)Anwendungsschicht (HTTP-Header)
InfrastrukturZertifikatsverwaltung, PKI nötigOhne Client-PKI umsetzbar
Typischer EinsatzServer-zu-Server im RechenzentrumClients ohne stabile Zertifikatsbasis
Nachweis proVerbindungEinzelanfrage

Für die klassische Server-zu-Server-Verbindung zwischen Middleware und ERP -- etwa einer SAP-Anbindung -- ist mutual TLS oft die naheliegende Wahl, weil beide Seiten ohnehin verwaltet werden und eine Zertifikatsstruktur besteht. DPoP spielt seine Stärke dort aus, wo eine ausgewachsene Client-PKI zu aufwendig wäre. Entscheidend ist nicht die Wahl des einen oder anderen Verfahrens, sondern dass Tokens überhaupt an ihren Absender gebunden werden, statt als frei übertragbares Bargeld durch die Systeme zu wandern.

Kurze Laufzeiten und Token-Rotation

Ein sender-constrained Token ist bereits deutlich schwerer zu missbrauchen. Die zweite Verteidigungslinie ist seine Lebensdauer. RFC 9700 empfiehlt kurzlebige Access Tokens, um das Zeitfenster zu begrenzen, in dem ein kompromittiertes Token überhaupt nützlich ist (IETF RFC 9700). Statt eines Schlüssels, der jahrelang gilt, erhält der Client ein Token, das nach Minuten verfällt und bei Bedarf neu abgeholt wird. Läuft ein Token aus, endet damit auch jeder unbemerkte Missbrauch automatisch.

Damit der Client nicht bei jedem Aufruf eine vollständige Neuanmeldung durchlaufen muss, kommen Refresh Tokens ins Spiel. Diese langlebigeren Tokens dienen ausschließlich dazu, neue Access Tokens zu beziehen. Weil sie damit selbst zum lohnenden Ziel werden, empfiehlt RFC 9700 die Refresh-Token-Rotation: Bei jeder Einlösung wird das alte Refresh Token entwertet und ein neues ausgegeben (IETF RFC 9700). Taucht ein bereits eingelöstes Refresh Token erneut auf, ist das ein klares Zeichen für einen Diebstahl -- und der gesamte Token-Strang lässt sich sofort sperren.

  • Kurze Access-Token-Laufzeit: Minuten statt Monate begrenzen das Missbrauchsfenster auf ein Minimum.
  • Refresh-Token-Rotation: Jede Einlösung entwertet das vorherige Refresh Token und deckt Wiederverwendung sofort auf.
  • Sender-Constraining auch für Refresh Tokens: Auch das Refresh Token wird an mTLS oder DPoP gebunden, damit ein Diebstahl allein nichts nützt.
  • Automatische Erneuerung: Die Middleware holt Tokens rechtzeitig und ohne Ausfall neu, sodass kurze Laufzeiten den Betrieb nicht stören.
  • Sofortiger Widerruf: Einzelne Tokens oder Clients lassen sich gezielt sperren, ohne alle Integrationen anzuhalten.

Kurze Laufzeiten brauchen verlässliche Erneuerung

Kurzlebige Tokens entfalten ihren Schutz nur, wenn die Erneuerung zuverlässig automatisiert ist. Wird ein Token zur Unzeit ungültig, ohne dass rechtzeitig ein neues bereitsteht, brechen Bestellabgleich oder Bestandssynchronisation ab. Die Kunst liegt darin, die Laufzeit kurz genug für die Sicherheit und die Erneuerung robust genug für den Dauerbetrieb zu wählen. Ein zentrales Token-Handling in der Middleware nimmt jeder einzelnen Anbindung diese Aufgabe ab -- ergänzt um eine robuste Fehlerbehandlung in Schnittstellen, die abgelaufene Tokens sauber abfängt, statt die Verarbeitung abzubrechen.

Scope-Minimierung nach dem Least-Privilege-Prinzip

Selbst ein kurzlebiges, gebundenes Token sollte nur so viel dürfen wie nötig. Genau das leisten Scopes: Sie schränken ein Token auf eine eng umrissene Menge von Rechten ein. Ein Prozess, der nur Bestellungen aus dem Shop ins ERP übertragen soll, braucht kein Token mit Vollzugriff auf Kundenstammdaten und Preise. RFC 9700 rät ausdrücklich dazu, Scopes minimal zu halten und nur die tatsächlich benötigten Berechtigungen zu vergeben (IETF RFC 9700). Dieses Least-Privilege-Prinzip begrenzt den Schaden, falls ein Token doch einmal kompromittiert wird.

Die Wirkung reicht bis zur fehlerhaften Objekt-Autorisierung, die OWASP auf Platz 1 der API Security Top 10 führt (OWASP). Ein eng gefasstes Token, das nur lesenden Zugriff auf Bestellungen erlaubt, kann keine Preise ändern und keine Kundendatensätze löschen, selbst wenn ein Angreifer es erbeutet. Scopes ersetzen die Berechtigungsprüfung pro Datensatz nicht, aber sie verkleinern die Angriffsfläche jedes einzelnen Tokens erheblich. Wie sich eine solche Berechtigungsschicht zentral bündeln lässt, zeigt der Vergleich REST-API und Middleware.

Ein Scope je Aufgabe

Jeder Integrationsprozess erhält ein eigenes Client-Profil mit exakt den Rechten, die seine Aufgabe erfordert -- nicht mehr.

Lesen und Schreiben trennen

Ein reiner Lesezugriff auf Bestellungen bekommt kein Schreibrecht. So kann ein kompromittiertes Token keine Daten verändern.

Kein Sammel-Client

Statt eines Universal-Zugangs für alle Schnittstellen erhält jede Anbindung ein eigenes, klar abgegrenztes Mandat.

Enge Scopes je Prozess
# Bestellimport Shop -> ERP
scope=orders:read

# Bestands-Rückmeldung ERP -> Shop
scope=inventory:write

# Preispflege (getrennter Client, eigenes Zertifikat)
scope=prices:write

Was RFC 9700 konkret empfiehlt

RFC 9700 bündelt die aktuelle Sicherheitsempfehlung für OAuth 2.0. Die im Januar 2025 veröffentlichte Best Current Practice aktualisiert das Angreifermodell und fasst zusammen, was sich in Jahren praktischer Erfahrung als sicher erwiesen hat (IETF RFC 9700). Für eine ERP-Shop-Schnittstelle lassen sich die Kernpunkte in wenige, klare Regeln übersetzen: sender-constrained Tokens statt reiner Bearer Tokens, kurze Laufzeiten, Refresh-Token-Rotation, minimale Scopes und der Verzicht auf überholte Abläufe wie den Implicit-Flow und den Passwort-Grant.

AspektGewachsene AnbindungNach RFC 9700
AuthentifizierungStatischer API-Key oder Basic AuthOAuth 2.0 Client-Credentials-Flow
Token-Typlanglebiges Bearer-Geheimnissender-constrained per mTLS oder DPoP
Laufzeitunbefristet, selten getauschtkurzlebig, automatisch erneuert
Refreshkein Konzeptrotierend, bei Wiederverwendung gesperrt
Berechtigungmeist Vollzugriffminimale Scopes je Prozess
Widerrufnur globaler Schlüsseltauschgezielt pro Token oder Client

Sicherheit als Eigenschaft der Schnittstelle, nicht als Nachtrag

Die einzelnen Bausteine -- Client-Credentials-Flow, Token-Bindung, kurze Laufzeiten, Rotation und enge Scopes -- greifen ineinander. Erst zusammen ergeben sie eine Schnittstelle, bei der ein einzelnes geleaktes Geheimnis nicht mehr das ganze System öffnet. Wer diese Prinzipien von Beginn an einbaut, statt sie später nachzurüsten, spart aufwendige Umbauten und schließt die häufigsten Angriffswege von vornherein.

Der Weg von statischen Keys zu OAuth 2.0

Der Weg von einer gewachsenen Anbindung mit statischem Schlüssel zu einer token-basierten Schnittstelle lässt sich schrittweise gehen, ohne den laufenden Betrieb zu unterbrechen -- als Teil einer geordneten Systemintegration. Am Anfang steht keine große Neuentwicklung, sondern eine Bestandsaufnahme: Welche Schnittstellen existieren, wie authentifizieren sie sich heute und welche Daten fließen über sie. Aus diesem Befund ergibt sich die Reihenfolge -- die Verbindungen mit den weitreichendsten Rechten und den sensibelsten Daten zuerst.

1. Bestand erfassen

Alle Schnittstellen, ihre Authentifizierung, ihre Datenklassen und ihre Berechtigungen aufnehmen. Statische Schlüssel und Basic-Auth-Verbindungen werden dabei sichtbar.

2. Autorisierungsserver einführen

Einen Token-Endpunkt bereitstellen, Client-Profile je Prozess anlegen und Zertifikate für mTLS oder Schlüssel für DPoP verteilen.

3. Schrittweise umstellen

Jede Anbindung einzeln vom statischen Schlüssel auf den Client-Credentials-Flow umziehen, parallel testen und den alten Zugang erst danach abschalten.

4. Überwachen und betreiben

Token-Nutzung, Fehlerquoten und Widerrufe laufend beobachten, damit kurze Laufzeiten und Rotation im Dauerbetrieb verlässlich funktionieren.

Wer die Absicherung in eine breitere Integrationsstrategie einbettet, findet weiterführende Ansätze in unserem Beitrag zur Anbindung der JTL-Wawi an den Onlineshop sowie zum digitalen Produktpass nach der ESPR -- beide zeigen, dass eine sichere API-Schicht die Grundlage für neue Datenflüsse ist. Wie sich Token-Nutzung, Fehlerquoten und Anomalien im laufenden Betrieb sichtbar machen lassen, vertieft der Beitrag zur Observability von Schnittstellen.

Sicherheit ist kein Feature, das man einer Schnittstelle nachträglich verpasst. Sie ist die Art, wie eine Schnittstelle Vertrauen organisiert -- von der ersten Zeile an.

ERP Schnittstellenagentur

Quellen und Studien

Dieser Artikel basiert auf Daten aus: IETF RFC 9700 (Best Current Practice for OAuth 2.0 Security, Januar 2025), IETF RFC 8705 (OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens) und IETF RFC 9449 (OAuth 2.0 Demonstrating Proof of Possession, DPoP); OWASP API Security Top 10 (Ausgabe 2023, insbesondere API1 und API2); BSI (Bundesamt für Sicherheit in der Informationstechnik), Die Lage der IT-Sicherheit in Deutschland (2024); IBM Cost of a Data Breach Report (2025). Die genannten Zahlen können je nach Erhebungszeitpunkt variieren.