[{"data":1,"prerenderedAt":416},["ShallowReactive",2],{"blog-uk-supabase-new-api-keys":3},{"id":4,"title":5,"body":6,"category":379,"cover":380,"coverAlt":380,"description":381,"draft":382,"extension":383,"faq":384,"image":397,"keywords":398,"meta":404,"navigation":405,"ogTitle":406,"path":407,"published":408,"seo":409,"stem":410,"tldr":411,"updated":408,"__hash__":415},"blog_uk\u002Fblog\u002Fsupabase-new-api-keys.md","Нові API-ключі Supabase: який із них безпечний у застосунку?",{"type":7,"value":8,"toc":368},"minimark",[9,29,32,37,48,78,86,93,99,103,106,112,117,121,124,210,216,223,227,230,264,267,276,280,289,315,324,328,355],[10,11,12,13,17,18,21,22,17,25,28],"p",{},"Якщо ви нещодавно відкрили панель Supabase і побачили ключі, що починаються з\n",[14,15,16],"code",{},"sb_publishable_"," і ",[14,19,20],{},"sb_secret_",", там, де раніше були ",[14,23,24],{},"anon",[14,26,27],{},"service_role",",\nто нічого не зламалося. Supabase перейменував свої API-ключі, і знайома вам пара\nпоступово йде.",[10,30,31],{},"Зміна невелика в тому, що вона робить, і велика в тому, що вона запобігає. Обидва\nключі й далі виконують рівно ті самі дві ролі. Нове те, що тепер ви бачите, який\nіз них який, нічого не відкриваючи.",[33,34,36],"h2",{"id":35},"що-supabase-змінив-насправді","Що Supabase змінив насправді",[10,38,39,40,47],{},"Supabase ",[41,42,46],"a",{"href":43,"rel":44},"https:\u002F\u002Fsupabase.com\u002Fblog\u002Fjwt-signing-keys",[45],"nofollow","оголосив нові ключі в липні 2025 року","\nразом зі зміною того, як він підписує токени входу. Дві речі замінили дві речі:",[49,50,51,66],"ul",{},[52,53,54,58,59,62,63,65],"li",{},[55,56,57],"strong",{},"Публічний"," ключ, ",[14,60,61],{},"sb_publishable_…",", заступає ключ ",[14,64,24],{},".",[52,67,68,71,72,75,76,65],{},[55,69,70],{},"Секретні"," ключі, ",[14,73,74],{},"sb_secret_…",", заступають ключ ",[14,77,27],{},[10,79,80,81,85],{},"Права не змінилися. Публічний ключ і далі лише називає ваш проєкт і не має\nвласних прав; секретний і далі обходить кожне написане вами правило. Якщо ви вже\nзнаєте, ",[41,82,84],{"href":83},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","які ключі безпечні у фронтенді",",\nжодна частина цього знання не стала хибною.",[10,87,88,89,92],{},"Дві практичні відмінності варто знати. Ви можете мати ",[55,90,91],{},"кілька"," секретних ключів\nодночасно й відкликати їх по одному, тож заміна ключа більше не означає момент,\nколи ламається все, що ним користувалося. А старі ключі мали властивість, якої\nмайже ніхто не помічав: це були JWT, що спливають за десять років після створення\nпроєкту. Нові не несуть терміну придатності всередині.",[94,95],"diagram",{"alt":96,"caption":97,"src":98},"Два ключі, намальовані один над одним. Старіший складається з трьох блоків, розділених крапками, і середній блок розкрито, щоб показати слово role. Новіший складається з одного рядка, у якого спереду виділено перше слово sb підкреслення secret.","Ті самі дві ролі, дві різні форми. У старій парі роль захована посередині; у новій це перше, що ви читаєте.","\u002Fblog\u002Fsupabase-new-api-keys\u002Ftwo-key-formats-1600x640.png",[33,100,102],{"id":101},"який-із-двох-має-бути-у-вашому-застосунку","Який із двох має бути у вашому застосунку",[10,104,105],{},"Публічний, і лише публічний.",[10,107,108,109,111],{},"Ваш застосунок працює в браузері відвідувача, і запит до бази йде звідти. Він\nмає сказати, до якого проєкту належить, і цей ідентифікатор доходить до кожного\nвідвідувача за задумом. ",[14,110,61],{}," і є ключем, зробленим саме для цього:\nзнайти його у застосунку не є знахідкою, і ніколи не було.",[10,113,114,116],{},[14,115,74],{}," робить протилежне. Він читає і змінює кожен рядок у кожній таблиці\nзвідки завгодно, повністю ігноруючи ваші політики, і в цьому весь його сенс. Його\nмісце на сервері, в edge-функції, у воркері: ніде, куди дістає браузер. Якщо такий ключ\nколись потрапляв у код фронтенду, замініть його в панелі, перш ніж правити щось\nінше, бо видалення рядка двері не зачиняє.",[33,118,120],{"id":119},"як-зрозуміти-який-ключ-у-вас","Як зрозуміти, який ключ у вас",[10,122,123],{},"Прочитайте перші символи. Тепер уся перевірка в цьому.",[125,126,127,143],"table",{},[128,129,130],"thead",{},[131,132,133,137,140],"tr",{},[134,135,136],"th",{},"Що ви бачите",[134,138,139],{},"Що це",[134,141,142],{},"Безпечний у браузері?",[144,145,146,163,178,195],"tbody",{},[131,147,148,153,156],{},[149,150,151],"td",{},[14,152,61],{},[149,154,155],{},"сучасний публічний ключ",[149,157,158],{},[159,160,162],"key-verdict",{"type":161},"safe","Тут доречно",[131,164,165,169,172],{},[149,166,167],{},[14,168,74],{},[149,170,171],{},"сучасний секретний ключ",[149,173,174],{},[159,175,177],{"type":176},"danger","Ніколи",[131,179,180,188,191],{},[149,181,182,185,186],{},[14,183,184],{},"eyJ…"," з ",[14,187,24],{},[149,189,190],{},"старий публічний ключ",[149,192,193],{},[159,194,162],{"type":161},[131,196,197,203,206],{},[149,198,199,185,201],{},[14,200,184],{},[14,202,27],{},[149,204,205],{},"старий секретний ключ",[149,207,208],{},[159,209,177],{"type":176},[10,211,212,213,65],{},"Сучасний ключ виглядає як один довгий рядок із двох половин: випадкової середини\nй короткої контрольної суми в кінці. Старий ключ складається з трьох блоків,\nрозділених крапками, і середній блок є читабельним текстом, а не шифром. Саме тому\nрозрізнити стару пару означало розкодувати її та прочитати поле ",[14,214,215],{},"role",[10,217,218,219,65],{},"Якщо ви знайшли ключ у застосунку і не розумієте, який це, наше безкоштовне\nсканування читає ваш живий сайт ззовні й називає те, що бачить. Це триває\nприблизно 20 секунд і не потребує акаунта: ",[41,220,222],{"href":221},"\u002F#scan","сканувати застосунок",[33,224,226],{"id":225},"чи-працюють-іще-мої-старі-ключі-anon-і-service_role","Чи працюють іще мої старі ключі anon і service_role?",[10,228,229],{},"Сьогодні так. Supabase опублікував розклад, а не вимикач:",[125,231,232,242],{},[128,233,234],{},[131,235,236,239],{},[134,237,238],{},"Коли",[134,240,241],{},"Що відбувається",[144,243,244,256],{},[131,245,246,249],{},[149,247,248],{},"1 листопада 2025",[149,250,251,252,17,254,65],{},"Проєкти, відновлені після цієї дати, взагалі не отримують ",[14,253,24],{},[14,255,27],{},[131,257,258,261],{},[149,259,260],{},"Кінець 2026, дата не названа",[149,262,263],{},"Усі проєкти муситимуть користуватися новими ключами.",[10,265,266],{},"Тож цього тижня надзвичайної ситуації немає, а цього року є термін. Якщо ваш\nзастосунок зробили до перейменування й відтоді не чіпали, він зараз працює на\nстарих ключах і працюватиме ще якийсь час.",[10,268,269,270,272,273,275],{},"Аргумент рухатися раніше полягає не в терміні. Це той день, коли хтось вставить\nне той ключ у промпт: ",[14,271,20],{}," заявляє про себе, а ",[14,274,184],{}," мовчить.",[33,277,279],{"id":278},"як-перейти-не-зламавши-застосунок","Як перейти, не зламавши застосунок",[10,281,282,283,288],{},"Власний ",[41,284,287],{"href":285,"rel":286},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fgetting-started\u002Fmigrating-to-new-api-keys",[45],"посібник з міграції","\nSupabase лишається орієнтиром. Коротка версія для застосунку, який ви не писали руками:",[290,291,292,299,302,309,312],"ol",{},[52,293,294,295,298],{},"У панелі відкрийте ",[55,296,297],{},"Settings → API Keys"," і створіть нові ключі. Це додає їх;\nстарі нікуди не зникають, і обидві пари працюють одночасно.",[52,300,301],{},"Знайдіть місце, де ваш застосунок створює клієнт Supabase, і замініть\nпублічний ключ. У білдері на кшталт Lovable чи Bolt це зазвичай одне значення\nв налаштуваннях проєкту, а не рядок коду.",[52,303,304,305,308],{},"Замініть секретний ключ усюди, де він використовується ",[55,306,307],{},"на сервері",":\nedge-функції, вебхуки, заплановані завдання і все інше, що не є браузером.",[52,310,311],{},"Відкрийте застосунок і пройдіть місцями, які читають і записують дані. Хибний\nпублічний ключ падає одразу й голосно, і це хороший випадок.",[52,313,314],{},"І лише коли все працює, вимикайте старі ключі.",[10,316,317,318,320,321,323],{},"П'ятий крок варто лишити наостанок і зробити його свідомо, а не ніколи:\nнапівмігровані проєкти, де застосунок досі несе старий ключ ",[14,319,24],{}," поруч із живим\n",[14,322,16],{},", трапляються часто і плутають, коли щось іде не так.",[33,325,327],{"id":326},"що-зробити-цього-тижня","Що зробити цього тижня",[329,330,331],"key-takeaways",{},[49,332,333,336,345,348],{},[52,334,335],{},"Відкрийте Settings → API Keys і подивіться, які пари є у вашому проєкті. Це хвилина, і ви вже знаєте, де стоїте.",[52,337,338,339,341,342,344],{},"Якщо знайдете ",[14,340,74],{}," або ",[14,343,27],{}," будь-де в коді фронтенду, замініть ключ сьогодні. Це єдиний терміновий пункт у цьому списку.",[52,346,347],{},"Створіть нові ключі й переведіть застосунок, коли матимете півгодини, не через термін, а тому що префікс робить наступну помилку очевидною.",[52,349,350,351,65],{},"Заразом перевірте Row Level Security. Новий ключ нічого не змінює в тому, що дозволяють ваші політики, а ",[41,352,354],{"href":353},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","увімкнути RLS не означає бути захищеним",[10,356,357,358,362,363,367],{},"Якщо потрібна версія для конкретної платформи, у нас є зрозумілий розбір для\n",[41,359,361],{"href":360},"\u002Fis-your-supabase-app-safe","застосунків на Supabase",", а\n",[41,364,366],{"href":365},"\u002Fchecklist","10-хвилинний чекліст безпеки"," охоплює цей пункт поряд з рештою\nречей, які варто вимкнути у щойно запущеному застосунку.",{"title":369,"searchDepth":370,"depth":370,"links":371},"",3,[372,374,375,376,377,378],{"id":35,"depth":373,"text":36},2,{"id":101,"depth":373,"text":102},{"id":119,"depth":373,"text":120},{"id":225,"depth":373,"text":226},{"id":278,"depth":373,"text":279},{"id":326,"depth":373,"text":327},"Основи безпеки",null,"Supabase замінив anon і service_role публічними та секретними ключами. Який із них має бути у вашому застосунку, а який не має бути ніколи?",false,"md",[385,388,391,394],{"q":386,"a":387},"Чи sb_publishable_ – це те саме, що ключ anon?","Він виконує ту саму роботу. Він називає ваш проєкт, щоб запит знав, куди йти, не має власних прав і призначений жити у вашому застосунку, де його може прочитати будь-хто. В обох випадках ваші дані захищає Row Level Security, а не ключ.",{"q":389,"a":390},"Чи працюють ще мої ключі anon і service_role?","Так, сьогодні. Supabase лишив їх робочими на час міграції, і ви можете мати обидві пари водночас. Оголошено, що наприкінці 2026 року всім проєктам доведеться перейти на нові ключі, але точної дати ще немає.",{"q":392,"a":393},"У панелі є обидві пари. Який має використовувати мій застосунок?","Публічний, sb_publishable_. Заміна займає один рядок: підставте інший ключ там, де застосунок створює клієнт Supabase. Ні таблиці, ні політики змінювати не треба, бо новий ключ має рівно ті самі права, що мав anon.",{"q":395,"a":396},"Чи новий формат сам собою робить застосунок безпечнішим?","Ні. Він робить небезпечний ключ помітним, і це реальна вартість у ненароблених помилках, але публічний ключ і далі читає все, що дозволяють ваші політики. Якщо Row Level Security вимкнено, новий ключ відкриває вашу базу рівно так само широко, як відкривав старий.","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",[399,400,401,402,403],"нові api-ключі supabase","ключ sb_publishable","ключ sb_secret","ключ anon supabase застарілий","міграція api-ключів supabase",{},true,"Нові API-ключі Supabase: пояснення","\u002Fblog\u002Fsupabase-new-api-keys","2026-08-12",{"title":5,"description":381},"blog\u002Fsupabase-new-api-keys",[412,413,414],"Supabase тепер видає ключі sb_publishable_ і sb_secret_. Вони заступають anon і service_role і виконують ті самі дві ролі.","Публічний ключ має бути у вашому застосунку. Секретний не має бути там ніколи, і тепер ви розрізняєте їх за першими символами.","Ваші старі ключі сьогодні ще працюють. Supabase оголосив, що наприкінці 2026 року всі проєкти муситимуть від них відмовитися.","k_sUas6XhXfyTEtvwec_fu0j9JWews-IxR-5Vy93TS4",1787826051159]