Ocultando a chave da API

Gostaria de fazer chamadas à API JSON em vários pontos. Às vezes, preciso fornecer uma chave de API—então, a gero no painel de administração e preciso incluí-la na chamada à API. Por exemplo:

var token = [CHAVE DE API]
$.ajax({
     url: 'https://myforum.com/groups/[nome-do-grupo].json',
      contentType: "application/json",
      headers: {
          "Api-Key": token,
          "Api-Username": "[usuário]"
        },
        dataType: 'json',
        success: function(result){
             console.log('resultado = ' + result);
         }
})

Existe alguma maneira de proteger essa chave para que não fique visível aos usuários?

No momento, minha solução é fazer com que essa função ocorra fora da minha aplicação Discourse—então, minha aplicação chamaria um endpoint hospedado em outro local, que por sua vez executaria essa função. Dessa forma, a Chave de API fica em uma função armazenada separadamente da minha aplicação Discourse, e minha aplicação conhece apenas o endpoint.

PORÉM, seria mais limpo se eu pudesse incluir essa função dentro da minha aplicação Discourse, por exemplo, em um tema ou plugin. Mas parece-me que, não importa o que eu faça, se fizer parte do código, um usuário poderá visualizar a Chave de API.

Existe alguma maneira de ocultar a Chave de API?

Um aplicativo que realiza qualquer tipo de solicitação sensível à API deve fazê-lo no backend, em vez de no frontend.

Você obtém muitos benefícios, como cache personalizado, chamadas de API paralelas, segurança, etc. Não é uma boa ideia fazer isso em código JS executado no cliente.

Obrigado. Configurei uma estrutura de back-end para lidar com a solicitação da API, mas ela é separada da minha instância do Discourse (não está conectada ao Discourse de forma alguma). Existe alguma maneira de fazer isso ocorrer no back-end do próprio aplicativo do Discourse?

Acho que depende de como/onde sua instância do Discourse está hospedada. Haveria uma maneira de vincular ao back-end de um aplicativo hospedado com discourse.org?

Você precisa construí-lo em Rails como um plugin e estar em um plano que permita a adição de plugins de terceiros.