Interactie met de GraphQL API
Interactie met de GraphQL APIBeveiliging: voorkom blootstelling van inloggegevens in de query

Beveiliging: voorkom blootstelling van inloggegevens in de query

Tenzij onze GraphQL API niet publiek toegankelijk is (zoals bij het bouwen van een statische site), moeten we ervoor zorgen dat de GraphQL-query geen privégegevens blootstelt:

  • In de respons van de query
  • In de uitvoer wanneer er een fout optreedt
  • In de logs

De volgende query gebruikt bijvoorbeeld het veld _env (geleverd door de module Environment Fields):

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

...en drukt de inloggegevens rechtstreeks af in de respons:

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

We kunnen verschillende functies van de plugin gebruiken om de GraphQL-query veilig te maken:

  • Field to Input om de omgevingswaarde via een dynamische variabele in een ander veld te injecteren
  • @remove Directive om te voorkomen dat de waarde van de omgevingsvariabele in de uitvoer wordt afgedrukt
  • Send HTTP Request Fields om al vanuit de GraphQL-query rechtstreeks verbinding te maken met een externe service

De volgende query maakt bijvoorbeeld verbinding met de GitHub REST API via een privé-toegangstoken:

{
  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 deze query worden de velden githubAccessToken en authorizationHeader (die gevoelige gegevens bevatten) allebei uit de uitvoer verwijderd, en het veld gitHubArtifactData drukt al de resultaten van de API-aanroep af zonder enige invoer te lekken (een fout drukt bijvoorbeeld de string "$__authorizationHeader" af in plaats van de waarde van de variabele).