Tajni API ključ u Expo aplikaciji: što zaštititi
Autor: Mehdi Azizi
Ažurirano , 7 min
Javni Supabase ključ, serverska tajna, Expo varijable: razlikuj što smije u iPhone aplikaciju i testiraj pristup s dva računa.
Varijabla okruženja nije nužno tajna
U Expo aplikaciji varijabla s prefiksom EXPO_PUBLIC_ namijenjena je kodu aplikacije. U njoj ne smije biti serverska tajna. Expo objašnjava da se te vrijednosti ugrađuju u kompajlirani JavaScript i da ih korisnici aplikacije mogu pročitati. Dakle, premjestiti ključ u datoteku .env nije dovoljno da ga zaštitiš. Izvor: Expo varijable okruženja.
Prije nego što zamoliš AI da „spoji API”, razvrstaj što mu daješ: adresu servisa, ključ koji je predviđen da bude javan ili ključ koji dopušta privilegirane radnje. O tom razvrstavanju ovisi gdje se kod mora izvršavati.
Sljedeća tablica je okvir za dizajn, a ne revizija tvoje aplikacije.
| Element | Gdje ga staviti | Što provjeriti |
|---|---|---|
| Javna adresa backenda | Konfiguracija aplikacije | Pokazuje na pravo okruženje. |
| Supabase publishable ključ ili stari anon ključ | Aplikacija, ako su dozvole ispravno postavljene | Pravila nad podacima stvarno blokiraju pristup računu drugog korisnika. |
| Supabase secret ili service_role ključ | Samo server | Ne pojavljuje se ni u mobilnom bundleu ni u logovima dostupnima klijentu. |
| Tajni ključ AI pružatelja | Samo server | Aplikacija zove tvoj server, koji provjerava korisnika i limite prije poziva pružatelju. |
Supabase razlikuje ključeve namijenjene klijentima od tajnih ključeva za pouzdana okruženja. Javni ključ identificira projekt; on ne zamjenjuje dozvole nad podacima. Izvor: Supabase API ključevi.
Primjer: izmišljena aplikacija za dnevnik čitanja
Zamisli aplikaciju u kojoj Lea i Sami bilježe svoje knjige i privatne bilješke. Ovaj primjer služi za pripremu testova; ne opisuje rezultate dobivene na nekoj Devoria aplikaciji.
Normalan tok izgleda ispravno: Lea se prijavi i vidi svoje bilješke. Ali to još ne odgovara na važno pitanje: odbija li server Lein zahtjev za Samijevu bilješku?
Filtar u sučelju, poput „prikaži bilješke prijavljenog korisnika”, poboljšava prikaz. No autorizacija se mora primijeniti i na razini podataka. U Supabaseu pravila Row Level Security omogućuju da ograničiš dostupne retke prema sesiji. Supabase preporučuje da ih uključiš za tablice izložene preko API-ja i objašnjava pravila za čitanje i pisanje. Izvor: Row Level Security.
Za svoj testni projekt poveži svaku bilješku s njezinim vlasnikom i zasebno definiraj tko je smije čitati, stvarati, mijenjati i brisati. Provjeri i datoteke: to što je redak u bazi zaštićen ne dokazuje da je slika privatna.
Test koji trebaš provesti s dva testna računa
Pripremi dva računa koje kontroliraš, s različitom knjigom u svakom i kratkom bilješkom koju ćeš lako prepoznati. Koristi izmišljene podatke u testnom okruženju u kojem to smiješ.
- Pročitaj svoju bilješku. Račun A vidi bilješku A.
- Pročitaj B-ovu bilješku s računa A. Zahtjev ne otkriva njezin privatni sadržaj.
- Izmijeni B-ovu bilješku s računa A. Server odbija; bilješka B ostaje nepromijenjena.
- Stvori zapis u ime B-a s računa A. Server odbija tu dodjelu.
- Čitaj bez sesije. Ne vraća se nikakav privatni sadržaj.
- Otvori B-ovu privatnu datoteku s računa A. Datoteka nije dostupna.
Zapiši stvarni rezultat, testiranu verziju i eventualnu grešku. „Pravila su uključena” nije rezultat testa. Predložak za testiranje u resursima može ti poslužiti kao osnova za čuvanje tih dokaza.
Plaćeni poziv neka ide preko tvog servera
Za funkciju koja sažima knjigu pomoću AI API-ja tok može biti: aplikacija → tvoj server → pružatelj → tvoj server → aplikacija. Tajni ključ ostaje na serveru. Ta arhitektura sama nije dovoljna: i pristup serveru mora biti kontroliran.
U izmišljenom primjeru server mora, među ostalim, provjeriti sesiju, provjeriti da knjiga pripada toj osobi, ograničiti ponovljene zahtjeve i vratiti razumljivu grešku ako pružatelj ne odgovara. Klijent ne odlučuje sam da korisnik ima plaćeni pristup.
Pripremi četiri testa: neprijavljen korisnik, knjiga drugog računa, dosegnut limit i nedostupan pružatelj. Zadnji ti omogućuje da provjeriš izlazi li aplikacija iz stanja učitavanja bez gubitka unosa.
Što možeš tražiti od svog asistenta za kod
Evo uputa za pregled koje prilagodiš svom repozitoriju, bez lijepljenja tajnih vrijednosti:
Popiši varijable koje koriste mobilni kod i server, prikazujući samo njihova imena. Identificiraj privilegirane pozive na strani klijenta. Za privatne podatke opiši kontrole čitanja i pisanja, zatim predloži test s dva testna računa. Ne radi nikakvu rotaciju ključeva ni promjene u produkciji bez odobrenja.
Odgovor čitaj uz odgovarajući kod. Asistent može uočiti nedosljednost; njegov odgovor ne zamjenjuje izvršavanje testova. Vodič napravi aplikaciju s Claude Code objašnjava kako podijeliti taj posao.
Prije nego što nastaviš s aplikacijom
Moraš jednostavno znati objasniti tri stvari: koje su vrijednosti javne, koje operacije idu preko servera i koji testovi pokazuju da jedan račun ne vidi podatke drugoga. Ako ti je nešto od toga nejasno, razjasni to prije dodavanja novih funkcija.
Stranica napravi iPhone aplikaciju smješta ovaj korak u cijeli projekt. Da napreduješ redom, iOS Kit nudi put u četiri koraka i Starter Code koji već uključuje račune i AI. Ako više ne znaš od kojeg koraka nastaviti, besplatna dijagnostika posložit će tvoj projekt i poslati ti moju checklistu protiv Appleovih odbijanja.
Česta pitanja
Gdje staviti tajni API ključ u Expo aplikaciji?
Na svoj server, nikad u aplikaciju. Supabase secret ili service_role ključ, kao i tajni ključ AI pružatelja, mora ostati samo na serveru. Aplikacija zove tvoj server, koji provjerava korisnika i limite prije poziva pružatelju. Provjeri da se nijedan od tih ključeva ne pojavljuje ni u mobilnom bundleu ni u logovima dostupnima klijentu.
Štiti li datoteka .env moj API ključ u Expou?
Ne sama po sebi. Varijabla s prefiksom EXPO_PUBLIC_ namijenjena je kodu aplikacije i u njoj ne smije biti serverska tajna. Expo objašnjava da se te vrijednosti ugrađuju u kompajlirani JavaScript i da ih korisnici aplikacije mogu pročitati. Dakle, premjestiti ključ u datoteku .env nije dovoljno da ga zaštitiš.
Koja je razlika između javnog i tajnog API ključa?
Javni ključ predviđen je za isporuku u aplikaciji: identificira projekt, ali ne zamjenjuje dozvole nad podacima. Tajni ključ dopušta privilegirane radnje i rezerviran je za pouzdana okruženja. Kod Supabasea publishable ključ, ili stari anon ključ, može ostati u aplikaciji ako su dozvole ispravno postavljene. Secret i service_role ključevi ostaju na serveru.
Kako pozvati AI API iz Expo aplikacije bez otkrivanja ključa?
Neka poziv ide preko tvog servera: aplikacija zove server, koji zove pružatelja i zatim vraća odgovor aplikaciji. Tajni ključ ostaje na serveru. Server mora i provjeriti sesiju, ograničiti ponovljene zahtjeve i vratiti razumljivu grešku ako pružatelj ne odgovara. Klijent ne odlučuje sam da korisnik ima plaćeni pristup.
Kako provjeriti da svaki korisnik vidi samo svoje podatke?
Pripremi dva testna računa koje kontroliraš, s prepoznatljivom bilješkom u svakom. S računa A pokušaj čitati, mijenjati i stvarati zapise u ime računa B, pa otvoriti B-ovu privatnu datoteku. Napravi i testove bez sesije: svaki zahtjev mora biti odbijen ili ne smije ništa otkriti. Zapiši stvarni rezultat, jer „pravila su uključena” nije rezultat testa.
Kako zatražiti od AI-ja da provjeri ključeve moje aplikacije?
Traži da popiše varijable mobilnog koda i servera, prikazujući samo njihova imena, bez lijepljenja tvojih tajnih vrijednosti. Traži i da identificira privilegirane pozive na strani klijenta te predloži test s dva testna računa. Zabrani svaku rotaciju ključeva ili promjenu u produkciji bez odobrenja. Njegov odgovor ne zamjenjuje izvršavanje testova.