Contenu - DS - Question sur GraphQL ---> Réponse de l'API "unauthorized"
Généralités
Plusieurs éléments génériques sur les problématiques avec l’API GraphQL de DS :
- Il n’y a pas de restriction par IP sur l'API GraphQL.
- Si le jeton n’a pas été régénéré, il doit fonctionner normalement
- Le jeton expire uniquement quand il est régénéré via le bouton sur la page "Profil" (URL :
/profil
) du compte administrateur. - Dans le cas, où les requêtes GraphQL ne fonctionne plus, nous vous proposons de suivre 2 principes :
- utiliser une requête simple GraphQL pour tester que le jeton est bien le bon et que l'API GraphQL répond ;
- utiliser un outil simple pour tester les requêtes GraphQL (à l'ADULLACT, nous utilisons CURL)
Exemple de requête GraphQL simple
{
demarche(number: 26) {
state
title
dateCreation
datePublication
description
service {
typeOrganisme
organisme
nom
}
}
}
Exemple de requête GraphQL avec CURL
Testé sous Linux avec les outils curl
et jq
(ce dernier n'est pas obligatoire, il sert juste à lire plus facilement la réponse JSON).
# Jeton DS pour l'API GraphQL
set +o history # désactiver l'historique des lignes de commande
API_JETON="<YOUR_TOKEN>"
set -o history # activer l'historique des lignes de commande
API_GRAPHQL_URL="https://demarches.adullact.org/api/v2/graphql"
PROCEDURE_ID=26
# Requête à l'API GraphQL de DS
DS_REQUEST="{ demarche(number: ${PROCEDURE_ID}) { state title dateCreation datePublication description service { typeOrganisme organisme nom } } }"
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token=${API_JETON}" \
--data "{ \"query\": \"${DS_REQUEST}\" }" \
${API_GRAPHQL_URL} | jq
Réponse "unauthorized" de l'API GraphQL de DS
La réponse GraphQL est la même dans les 3 cas suivants :
- aucun jeton DS n'a été envoyé dans les entêtes HTTP de la requête GraphQL
- le jeton DS n'est pas le bon (il a par exemple été régénéré avec le compte administrateur).
- le jeton DS est bon, mais la requête GraphQL porte sur une ressource (démarche, dossier) pour lequel le compte administrateur n'a pas les droits.
{
"data": null,
"errors": [
{
"message": "An object of type Demarche was hidden due to permissions",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"demarche"
],
"extensions": {
"code": "unauthorized"
}
}
]
}
Exemples avec le bac à sable de DS
Aucun jeton DS n'a été envoyé dans les entêtes HTTP
API_GRAPHQL_URL="https://demarches.adullact.org/api/v2/graphql"
PROCEDURE_ID=26
DS_REQUEST="{ demarche(number: ${PROCEDURE_ID}) { state title dateCreation datePublication description service { typeOrganisme organisme nom } } }"
curl -X POST \
-H "Content-Type: application/json" \
--data "{ \"query\": \"${DS_REQUEST}\" }" \
${API_GRAPHQL_URL} | jq
{
"data": null,
"errors": [
{
"message": "An object of type Demarche was hidden due to permissions",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"demarche"
],
"extensions": {
"code": "unauthorized"
}
}
]
}
Le jeton DS n'est pas le bon
# Jeton DS pour l'API GraphQL
set +o history # désactiver l'historique des lignes de commande
API_JETON="<OLD_OR_BAD_TOKEN>"
set -o history # activer l'historique des lignes de commande
API_GRAPHQL_URL="https://demarches.adullact.org/api/v2/graphql"
PROCEDURE_ID=26
DS_REQUEST="{ demarche(number: ${PROCEDURE_ID}) { state title dateCreation datePublication description service { typeOrganisme organisme nom } } }"
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token=${API_JETON}" \
--data "{ \"query\": \"${DS_REQUEST}\" }" \
${API_GRAPHQL_URL} | jq
{
"data": null,
"errors": [
{
"message": "An object of type Demarche was hidden due to permissions",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"demarche"
],
"extensions": {
"code": "unauthorized"
}
}
]
}
Le jeton DS est bon, mais l'accès à la ressource (démarche, dossier) n'est pas autorisé
Le jeton DS est bon, mais la requête GraphQL porte sur une ressource (démarche, dossier) pour lequel le compte administrateur n'a pas les droits.
# Jeton DS pour l'API GraphQL
set +o history # désactiver l'historique des lignes de commande
API_JETON="<YOUR_VALID_TOKEN>"
set -o history # activer l'historique des lignes de commande
API_GRAPHQL_URL="https://demarches.adullact.org/api/v2/graphql"
PROCEDURE_ID=<BAD_ID> # vous n'avez pas les droits administrateur sur cette démarche
DS_REQUEST="{ demarche(number: ${PROCEDURE_ID}) { state title dateCreation datePublication description service { typeOrganisme organisme nom } } }"
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token=${API_JETON}" \
--data "{ \"query\": \"${DS_REQUEST}\" }" \
${API_GRAPHQL_URL} | jq
{
"data": null,
"errors": [
{
"message": "An object of type Demarche was hidden due to permissions",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"demarche"
],
"extensions": {
"code": "unauthorized"
}
}
]
}
Le jeton DS est bon et l'accès à la ressource (démarche, dossier) est autorisé
# Jeton DS pour l'API GraphQL
set +o history # désactiver l'historique des lignes de commande
API_JETON="<YOUR_VALID_TOKEN>"
set -o history # activer l'historique des lignes de commande
API_GRAPHQL_URL="https://demarches.adullact.org/api/v2/graphql"
PROCEDURE_ID=<VALID_ID> # vous avez les droits administrateur sur cette démarche
DS_REQUEST="{ demarche(number: ${PROCEDURE_ID}) { state title dateCreation datePublication description service { typeOrganisme organisme nom } } }"
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token=${API_JETON}" \
--data "{ \"query\": \"${DS_REQUEST}\" }" \
${API_GRAPHQL_URL} | jq