Mam tę aplikację internetową, która będzie w całości technologią po stronie klienta (HTML, CSS, JavaScript / AngularJS itp.). Ta aplikacja internetowa będzie współdziałać z interfejsem API REST w celu uzyskiwania dostępu i modyfikowania danych. Obecnie nie jest zadecydowane, jakiego rodzaju systemu uwierzytelniania będzie używać interfejs API REST.
Z mojego zrozumienia, każdy rodzaj systemu uwierzytelniania API (klucze API, OAuth 1/2 itd.) Będzie miał pewne dane, które muszą być utrzymywane w tajemnicy, w przeciwnym razie dostęp może zostać naruszony. W przypadku kluczy API klucze te same muszą być tajne, w przypadku OAuth 2 klient tajny / tokeny dostępu / tokeny odświeżania muszą być utrzymywane w tajemnicy, jestem pewien, że kilka z 4 kluczy zaangażowanych w OAuth 1 należy zachować w tajemnicy (nie zbyt duże doświadczenie z OAuth 1). Próbowałem zastanowić się, czy istnieje sposób na przechowywanie tych tajnych rzeczy w czystej aplikacji internetowej po stronie klienta bez pośredniej warstwy po stronie serwera.
Próbowałem o tym myśleć i nie mogę wymyślić żadnego miejsca do zrobienia tego. Mam na myśli, że nie mogę przechowywać go w javascript, ponieważ każdy może po prostu wyświetlić źródło lub otworzyć konsolę i pobrać dane. Nie jestem w 100% pewien, jak bezpieczne jest przechowywanie lokalne i czy użytkownicy mogą uzyskać dostęp do tych danych lub je modyfikować. Nawet jeśli lokalna pamięć masowa była bezpieczna, dwa sposoby, w jakie mogę myśleć o wprowadzeniu do niej danych, nie są. Jednym ze sposobów jest po prostu przechowywanie danych w kodzie źródłowym javascript, co jest najbardziej niepewną rzeczą, jaką mogę wymyślić. Teraz, gdybym używał czegoś takiego jak OAuth 2, w którym reszta interfejsu API dałaby mi tokeny, nadal nie byłoby to tak bezpieczne (lepiej niż pierwsza opcja), ponieważ te tokeny byłyby zwracane jako zwykły tekst, że każdy, kto może zobaczyć żądania wysyłane przez komputer mogą zobaczyć.
Czy jest jakiś sposób, aby aplikacja całkowicie działająca po stronie klienta mogła bezpiecznie przechowywać tajne dane bez jakiejś warstwy pośredniej po stronie serwera?