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).