Ocultando la API Key

Me gustaría realizar llamadas a la API JSON en varios puntos. A veces, necesito proporcionar una clave de API, por lo que genero una en el panel de administración y debo incluirla en la llamada a la API. Por ejemplo:

var token = [API KEY]
$.ajax({
     url: 'https://myforum.com/groups/[groupname].json',
      contentType: "application/json",
      headers: {
          "Api-Key": token,
          "Api-Username": "[username]"
        },
        dataType: 'json',
        success: function(result){
             console.log('result = ' + result);
         }
})

¿Existe alguna forma de proteger esta clave para que no sea visible para los usuarios?

Por ahora, mi solución es que esta función se ejecute fuera de mi aplicación Discourse; es decir, mi aplicación llamaría a un punto de conexión alojado en otro lugar que luego ejecutaría esta función. De esta manera, la clave de API está en una función almacenada por separado de mi aplicación Discourse, y mi aplicación solo conoce el punto de conexión.

PERO, sería más limpio si pudiera incluir esta función dentro de mi aplicación Discourse, por ejemplo, en un tema o complemento. Pero parece que, sin importar lo que haga, si forma parte del código, un usuario podrá ver la clave de API.

¿Existe alguna forma de ocultar la clave de API?

Una aplicación que realice cualquier tipo de solicitud sensible a una API querrá hacerlo en el backend, en lugar de en el frontend.

Obtienes muchas ventajas, como almacenamiento en caché personalizado, llamadas paralelas a la API, seguridad, etc. No es una buena idea hacer esto en código JS que se ejecuta en el cliente.

4 Me gusta

Gracias. He configurado una estructura de backend para manejar la solicitud de la API, pero está separada de mi instancia de Discourse (no está conectada a Discourse en absoluto). ¿Existe alguna forma de que esto ocurra en el backend de la propia aplicación de Discourse?

Supongo que depende de cómo y dónde esté alojada tu instancia de Discourse. ¿Existe alguna manera de vincularse al backend para una aplicación alojada en discourse.org?

Debes construirlo en Rails como un plugin y estar en un plan que permita la adición de plugins de terceros.

2 Me gusta