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