Sécurité : éviter d'exposer les identifiants utilisés dans la requête
À moins que notre API GraphQL ne soit pas exposée publiquement (comme lors de la construction d'un site statique), nous devons veiller à ce que la requête GraphQL n'expose pas de données privées :
- Dans la réponse de la requête
- Dans la sortie lorsqu'une erreur se produit
- Dans les journaux
Par exemple, la requête suivante qui utilise le champ _env (fourni par le module Environment Fields) :
{
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}...affichera directement les identifiants dans la réponse :
{
"data": {
"githubAccessToken": "{some access token}"
}
}Nous pouvons utiliser plusieurs fonctionnalités du plugin pour sécuriser la requête GraphQL :
- Field to Input pour injecter la valeur d'environnement dans un autre champ via une variable dynamique
- @remove Directive pour éviter d'afficher la valeur de la variable d'environnement dans la sortie
- Send HTTP Request Fields pour se connecter directement à un service externe depuis la requête GraphQL
Par exemple, la requête suivante se connecte à l'API REST de GitHub en utilisant un token d'accès privé :
{
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
# Cette directive supprimera cette entrée de la sortie
@remove
# Créer l'en-tête d'autorisation à envoyer à GitHub
authorizationHeader: _sprintf(
string: "Bearer %s",
# Fonctionnalité "Field to Input" pour accéder à la valeur du champ ci-dessus
values: [$__githubAccessToken]
)
# Ne pas afficher dans la sortie
@remove
# Utiliser le champ de "Send HTTP Request Fields" pour se connecter à 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"
# Fonctionnalité "Field to Input" pour accéder à la valeur du champ ci-dessus
value: $__authorizationHeader
},
]
}
}
)
}Dans cette requête, les champs githubAccessToken et authorizationHeader (qui contiennent des données sensibles) sont tous deux supprimés de la sortie, et le champ gitHubArtifactData affichera déjà les résultats de l'appel API, sans divulguer aucun de ses inputs (ex. : une erreur affichera la chaîne "$__authorizationHeader" au lieu de la valeur de la variable).