Interagire con l'API GraphQL
Interagire con l'API GraphQLSicurezza: evitare di esporre le credenziali usate nella query

Sicurezza: evitare di esporre le credenziali usate nella query

A meno che la nostra API GraphQL non sia esposta pubblicamente (come quando si crea un sito statico), dobbiamo fare attenzione affinché la query GraphQL non esponga dati privati:

  • Nella risposta della query
  • Nell'output quando si verifica un errore
  • Nei log

Ad esempio, la seguente query che utilizza il campo _env (fornito dal modulo Environment Fields):

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

...stamperà direttamente le credenziali nella risposta:

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

Possiamo utilizzare diverse funzionalità del plugin per rendere sicura la query GraphQL:

  • Field to Input per iniettare il valore dell'ambiente in un altro campo tramite una variabile dinamica
  • @remove Directive per evitare di stampare il valore della variabile d'ambiente nell'output
  • Send HTTP Request Fields per connettersi direttamente a un servizio esterno già dall'interno della query GraphQL

Ad esempio, la seguente query si connette all'API REST di GitHub utilizzando un token di accesso privato:

{
  githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
    # This directive will remove this entry from the output
    @remove
 
  # Create the authorization header to send to GitHub
  authorizationHeader: _sprintf(
    string: "Bearer %s",
    # "Field to Input" feature to access value from the field above
    values: [$__githubAccessToken]
  )
    # Do not print in output
    @remove
  
  # Use the field from "Send HTTP Request Fields" to connect to 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"
            # "Field to Input" feature to access value from the field above
            value: $__authorizationHeader
          },
        ]
      }
    }
  )
}

In questa query, i campi githubAccessToken e authorizationHeader (che contengono dati sensibili) vengono entrambi rimossi dall'output, e il campo gitHubArtifactData stamperà già i risultati della chiamata API, senza divulgare nessuno dei suoi input (ad esempio: un errore stamperà la stringa "$__authorizationHeader" invece del valore della variabile).