Salainen API-avain Expo-sovelluksessa: mitä suojata?
Kirjoittaja: Mehdi Azizi
Päivitetty , 7 min
Supabasen julkinen avain, palvelinsalaisuus, Expo-muuttujat: erota, mitä iPhone-sovellukseen saa laittaa, ja testaa pääsy kahdella tilillä.
Ympäristömuuttuja ei välttämättä ole salaisuus
Expo-sovelluksessa EXPO_PUBLIC_-etuliitteellinen muuttuja on tarkoitettu sovelluksen koodille. Siihen ei saa laittaa palvelimen salaisuutta. Expon mukaan nämä arvot upotetaan käännettyyn JavaScriptiin, ja sovelluksen käyttäjät voivat lukea ne. Avaimen siirtäminen .env-tiedostoon ei siis riitä suojaamaan sitä. Lähde: Expon ympäristömuuttujat.
Ennen kuin pyydät tekoälyä "kytkemään API:n", luokittele, mitä sille annat: palvelun osoite, julkiseksi tarkoitettu avain vai avain, joka sallii etuoikeutettuja toimintoja. Tämä luokittelu ratkaisee, missä koodin pitää ajautua.
Alla oleva taulukko on suunnittelun apuväline, ei sovelluksesi auditointi.
| Elementti | Mihin se kuuluu | Mitä tarkistaa |
|---|---|---|
| Backendin julkinen osoite | Sovelluksen asetukset | Se osoittaa oikeaan ympäristöön. |
| Supabasen publishable-avain tai vanha anon-avain | Sovellukseen, jos oikeudet on määritetty oikein | Datasäännöt oikeasti estävät pääsyn toisen käyttäjän tiliin. |
| Supabasen secret- tai service_role-avain | Vain palvelimelle | Se ei näy mobiilibundlessa eikä asiakkaan nähtävissä lokeissa. |
| Tekoälypalvelun salainen avain | Vain palvelimelle | Sovellus kutsuu palvelintasi, joka tarkistaa käyttäjän ja rajat ennen palveluntarjoajaa. |
Supabase erottaa asiakkaille tarkoitetut avaimet luotettuihin ympäristöihin tarkoitetuista salaisista avaimista. Julkinen avain tunnistaa projektin, mutta se ei korvaa datan käyttöoikeuksia. Lähde: Supabasen API-avaimet.
Esimerkki: kuvitteellinen lukupäiväkirjasovellus
Kuvitellaan sovellus, johon Léa ja Sami tallentavat kirjansa ja yksityiset muistiinpanonsa. Esimerkki on testien valmistelua varten. Se ei kuvaa Devorian sovelluksesta saatuja tuloksia.
Normaali käyttöpolku näyttää toimivan: Léa kirjautuu ja näkee omat muistiinpanonsa. Tärkeään kysymykseen se ei kuitenkaan vielä vastaa: hylkääkö palvelin Léan pyynnön, joka kohdistuu Samin muistiinpanoon?
Käyttöliittymän suodatin, kuten "näytä kirjautuneen käyttäjän muistiinpanot", parantaa näkymää. Oikeudet pitää silti valvoa myös datan puolella. Supabasessa Row Level Security -säännöillä voi rajata, mitkä rivit istunto näkee. Supabase suosittelee niiden käyttöönottoa API:n kautta näkyvissä tauluissa ja selittää luku- ja kirjoituskäytännöt. Lähde: Row Level Security.
Omassa testiprojektissasi liitä jokainen muistiinpano omistajaansa ja määritä erikseen, kuka voi lukea, luoda, muokata ja poistaa sen. Tarkista myös tiedostot: tietokantarivin suojaaminen ei todista, että kuva on yksityinen.
Testisarja kahdella testitilillä
Valmistele kaksi hallitsemaasi tiliä, kumpaankin eri kirja ja pieni tunnistettava muistiinpano. Käytä kuvitteellista dataa sallitussa testiympäristössä.
- Lue oma muistiinpano. Tili A löytää muistiinpanon A.
- Lue B:n muistiinpano tililtä A. Pyyntö ei paljasta sen yksityistä sisältöä.
- Muokkaa B:n muistiinpanoa tililtä A. Palvelin hylkää pyynnön, ja muistiinpano B pysyy ennallaan.
- Luo B:n nimissä tililtä A. Palvelin hylkää tämän omistajuuden.
- Lue ilman istuntoa. Mitään yksityistä sisältöä ei palaudu.
- Avaa B:n yksityinen tiedosto tililtä A. Tiedostoon ei pääse.
Kirjaa todellinen tulos, testattu versio ja mahdollinen virhe. "Säännöt ovat päällä" ei ole testitulos. Resursseista löytyvää testipohjaa voi käyttää näiden todisteiden säilyttämiseen.
Ohjaa maksullinen kutsu palvelimesi kautta
Toiminnolle, joka tiivistää kirjan tekoäly-API:lla, polku voi olla: sovellus → palvelimesi → palveluntarjoaja → palvelimesi → sovellus. Salainen avain pysyy palvelimella. Arkkitehtuuri ei yksin riitä: myös pääsy palvelimelle pitää valvoa.
Kuvitteellisessa esimerkissä palvelimen pitää muun muassa tarkistaa istunto, varmistaa, että kirja kuuluu käyttäjälle, rajoittaa toistuvia pyyntöjä ja palauttaa ymmärrettävä virhe, jos palveluntarjoaja ei vastaa. Asiakas ei itse päätä, että käyttäjällä on maksullinen pääsy.
Valmistele neljä testiä: kirjautumaton käyttäjä, toisen tilin kirja, raja täynnä ja palveluntarjoaja ei saatavilla. Viimeisellä varmistat, että sovellus poistuu lataustilasta menettämättä syötettyä tekstiä.
Mitä voit pyytää koodiavustajaltasi
Tässä katselmointiohje, jota voit muokata repoosi sopivaksi. Älä liitä siihen salaisia arvojasi:
Listaa mobiilikoodin ja palvelimen käyttämät muuttujat, mutta näytä vain niiden nimet. Tunnista asiakaspuolella olevat etuoikeutetut kutsut. Kuvaa yksityisen datan luku- ja kirjoitustarkistukset ja ehdota sitten testisarja kahdella testitilillä. Älä kierrätä avaimia tai muuta tuotantoa ilman hyväksyntää.
Lue vastaus yhdessä vastaavan koodin kanssa. Avustaja voi huomata epäjohdonmukaisuuden, mutta sen vastaus ei korvaa testien ajamista. Opas sovelluksen luominen Claude Codella kertoo, miten työn voi pilkkoa.
Ennen kuin jatkat sovellustasi
Sinun pitää pystyä selittämään yksinkertaisesti kolme asiaa: mitkä arvot ovat julkisia, mitkä toiminnot kulkevat palvelimen kautta ja mitkä testit osoittavat, ettei tili näe toisen tilin dataa. Jos jokin näistä on epäselvä, selvitä se ennen kuin lisäät uusia toimintoja.
Sivu iPhone-sovelluksen luominen sijoittaa tämän vaiheen koko projektiin. Jos haluat edetä järjestyksessä, iOS Kit tarjoaa neljän vaiheen polun ja aloituskoodin, jossa tilit ja tekoäly ovat jo mukana. Jos et tiedä, mistä vaiheesta jatkaa, ilmainen diagnoosi laittaa projektisi järjestykseen ja lähettää sinulle tarkistuslistani Applen hylkäysten välttämiseen.
Usein kysytyt kysymykset
Mihin salainen API-avain kuuluu Expo-sovelluksessa?
Palvelimellesi, ei koskaan sovellukseen. Supabasen secret- tai service_role-avain, kuten myös tekoälypalvelun salainen avain, pysyy vain palvelimella. Sovellus kutsuu palvelintasi, joka tarkistaa käyttäjän ja rajat ennen kuin kutsuu palveluntarjoajaa. Tarkista, ettei yksikään näistä avaimista näy mobiilibundlessa eikä asiakkaan nähtävissä lokeissa.
Suojaako .env-tiedosto API-avaimeni Expossa?
Ei yksinään. EXPO_PUBLIC_-etuliitteellinen muuttuja on tarkoitettu sovelluksen koodille, eikä siihen saa laittaa palvelimen salaisuutta. Expon mukaan nämä arvot upotetaan käännettyyn JavaScriptiin, ja sovelluksen käyttäjät voivat lukea ne. Avaimen siirtäminen .env-tiedostoon ei siis riitä suojaamaan sitä.
Mitä eroa on julkisella ja salaisella API-avaimella?
Julkinen avain on tarkoitettu toimitettavaksi sovelluksen mukana: se tunnistaa projektin, mutta ei korvaa datan käyttöoikeuksia. Salainen avain sallii etuoikeutettuja toimintoja ja on vain luotettuja ympäristöjä varten. Supabasessa publishable-avain tai vanha anon-avain voi olla sovelluksessa, jos oikeudet on määritetty oikein. Secret- ja service_role-avaimet pysyvät palvelimella.
Miten kutsun tekoäly-API:a Expo-sovelluksesta paljastamatta avainta?
Ohjaa kutsu palvelimesi kautta: sovellus kutsuu palvelinta, joka kutsuu palveluntarjoajaa ja palauttaa vastauksen sovellukselle. Salainen avain pysyy palvelimella. Palvelimen pitää myös tarkistaa istunto, rajoittaa toistuvia pyyntöjä ja palauttaa ymmärrettävä virhe, jos palveluntarjoaja ei vastaa. Asiakas ei itse päätä, että käyttäjällä on maksullinen pääsy.
Miten varmistan, että jokainen käyttäjä näkee vain oman datansa?
Valmistele kaksi hallitsemaasi testitiliä, kumpaankin tunnistettava muistiinpano. Yritä tililtä A lukea, muokata ja luoda tilin B nimissä ja avata B:n yksityinen tiedosto. Tee testit myös ilman istuntoa: jokainen pyyntö pitää hylätä tai se ei saa paljastaa mitään. Kirjaa todellinen tulos, sillä "säännöt ovat päällä" ei ole testitulos.
Miten pyydän tekoälyä tarkistamaan sovellukseni avaimet?
Pyydä sitä listaamaan mobiilikoodin ja palvelimen muuttujat niin, että se näyttää vain niiden nimet, äläkä liitä salaisia arvojasi. Pyydä sitä myös tunnistamaan asiakaspuolen etuoikeutetut kutsut ja ehdottamaan testisarja kahdella testitilillä. Kiellä avainten kierrätys ja tuotannon muutokset ilman hyväksyntää. Sen vastaus ei korvaa testien ajamista.