Skip to content

Archive - 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

Screenshot_2022-01-13_at_14-39-23_Playground_-_https_demarches_adullact_org_api_v2_graphql


Le jeton DS n'est pas le bon

Screenshot_2022-01-13_at_14-46-31_Playground_-_https_demarches_adullact_org_api_v2_graphql


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.

Screenshot_2022-01-13_at_14-43-08_Playground_-_https_demarches_adullact_org_api_v2_graphql


Le jeton DS est bon et l'accès à la ressource (démarche, dossier) est autorisé

Screenshot_2022-01-13_at_14-44-35_Playground_-_https_demarches_adullact_org_api_v2_graphql