Non puoi proteggere alcun segreto pubblico. Se la pagina HTML inviata al client ha le chiavi API, non sono più segrete. Chiunque può leggere la pagina e prendere la chiave, e usarla come vogliono.
Non pensare nemmeno alla codifica, all'offuscamento o alla crittografia del lato client. Gli strumenti di sviluppo su qualsiasi browser moderno consentiranno all'utente di visualizzare la richiesta effettiva e prenderanno semplicemente le chiavi della richiesta. Anche se l'applicazione è un file binario con crittografia e anti-manomissione e utilizza SSL con pining certificato, un utente determinato prenderà le chiavi. Possono essere necessari secondi o giorni, ma la chiave perde.
Per proteggere le chiavi, usa un proxy. Crea un componente lato server che contenga le chiavi e acceda al back-end, e la tua pagina HTML (o l'app, o Java o qualsiasi altra applicazione client) accederà a esso.
E non puoi davvero sapere se il client che si connette è il tuo cliente. Anche i produttori di giochi MMO hanno difficoltà a gestire i client alternativi utilizzati per aggirare alcune protezioni. Puoi renderlo solo più difficile, ma ancora una volta un determinato attaccante può bypassare le tue protezioni.