Autenticação da API REST para aplicativo da web e aplicativo móvel

Estou com problemas para decidir como implementar a autenticação para uma API RESTful que será segura para consumo por um aplicativo Web e um aplicativo móvel.

Em primeiro lugar, pensei em investigar a autenticação básica HTTP por HTTPS como uma opção. Funcionaria bem para um aplicativo móvel, onde o nome de usuário e a senha poderiam ser armazenados no chaveiro do SO com segurança e não poderiam ser interceptados em trânsito, pois a solicitação seria feita por HTTPS. Também é elegante para a API, pois será completamente sem estado. O problema é com o aplicativo da web. Não haverá acesso a esse chaveiro para armazenar o nome de usuário e a senha, portanto, eu precisaria usar um cookie ou localStorage, mas, em seguida, estou armazenando os detalhes particulares do usuário em um local facilmente acessível.

Após mais pesquisas, encontrei muita conversa sobre autenticação HMAC. O problema que vejo com essa abordagem é que precisa haver um segredo compartilhado que apenas o cliente e o servidor conhecem. Como posso obter esse segredo por usuário para um usuário específico no aplicativo Web, a menos que eu tenha um ponto de extremidade api / login que use nome de usuário / senha e devolva o segredo para armazenar em um cookie? para usar em solicitações futuras. No entanto, este é o estado de introdução à API.

Para lançar outra chave inglesa em andamento, gostaria de restringir a API a certos aplicativos (ou impedir bloquear determinados aplicativos de usar a API). Não vejo como isso seria possível com o aplicativo da Web sendo completamente público.

Eu realmente não quero implementar o OAuth. Provavelmente é um exagero para minhas necessidades.

Sinto como se não entendesse completamente o HMAC, por isso gostaria de receber uma explicação e como implementá-lo de maneira segura com um aplicativo da Web e um aplicativo móvel.

Atualizar

Acabei usando HTTP Basic Auth, no entanto, em vez de fornecer o nome de usuário e a senha reais a cada solicitação, um ponto de extremidade foi implementado para trocar o nome de usuário e a senha por uma chave de acesso que é fornecida para todas as solicitações autenticadas. Elimina o problema de armazenar o nome de usuário e a senha no navegador, mas é claro que você ainda pode pescar o token se tiver acesso à máquina e usá-lo. Em retrospectiva, eu provavelmente teria analisado mais o OAuth, mas é bastante complicado para iniciantes.

questionAnswers(3)

yourAnswerToTheQuestion