Zum Inhalt springen

Sicherheitsgrundlagen

Supabases neue API-Schlüssel: welcher gehört in deine App?

Supabase hat anon und service_role durch öffentliche und geheime Schlüssel ersetzt. Welcher gehört in deine App, und welcher nie?

Vlad Tkachenko5 Min. Lesezeit

Kurz gesagt

  • Supabase vergibt jetzt Schlüssel mit sb_publishable_ und sb_secret_. Sie ersetzen anon und service_role und machen dieselben zwei Dinge.
  • Der öffentliche Schlüssel gehört in deine App. Der geheime nie, und inzwischen erkennst du den Unterschied schon an den ersten Zeichen.
  • Deine alten Schlüssel funktionieren heute noch. Supabase hat angekündigt, dass alle Projekte Ende 2026 umsteigen müssen.

Wenn du kürzlich dein Supabase-Dashboard geöffnet und dort Schlüssel gefunden hast, die mit sb_publishable_ und sb_secret_ beginnen, wo früher anon und service_role standen: Es ist nichts kaputt. Supabase hat seine API-Schlüssel umbenannt, und das Paar, das du kennst, ist auf dem Weg nach draußen.

Die Änderung ist klein in dem, was sie tut, und groß in dem, was sie verhindert. Die beiden Schlüssel erledigen weiterhin genau die zwei Aufgaben, die sie immer hatten. Neu ist, dass du jetzt ohne Umweg siehst, welcher welcher ist.

Was Supabase tatsächlich geändert hat

Supabase hat die neuen Schlüssel im Juli 2025 angekündigt, zusammen mit einer Änderung daran, wie Anmeldetokens signiert werden. Zwei Dinge haben zwei Dinge ersetzt:

  • Der öffentliche Schlüssel, sb_publishable_…, ersetzt den anon-Schlüssel.
  • Geheime Schlüssel, sb_secret_…, ersetzen den service_role-Schlüssel.

An den Rechten ändert sich nichts. Ein öffentlicher Schlüssel benennt weiterhin nur dein Projekt und trägt keine eigenen Rechte; ein geheimer umgeht weiterhin jede Regel, die du geschrieben hast. Wenn du schon weißt, welche Schlüssel im Frontend sicher sind, ist an diesem Wissen nichts falsch geworden.

Zwei praktische Unterschiede lohnen sich zu kennen. Du kannst mehrere geheime Schlüssel gleichzeitig haben und sie einzeln widerrufen. Rotieren bedeutet also nicht mehr einen Moment, in dem alles kaputt ist, was den Schlüssel benutzt hat. Und die alten Schlüssel hatten eine Eigenschaft, die kaum jemandem auffiel: Sie waren JWTs, die zehn Jahre nach dem Anlegen des Projekts ablaufen. Die neuen tragen kein Ablaufdatum in sich.

Dieselben zwei Aufgaben, zwei verschiedene Formen. Im alten Paar steckt die Rolle in der Mitte, im neuen ist sie das Erste, was du liest.

Welcher der beiden in deine App gehört

Der öffentliche, und nur der öffentliche.

Deine App läuft im Browser deiner Besucherin, und die Anfrage an deine Datenbank geht von dort los. Sie muss sagen, zu welchem Projekt sie gehört, und diese Kennung erreicht jede Besucherin, so ist es gedacht. sb_publishable_… ist der Schlüssel, der genau dafür gebaut ist: Ihn in deiner App zu finden ist kein Befund, und war es nie.

sb_secret_… ist das Gegenteil. Er liest und schreibt jede Zeile in jeder Tabelle, von überall, und ignoriert deine Policies vollständig. Das ist sein ganzer Zweck. Er gehört auf einen Server, in eine Edge Function, in einen Worker: nirgendwohin, wo ein Browser hinkommt. Ist einer je in Frontend-Code gelandet, tausche ihn im Dashboard aus, bevor du sonst etwas änderst. Die Zeile zu löschen schließt die Tür nicht.

So erkennst du, welche Sorte du hast

Lies die ersten Zeichen. Das ist inzwischen die ganze Prüfung.

Was du siehstWas es istIm Browser sicher?
sb_publishable_…aktueller öffentlicher SchlüsselGehört hierhin
sb_secret_…aktueller geheimer SchlüsselNiemals
eyJ… mit anonalter öffentlicher SchlüsselGehört hierhin
eyJ… mit service_rolealter geheimer SchlüsselNiemals

Ein aktueller Schlüssel ist eine lange Zeichenkette aus zwei Hälften: einer zufälligen Mitte und einer kurzen Prüfsumme am Ende. Ein alter Schlüssel besteht aus drei durch Punkte getrennten Blöcken, und der mittlere ist lesbarer Text statt Verschlüsselung. Deshalb hieß es beim alten Paar, ihn zu dekodieren und das Feld role zu lesen.

Wenn du einen Schlüssel in deiner App findest und nicht weißt, welcher es ist: Unser kostenloser Scan liest deine Live-Seite von außen und benennt, was er sehen kann. Das dauert etwa 20 Sekunden und braucht kein Konto: App scannen.

Funktionieren meine alten anon- und service_role-Schlüssel noch?

Heute ja. Supabase hat einen Zeitplan veröffentlicht, keinen Ausschalter:

WannWas passiert
1. November 2025Nach diesem Datum wiederhergestellte Projekte bekommen anon und service_role gar nicht mehr.
Ende 2026, Datum offenAlle Projekte müssen die neuen Schlüssel verwenden.

Es gibt also diese Woche keinen Notfall, und es gibt dieses Jahr eine Frist. Wenn deine App vor der Umbenennung gebaut und seither nicht angefasst wurde, läuft sie gerade auf alten Schlüsseln und wird das noch eine Weile tun.

Das Argument für einen frühen Wechsel ist nicht die Frist. Es ist der Tag, an dem jemand den falschen Schlüssel in einen Prompt einfügt: sb_secret_ sagt laut, was es ist, eyJ… nicht.

So wechselst du, ohne deine App zu zerlegen

Supabases eigene Migrationsanleitung ist die Referenz. Die Kurzfassung für eine App, die du nicht von Hand geschrieben hast:

  1. Öffne im Dashboard Settings → API Keys und erzeuge die neuen Schlüssel. Das legt sie zusätzlich an; die alten verschwinden nicht, und beide Paare funktionieren gleichzeitig.
  2. Finde die Stelle, an der deine App ihren Supabase-Client erzeugt, und ersetze den öffentlichen Schlüssel. In einem Builder wie Lovable oder Bolt ist das meist ein Wert in den Projekteinstellungen statt einer Codezeile.
  3. Ersetze den geheimen Schlüssel überall, wo er auf einem Server benutzt wird: Edge Functions, Webhooks, geplante Jobs, alles, was nicht der Browser ist.
  4. Lade deine App und klick dich durch die Stellen, die Daten lesen und schreiben. Ein falscher öffentlicher Schlüssel scheitert sofort und laut, und das ist der gute Fall.
  5. Erst wenn alles läuft, schalte die alten Schlüssel ab.

Schritt 5 gehört ans Ende, und man sollte ihn bewusst gehen statt nie: Halb migrierte Projekte, in denen die App noch einen alten anon-Schlüssel neben einem aktiven sb_publishable_ trägt, sind häufig und im Fehlerfall verwirrend.

Was diese Woche zu tun ist

Was zu tun ist

  • Öffne Settings → API Keys und sieh nach, welche Paare dein Projekt hat. Das dauert eine Minute und sagt dir, wo du stehst.
  • Findest du sb_secret_… oder service_role irgendwo im Frontend-Code, tausche den Schlüssel noch heute aus. Das ist der einzige Punkt hier, der dringend ist.
  • Erzeuge die neuen Schlüssel und stelle deine App um, wenn du eine halbe Stunde hast, nicht wegen der Frist, sondern weil das Präfix den nächsten Fehler offensichtlich macht.
  • Sieh dir bei der Gelegenheit Row Level Security an. Der neue Schlüssel ändert nichts daran, was deine Policies erlauben, und RLS anzuschalten ist nicht dasselbe wie geschützt zu sein.

Wenn du die plattformspezifische Fassung möchtest, was zu prüfen ist: Wir haben eine verständliche Anleitung für Supabase-Apps, und die Sicherheits-Checkliste in 10 Minuten deckt diesen Punkt neben den anderen Dingen ab, die man in einer frisch veröffentlichten App abschalten sollte.

FAQ

Ist sb_publishable_ dasselbe wie der anon-Schlüssel?

Er hat dieselbe Aufgabe. Er benennt dein Projekt, damit eine Anfrage weiß, wohin sie gehört, er trägt selbst keine Rechte, und er ist dafür gedacht, in deiner App zu liegen, wo ihn jeder lesen kann. Was deine Daten in beiden Fällen schützt, ist Row Level Security, nicht der Schlüssel.

Funktionieren meine anon- und service_role-Schlüssel noch?

Ja, heute schon. Supabase hat sie während der Umstellung am Leben gelassen, und du kannst beide Paare gleichzeitig haben. Angekündigt ist, dass Ende 2026 alle Projekte auf die neuen Schlüssel wechseln müssen. Ein genaues Datum steht noch nicht fest.

Ich habe beide Paare im Dashboard. Welchen soll meine App benutzen?

Den öffentlichen, sb_publishable_. Der Wechsel ist eine Zeile: Tausche den Schlüssel, den deine App beim Erzeugen des Supabase-Clients übergibt. An deinen Tabellen und Policies ändert sich nichts, denn der neue Schlüssel hat genau die Rechte, die der anon-Schlüssel hatte.

Macht das neue Schlüsselformat meine App von selbst sicherer?

Nein. Es macht den gefährlichen Schlüssel leichter erkennbar, und das ist bare Münze in nicht gemachten Fehlern, aber ein öffentlicher Schlüssel liest weiterhin alles, was deine Policies erlauben. Ist Row Level Security aus, öffnet der neue Schlüssel deine Datenbank genauso weit wie der alte.

Geschrieben von

Vlad Tkachenko

Gründer, Reeve

Ich schaue mir den ganzen Tag Apps an, die mit Lovable, Bolt, v0, Cursor und Replit gebaut wurden, und die kurze Liste von Fehlern, die darin immer wieder auftauchen.

Mehr über den Autor

Weiterlesen

Unsicher, wie es um deine eigene App steht?

Starte einen kostenlosen Scan und erhalte in rund 20 Sekunden eine verständliche Note von A bis F. Ohne Konto, ohne Karte.

App kostenlos scannen

Automatisierte externe Prüfung, kein vollständiges Audit. Das Fehlen von Funden ist keine Garantie für Sicherheit.