Interactuar con la API GraphQL
Interactuar con la API GraphQLSeguridad: evitar exponer credenciales utilizadas en la consulta

Seguridad: evitar exponer credenciales utilizadas en la consulta

A menos que nuestra API GraphQL no esté expuesta públicamente (como cuando construimos un sitio estático), debemos tener cuidado de que la consulta GraphQL no exponga datos privados:

  • En la respuesta de la consulta
  • En la salida cuando ocurre un error
  • En los registros

Por ejemplo, la siguiente consulta que utiliza el campo _env (proporcionado por el módulo Environment Fields):

{
  githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}

...imprimirá directamente las credenciales en la respuesta:

{
  "data": {
    "githubAccessToken": "{some access token}"
  }
}

Podemos utilizar varias características del plugin para hacer que la consulta GraphQL sea segura:

  • Field to Input para inyectar el valor de entorno en otro campo mediante una variable dinámica
  • @remove Directive para evitar imprimir el valor de la variable de entorno en la salida
  • Send HTTP Request Fields para conectarse directamente a un servicio externo ya desde dentro de la consulta GraphQL

Por ejemplo, la siguiente consulta se conecta a la API REST de GitHub utilizando un token de acceso privado:

{
  githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
    # Esta directiva eliminará esta entrada de la salida
    @remove
 
  # Crear la cabecera de autorización para enviar a GitHub
  authorizationHeader: _sprintf(
    string: "Bearer %s",
    # Característica "Field to Input" para acceder al valor del campo de arriba
    values: [$__githubAccessToken]
  )
    # No imprimir en la salida
    @remove
  
  # Usar el campo de "Send HTTP Request Fields" para conectarse a GitHub
  gitHubArtifactData: _sendJSONObjectCollectionHTTPRequest(
    input: {
      url: "https://api.github.com/repos/GatoGraphQL/GatoGraphQL/actions/artifacts",
      options: {
        headers: [
          {
            name: "Accept"
            value: "application/vnd.github+json"
          },
          {
            name: "Authorization"
            # Característica "Field to Input" para acceder al valor del campo de arriba
            value: $__authorizationHeader
          },
        ]
      }
    }
  )
}

En esta consulta, los campos githubAccessToken y authorizationHeader (que contienen datos sensibles) se eliminan ambos de la salida, y el campo gitHubArtifactData ya imprimirá los resultados de la llamada a la API, sin filtrar ninguno de sus inputs (p. ej.: un error imprimirá la cadena "$__authorizationHeader" en lugar del valor de la variable).