Com licença, @MarkAmery e Eugene, mas está incorreto.
Seu aplicativo js + html (cliente) em execução no navegador PODE ser configurado para excluir chamadas diretas não autorizadas para a API da seguinte forma:
- Primeira etapa: Configure a API para exigir autenticação. O cliente deve primeiro se autenticar por meio do servidor (ou algum outro servidor de segurança), por exemplo, pedindo ao usuário humano que forneça a senha correta.
Antes da autenticação, as chamadas para a API não são aceitas.
Durante a autenticação, um "token" é retornado.
Após a autenticação, apenas as chamadas API com o "token" de autenticação serão aceitas.
É claro que, neste estágio, apenas usuários autorizados que possuem a senha podem acessar a API, embora se eles forem programadores que estão depurando o aplicativo, eles podem acessá-lo diretamente para fins de teste.
- Segunda etapa: Agora configure uma API de segurança extra, que deve ser chamada em um curto limite de tempo após o aplicativo cliente js + html ter sido inicialmente solicitado do servidor. Este "retorno de chamada" dirá ao servidor que o download do cliente foi feito com sucesso. Restrinja suas chamadas REST API para funcionar apenas se o cliente foi solicitado recentemente e com sucesso.
Agora, para usar sua API, eles devem primeiro baixar o cliente e executá-lo em um navegador. Somente depois de receber o retorno de chamada com sucesso e a entrada do usuário em um curto período de tempo, a API aceitará as chamadas.
Portanto, você não precisa se preocupar com a possibilidade de ser um usuário não autorizado sem credenciais.
(O título da pergunta, 'Como faço para proteger chamadas de API REST' e, pela maior parte do que você diz, essa é sua principal preocupação, e não a questão literal de COMO sua API é chamada, mas por QUEM, correto? )