GraphQL API ile Etkileşim
GraphQL API ile EtkileşimGüvenlik: Sorguda Kullanılan Kimlik Bilgilerini İfşa Etmekten Kaçınma

Güvenlik: Sorguda Kullanılan Kimlik Bilgilerini İfşa Etmekten Kaçınma

GraphQL API'miz herkese açık olmadığı sürece (örneğin statik bir site oluştururken), GraphQL sorgusunun özel verileri ifşa etmemesine dikkat etmeliyiz:

  • Sorgunun yanıtında
  • Bir hata oluştuğunda çıktıda
  • Günlüklerde

Örneğin, Environment Fields modülü tarafından sağlanan _env alanını kullanan şu sorgu:

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

...kimlik bilgilerini doğrudan yanıtta yazdıracaktır:

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

GraphQL sorgusunu güvenli hale getirmek için eklentideki çeşitli özellikleri kullanabiliriz:

  • Field to Input: ortam değerini dinamik bir değişken aracılığıyla başka bir alana enjekte etmek için
  • @remove Directive: ortam değişkeninin değerinin çıktıda yazdırılmasını önlemek için
  • Send HTTP Request Fields: GraphQL sorgusu içinden doğrudan harici bir servise bağlanmak için

Örneğin, aşağıdaki sorgu özel bir erişim belirteci kullanarak GitHub REST API'sine bağlanır:

{
  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
          },
        ]
      }
    }
  )
}

Bu sorguda, hassas veri içeren githubAccessToken ve authorizationHeader alanlarının her ikisi de çıktıdan kaldırılır; gitHubArtifactData alanı ise girdilerinden hiçbirini sızdırmadan API çağrısının sonuçlarını doğrudan yazdıracaktır (örneğin: bir hata, değişkenin değeri yerine "$__authorizationHeader" dizesini yazdıracaktır).