Istnieje najprostszy sposób na przechowywanie kluczy w React Native. To istotny punkt do uwzględnienia przy tworzeniu każdej aplikacji. Twoje klucze dostępowe muszą być bezpieczne.
Wyobraź sobie bardzo popularny scenariusz architektury aplikacji mobilnej, w tym przypadku chodzi o implementację w React Native. Klient mobilny komunikujący się z bazą Firestore w ramach usługi Firebase, przechowujący pliki użytkownika w Firebase Storage i używający interfejsu API za pomocą Firebase Functions. Dodajmy może jeszcze do tego jakieś usługi Amazon Web Services, powiedzmy, że to zamiana tekstu na mowę, która odbywa się za pomocą kombinacji usług AWS Lambda, AWS S3, AWS Poli, a może jeszcze ta aplikacja ma jakiś ekran obsługujący Google Maps.
Żeby sprawnie komunikować się z tymi wszystkimi usługami i efektywnie z nich korzystać, do warstwy React Native powinny być przekazywane następujące parametry w zależności do sposobu łączenia się z usługami i konfiguracji:
Dużo tych wszystkich secretsów
no nie?
W pierwszej kolejności warto pamiętać, że umieszczenie tych kluczy w pliku .js
i wypchnięcie do repozytorium, a następnie importowanie ich w kodzie, to bardzo zły pomysł, nawet jeśli to repozytorium jest prywatne.
Oto historia, którą spotkałem w jednym z projektów. Ktoś, kilka lat wstecz nieopatrznie wypchnął w swoim kodzie klucz AWS. Developer ten w międzyczasie opuścił zespół, a błędu nikt nie zauważył. Niestety klucze te w jakiś sposób dostały się w ręce jakiegoś złośliwego człowieka. Dla tych, którzy nie znają AWS dodam, że posiadając klucze można dowolnie tworzyć, usuwać i edytować zasoby, chociażby za pomocą CLI. I to właśnie miało miejsce w tym przypadku. Troll stworzył kilkadziesiąt wirtualnych maszyn w różnych regionach, a że były to regiony, w których pracowaliśmy początkowo nikt tego nie zauważył, aż do momentu zapłaty billingu, który nagle wzrósł o 4000% (cztery tysiące procent serio!). Początkowe przypuszczenie było takie, że to nasze rozwiązanie w chmurze jest nieoptymalne i naciąga taką dużą kwotę. Zanim znaleźliśmy właściwą przyczynę, mój ówczesny pracodawca musiał zapłacić trzy takie rachunki. Niech to zatem służy jako przestroga i lesson learned.
W celu uniknięcia podobnej sytuacji przy okazji tworzenia aplikacji w React Native przychodzi nam z pomocą biblioteka react-native-dotenv
, którą osobiście bardzo lubię i rekomenduję ze względu na wygodę i prostotę użycia.