Eu tenho esse aplicativo da Web que será toda a tecnologia do lado do cliente (HTML, CSS, JavaScript / AngularJS, etc ...). Este aplicativo da web interagirá com a API REST para acessar e modificar dados. No momento, não se sabe qual tipo de sistema de autenticação a API REST usará.
Pelo meu entendimento, qualquer tipo de sistema de autenticação de API (API Keys, OAuth 1/2, etc ...) terá certos dados que precisam ser mantidos em segredo, caso contrário, o acesso poderá ser comprometido. Para chaves de API, elas próprias precisam ser secretas, para o OAuth 2 os tokens de segredo / acesso do cliente / tokens de atualização precisam ser mantidos em segredo. Tenho certeza de que algumas das 4 chaves envolvidas no OAuth 1 precisam ser mantidas em segredo (não muita experiência com o OAuth 1). Eu tenho tentado pensar se existe uma maneira de armazenar essas coisas secretas em um aplicativo Web puro do lado do cliente, sem uma camada intermediária no lado do servidor.
Eu tenho tentado pensar sobre isso e não consigo pensar em nenhum lugar para fazer isso. Quero dizer, não posso armazená-lo em javascript, porque qualquer um pode apenas visualizar a fonte ou abrir o console e obter os dados. Não tenho 100% de certeza da segurança do localStorage e se os usuários podem acessar / modificar esses dados. Mesmo que o armazenamento local fosse seguro, as duas maneiras pelas quais consigo inserir dados não são. Uma maneira é apenas armazenar os dados no código-fonte javascript, que é a coisa mais insegura em que consigo pensar. Agora, se eu estivesse usando algo como OAuth 2, no qual as demais APIs me forneceriam os tokens, isso ainda não seria tão seguro (melhor que a primeira opção), porque esses tokens seriam retornados como texto sem formatação para quem puder ver o solicitações que o computador está fazendo podia ver.
Existe alguma maneira de um aplicativo que esteja executando o lado do cliente completamente capaz de armazenar dados secretos com segurança, sem algum tipo de camada intermediária no servidor?