Tengo esta aplicación web que será toda la tecnología del lado del cliente (HTML, CSS, JavaScript / AngularJS, etc.). Esta aplicación web va a interactuar con la API REST para acceder y modificar datos. En este momento no está decidido qué tipo de sistema de autenticación utilizará la API REST.
Según tengo entendido, cualquier tipo de sistema de autenticación API (API Keys, OAuth 1/2, etc.) tendrá ciertos datos que deben mantenerse en secreto, de lo contrario el acceso puede verse comprometido. Para las claves API, las claves deben ser secretas, para OAuth 2 el secreto del cliente / tokens de acceso / tokens de actualización deben mantenerse en secreto, estoy seguro de que algunas de las 4 claves involucradas en OAuth 1 deben mantenerse en secreto (no demasiada experiencia con OAuth 1). He estado tratando de pensar si hay una manera de almacenar estas cosas secretas en una aplicación web pura del lado del cliente sin una capa intermedia en el lado del servidor.
He estado tratando de pensar en esto y no se me ocurre ningún lugar para hacerlo. Quiero decir que no puedo almacenarlo en JavaScript porque cualquiera puede ver la fuente o abrir la consola y obtener los datos. No estoy 100% seguro de cuán seguro es localStorage y si los usuarios pueden acceder / modificar esos datos. Incluso si el almacenamiento local fuera seguro, las dos formas en que puedo pensar en ingresar datos no lo son. Una forma es simplemente almacenar los datos en el código fuente de JavaScript, que es lo más inseguro que se me ocurre. Ahora, si estaba usando algo como OAuth 2 en el que la API del resto me daría los tokens, eso aún no sería tan seguro (mejor que la primera opción) porque esos tokens serían devueltos como texto sin formato para que cualquiera que pueda ver el solicitudes que la computadora está haciendo podría ver.
¿Hay alguna forma de tener una aplicación que se esté ejecutando completamente en el lado del cliente para poder almacenar datos secretos de forma segura sin algún tipo de capa intermedia en el lado del servidor?