[{"data":1,"prerenderedAt":420},["ShallowReactive",2],{"blog-de-supabase-new-api-keys":3},{"id":4,"title":5,"body":6,"category":383,"cover":384,"coverAlt":384,"description":385,"draft":386,"extension":387,"faq":388,"image":401,"keywords":402,"meta":408,"navigation":409,"ogTitle":410,"path":411,"published":412,"seo":413,"stem":414,"tldr":415,"updated":412,"__hash__":419},"blog_de\u002Fblog\u002Fsupabase-new-api-keys.md","Supabases neue API-Schlüssel: welcher gehört in deine App?",{"type":7,"value":8,"toc":372},"minimark",[9,30,33,38,49,79,87,94,100,104,107,113,118,122,125,211,218,226,230,233,268,271,280,284,293,319,328,332,359],[10,11,12,13,17,18,21,22,25,26,29],"p",{},"Wenn du kürzlich dein Supabase-Dashboard geöffnet und dort Schlüssel gefunden\nhast, die mit ",[14,15,16],"code",{},"sb_publishable_"," und ",[14,19,20],{},"sb_secret_"," beginnen, wo früher ",[14,23,24],{},"anon"," und\n",[14,27,28],{},"service_role"," standen: Es ist nichts kaputt. Supabase hat seine API-Schlüssel\numbenannt, und das Paar, das du kennst, ist auf dem Weg nach draußen.",[10,31,32],{},"Die Änderung ist klein in dem, was sie tut, und groß in dem, was sie verhindert.\nDie beiden Schlüssel erledigen weiterhin genau die zwei Aufgaben, die sie immer\nhatten. Neu ist, dass du jetzt ohne Umweg siehst, welcher welcher ist.",[34,35,37],"h2",{"id":36},"was-supabase-tatsächlich-geändert-hat","Was Supabase tatsächlich geändert hat",[10,39,40,41,48],{},"Supabase hat die neuen Schlüssel\n",[42,43,47],"a",{"href":44,"rel":45},"https:\u002F\u002Fsupabase.com\u002Fblog\u002Fjwt-signing-keys",[46],"nofollow","im Juli 2025 angekündigt",", zusammen\nmit einer Änderung daran, wie Anmeldetokens signiert werden. Zwei Dinge haben\nzwei Dinge ersetzt:",[50,51,52,68],"ul",{},[53,54,55,56,60,61,64,65,67],"li",{},"Der ",[57,58,59],"strong",{},"öffentliche"," Schlüssel, ",[14,62,63],{},"sb_publishable_…",", ersetzt den ",[14,66,24],{},"-Schlüssel.",[53,69,70,60,73,76,77,67],{},[57,71,72],{},"Geheime",[14,74,75],{},"sb_secret_…",", ersetzen den ",[14,78,28],{},[10,80,81,82,86],{},"An den Rechten ändert sich nichts. Ein öffentlicher Schlüssel benennt weiterhin\nnur dein Projekt und trägt keine eigenen Rechte; ein geheimer umgeht weiterhin\njede Regel, die du geschrieben hast. Wenn du schon weißt,\n",[42,83,85],{"href":84},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","welche Schlüssel im Frontend sicher sind",",\nist an diesem Wissen nichts falsch geworden.",[10,88,89,90,93],{},"Zwei praktische Unterschiede lohnen sich zu kennen. Du kannst ",[57,91,92],{},"mehrere"," geheime\nSchlüssel gleichzeitig haben und sie einzeln widerrufen. Rotieren bedeutet also\nnicht mehr einen Moment, in dem alles kaputt ist, was den Schlüssel benutzt hat.\nUnd die alten Schlüssel hatten eine Eigenschaft, die kaum jemandem auffiel: Sie\nwaren JWTs, die zehn Jahre nach dem Anlegen des Projekts ablaufen. Die neuen\ntragen kein Ablaufdatum in sich.",[95,96],"diagram",{"alt":97,"caption":98,"src":99},"Zwei Schlüssel untereinander. Der ältere besteht aus drei durch Punkte getrennten Blöcken, wobei der mittlere aufgeklappt ist und das Wort role zeigt. Der neuere ist eine einzige Zeichenkette, deren erstes Wort sb Unterstrich secret vorne hervorgehoben ist.","Dieselben zwei Aufgaben, zwei verschiedene Formen. Im alten Paar steckt die Rolle in der Mitte, im neuen ist sie das Erste, was du liest.","\u002Fblog\u002Fsupabase-new-api-keys\u002Ftwo-key-formats-1600x640.png",[34,101,103],{"id":102},"welcher-der-beiden-in-deine-app-gehört","Welcher der beiden in deine App gehört",[10,105,106],{},"Der öffentliche, und nur der öffentliche.",[10,108,109,110,112],{},"Deine App läuft im Browser deiner Besucherin, und die Anfrage an deine Datenbank\ngeht von dort los. Sie muss sagen, zu welchem Projekt sie gehört, und diese\nKennung erreicht jede Besucherin, so ist es gedacht. ",[14,111,63],{}," ist der\nSchlüssel, der genau dafür gebaut ist: Ihn in deiner App zu finden ist kein\nBefund, und war es nie.",[10,114,115,117],{},[14,116,75],{}," ist das Gegenteil. Er liest und schreibt jede Zeile in jeder\nTabelle, von überall, und ignoriert deine Policies vollständig. Das ist sein\nganzer Zweck. Er gehört auf einen Server, in eine Edge Function, in einen\nWorker: nirgendwohin, wo ein Browser hinkommt. Ist einer je in Frontend-Code\ngelandet, tausche ihn im Dashboard aus, bevor du sonst etwas änderst. Die Zeile\nzu löschen schließt die Tür nicht.",[34,119,121],{"id":120},"so-erkennst-du-welche-sorte-du-hast","So erkennst du, welche Sorte du hast",[10,123,124],{},"Lies die ersten Zeichen. Das ist inzwischen die ganze Prüfung.",[126,127,128,144],"table",{},[129,130,131],"thead",{},[132,133,134,138,141],"tr",{},[135,136,137],"th",{},"Was du siehst",[135,139,140],{},"Was es ist",[135,142,143],{},"Im Browser sicher?",[145,146,147,164,179,196],"tbody",{},[132,148,149,154,157],{},[150,151,152],"td",{},[14,153,63],{},[150,155,156],{},"aktueller öffentlicher Schlüssel",[150,158,159],{},[160,161,163],"key-verdict",{"type":162},"safe","Gehört hierhin",[132,165,166,170,173],{},[150,167,168],{},[14,169,75],{},[150,171,172],{},"aktueller geheimer Schlüssel",[150,174,175],{},[160,176,178],{"type":177},"danger","Niemals",[132,180,181,189,192],{},[150,182,183,186,187],{},[14,184,185],{},"eyJ…"," mit ",[14,188,24],{},[150,190,191],{},"alter öffentlicher Schlüssel",[150,193,194],{},[160,195,163],{"type":162},[132,197,198,204,207],{},[150,199,200,186,202],{},[14,201,185],{},[14,203,28],{},[150,205,206],{},"alter geheimer Schlüssel",[150,208,209],{},[160,210,178],{"type":177},[10,212,213,214,217],{},"Ein aktueller Schlüssel ist eine lange Zeichenkette aus zwei Hälften: einer\nzufälligen Mitte und einer kurzen Prüfsumme am Ende. Ein alter Schlüssel besteht\naus drei durch Punkte getrennten Blöcken, und der mittlere ist lesbarer Text\nstatt Verschlüsselung. Deshalb hieß es beim alten Paar, ihn zu dekodieren und\ndas Feld ",[14,215,216],{},"role"," zu lesen.",[10,219,220,221,225],{},"Wenn du einen Schlüssel in deiner App findest und nicht weißt, welcher es ist:\nUnser kostenloser Scan liest deine Live-Seite von außen und benennt, was er\nsehen kann. Das dauert etwa 20 Sekunden und braucht kein Konto:\n",[42,222,224],{"href":223},"\u002F#scan","App scannen",".",[34,227,229],{"id":228},"funktionieren-meine-alten-anon-und-service_role-schlüssel-noch","Funktionieren meine alten anon- und service_role-Schlüssel noch?",[10,231,232],{},"Heute ja. Supabase hat einen Zeitplan veröffentlicht, keinen Ausschalter:",[126,234,235,245],{},[129,236,237],{},[132,238,239,242],{},[135,240,241],{},"Wann",[135,243,244],{},"Was passiert",[145,246,247,260],{},[132,248,249,252],{},[150,250,251],{},"1. November 2025",[150,253,254,255,17,257,259],{},"Nach diesem Datum wiederhergestellte Projekte bekommen ",[14,256,24],{},[14,258,28],{}," gar nicht mehr.",[132,261,262,265],{},[150,263,264],{},"Ende 2026, Datum offen",[150,266,267],{},"Alle Projekte müssen die neuen Schlüssel verwenden.",[10,269,270],{},"Es gibt also diese Woche keinen Notfall, und es gibt dieses Jahr eine Frist.\nWenn deine App vor der Umbenennung gebaut und seither nicht angefasst wurde,\nläuft sie gerade auf alten Schlüsseln und wird das noch eine Weile tun.",[10,272,273,274,276,277,279],{},"Das Argument für einen frühen Wechsel ist nicht die Frist. Es ist der Tag, an\ndem jemand den falschen Schlüssel in einen Prompt einfügt: ",[14,275,20],{}," sagt\nlaut, was es ist, ",[14,278,185],{}," nicht.",[34,281,283],{"id":282},"so-wechselst-du-ohne-deine-app-zu-zerlegen","So wechselst du, ohne deine App zu zerlegen",[10,285,286,287,292],{},"Supabases eigene\n",[42,288,291],{"href":289,"rel":290},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fgetting-started\u002Fmigrating-to-new-api-keys",[46],"Migrationsanleitung","\nist die Referenz. Die Kurzfassung für eine App, die du nicht von Hand\ngeschrieben hast:",[294,295,296,303,306,313,316],"ol",{},[53,297,298,299,302],{},"Öffne im Dashboard ",[57,300,301],{},"Settings → API Keys"," und erzeuge die neuen Schlüssel.\nDas legt sie zusätzlich an; die alten verschwinden nicht, und beide Paare\nfunktionieren gleichzeitig.",[53,304,305],{},"Finde die Stelle, an der deine App ihren Supabase-Client erzeugt, und ersetze\nden öffentlichen Schlüssel. In einem Builder wie Lovable oder Bolt ist das\nmeist ein Wert in den Projekteinstellungen statt einer Codezeile.",[53,307,308,309,312],{},"Ersetze den geheimen Schlüssel überall, wo er ",[57,310,311],{},"auf einem Server"," benutzt\nwird: Edge Functions, Webhooks, geplante Jobs, alles, was nicht der Browser\nist.",[53,314,315],{},"Lade deine App und klick dich durch die Stellen, die Daten lesen und\nschreiben. Ein falscher öffentlicher Schlüssel scheitert sofort und laut, und\ndas ist der gute Fall.",[53,317,318],{},"Erst wenn alles läuft, schalte die alten Schlüssel ab.",[10,320,321,322,324,325,327],{},"Schritt 5 gehört ans Ende, und man sollte ihn bewusst gehen statt nie: Halb\nmigrierte Projekte, in denen die App noch einen alten ",[14,323,24],{},"-Schlüssel neben\neinem aktiven ",[14,326,16],{}," trägt, sind häufig und im Fehlerfall\nverwirrend.",[34,329,331],{"id":330},"was-diese-woche-zu-tun-ist","Was diese Woche zu tun ist",[333,334,335],"key-takeaways",{},[50,336,337,340,349,352],{},[53,338,339],{},"Öffne Settings → API Keys und sieh nach, welche Paare dein Projekt hat. Das dauert eine Minute und sagt dir, wo du stehst.",[53,341,342,343,345,346,348],{},"Findest du ",[14,344,75],{}," oder ",[14,347,28],{}," irgendwo im Frontend-Code, tausche den Schlüssel noch heute aus. Das ist der einzige Punkt hier, der dringend ist.",[53,350,351],{},"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.",[53,353,354,355,225],{},"Sieh dir bei der Gelegenheit Row Level Security an. Der neue Schlüssel ändert nichts daran, was deine Policies erlauben, und ",[42,356,358],{"href":357},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","RLS anzuschalten ist nicht dasselbe wie geschützt zu sein",[10,360,361,362,366,367,371],{},"Wenn du die plattformspezifische Fassung möchtest, was zu prüfen ist: Wir haben\neine verständliche Anleitung für ",[42,363,365],{"href":364},"\u002Fis-your-supabase-app-safe","Supabase-Apps",",\nund die ",[42,368,370],{"href":369},"\u002Fchecklist","Sicherheits-Checkliste in 10 Minuten"," deckt diesen Punkt\nneben den anderen Dingen ab, die man in einer frisch veröffentlichten App\nabschalten sollte.",{"title":373,"searchDepth":374,"depth":374,"links":375},"",3,[376,378,379,380,381,382],{"id":36,"depth":377,"text":37},2,{"id":102,"depth":377,"text":103},{"id":120,"depth":377,"text":121},{"id":228,"depth":377,"text":229},{"id":282,"depth":377,"text":283},{"id":330,"depth":377,"text":331},"Sicherheitsgrundlagen",null,"Supabase hat anon und service_role durch öffentliche und geheime Schlüssel ersetzt. Welcher gehört in deine App, und welcher nie?",false,"md",[389,392,395,398],{"q":390,"a":391},"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.",{"q":393,"a":394},"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.",{"q":396,"a":397},"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.",{"q":399,"a":400},"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.","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",[403,404,405,406,407],"supabase neue api-schlüssel","sb_publishable key","sb_secret key","supabase anon key veraltet","supabase api-schlüssel migration",{},true,"Supabases neue API-Schlüssel, erklärt","\u002Fblog\u002Fsupabase-new-api-keys","2026-08-12",{"title":5,"description":385},"blog\u002Fsupabase-new-api-keys",[416,417,418],"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.","xEoo8TxI1FknGfX52fZshaWwfQb2vcrMu8m7UyTC22k",1787826048205]