Berinteraksi dengan API GraphQL
Berinteraksi dengan API GraphQLKeamanan: Hindari mengekspos kredensial yang digunakan dalam query

Keamanan: Hindari mengekspos kredensial yang digunakan dalam query

Kecuali jika API GraphQL kita tidak diekspos secara publik (seperti saat membangun situs statis), kita harus berhati-hati agar query GraphQL tidak mengekspos data pribadi:

  • Dalam respons query
  • Dalam output saat terjadi kesalahan
  • Dalam log

Misalnya, query berikut yang menggunakan field _env (disediakan oleh modul Environment Fields):

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

...akan langsung mencetak kredensial dalam respons:

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

Kita dapat menggunakan beberapa fitur dalam plugin untuk membuat query GraphQL menjadi aman:

  • Field to Input untuk menyuntikkan nilai environment ke field lain melalui variabel dinamis
  • @remove Directive untuk menghindari pencetakan nilai variabel environment pada output
  • Send HTTP Request Fields untuk terhubung langsung ke layanan eksternal dari dalam query GraphQL

Misalnya, query berikut terhubung ke GitHub REST API menggunakan token akses pribadi:

{
  githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
    # Directive ini akan menghapus entri ini dari output
    @remove
 
  # Buat header otorisasi untuk dikirim ke GitHub
  authorizationHeader: _sprintf(
    string: "Bearer %s",
    # Fitur "Field to Input" untuk mengakses nilai dari field di atas
    values: [$__githubAccessToken]
  )
    # Jangan cetak dalam output
    @remove
  
  # Gunakan field dari "Send HTTP Request Fields" untuk terhubung ke 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"
            # Fitur "Field to Input" untuk mengakses nilai dari field di atas
            value: $__authorizationHeader
          },
        ]
      }
    }
  )
}

Dalam query ini, field githubAccessToken dan authorizationHeader (yang berisi data sensitif) keduanya dihapus dari output, dan field gitHubArtifactData akan mencetak hasil pemanggilan API tanpa membocorkan inputnya (misalnya: sebuah kesalahan akan mencetak string "$__authorizationHeader" alih-alih nilai variabel tersebut).