Clé API et des droits d'accès aux services Web.

Cette page documente le mode d'utilisation des clés sur les services Web de l'API du Géoportail. Elle s'adresse aux développeurs souhaitant interroger directement le service WMS-C dans une application client tierce non fournie par l'IGN. Pour illustration, la gestion des droits d'accès aux données est faite dans le fichier Geoportal/GeoRMHandler.js du client javascript fournit.

Principe

Chaque requête aux serveurs est accompagnée d'un jeton permettant l'accès aux données. Le jeton obtenu et mis à jour auprès d'un serveur de jetons code les droits d'accès aux données et identifie une session d'utilisation.

Qu'est ce qu'un jeton ?

Un jeton est un paramètre d'accès éphémère associé à une clé API, il est assimilable à une session d'utilisation de l'API. Il contient les droits d'accès du contrat API associé et doit être ajouté à toutes les requêtes API. Le système de jetons permet d'obtenir des statistiques de consommation et de répartir équitablement des ressources serveurs disponibles aux utilisateurs de l'API. Un jeton est une chaîne de caractères qu'il faut passer dans un paramètre url (actuellement gppkey) à chaque requête aux services de l'API.

Le serveur de jetons.

Le serveur de jeton de l'API du Géoportail est jeton-api.ign.fr. Il expose des service permettant de créer, mettre à jour, libérer ou obtenir une session API

Méthode getToken

Ce service permet de délivrer ou de mettre à jour un jeton.

  • Paramètre key (première demande) : clé du contrat API ;
  • Paramètre gppkey (mise à jour) : le jeton de la session API à mettre à jour, le jeton peut être passé sous la forme d'un paramètre url ou d'un cookie ;
  • Paramètre output (optionnel) : Spécifie un format de réponse xml (défaut), json ou raw ;
  • Paramètre callback (optionnel) : Uniquement pour un format json. Permet de spécifier une fonction de callback pour une exécution ;
  • Paramètre cookie (optionnel) : Indique que l'on souhaite une sortie du jeton sous forme d'un cookie (en plus de la sortie normale dans le corps de la réponse HTTP).
  • En cas de succès La réponse comporte le jeton (une chaîne de caractère) ainsi que son nom de paramètre url (ou nom du cookie). Ce nom de paramètre url est à utiliser pour tous les appels nécessitant un jeton, y compris pour la mise à jour de jeton par le serveur de jeton. Le jeton obtenu donne l'accès aux services associés au contrat pendant une courte durée (actuellement 10 mn).

    Exemple: http://jeton-api.ign.fr/getToken?key=CLEF&output=xml

    <token name="gppkey">
      gC2UZGUr_JJi5Nm7QKN5hQG06pEAAAAAAAHWLRe_BD6d4QTVAAABHiB
      QmEAAAAAAAlgAAQECvZr3ME_66sRrEAaAwzQAAEM0AADCtAAAQrQAAA
    </token>

    Exemple: http://jeton-api.ign.fr/getToken?key=CLEF&output=json

    {
      "gppkey":"gC2UZGUr_JJi5Nm7QKN5hQG06pEAAAAAAAHWLRe_BD6d4QTVAAA
      BHiBQmEAAAAAAAlgAAQECvZr3ME_66sRrEAaAwzQAAEM0AADCtAAAQrQAAA"
    }

    Exemple: http://jeton-api.ign.fr/getToken?key=CLEF&output=json&callback=myfunc

    myfunc({
      "gppkey":"gC2UZGUr_JJi5Nm7QKN5hQG06pEAAAAAAAHWLRe_BD6d4QTVAAA
      BHiBQmEAAAAAAAlgAAQECvZr3ME_66sRrEAaAwzQAAEM0AADCtAAAQrQAAA"
    });

    Exemple: http://jeton-api.ign.fr/getToken?key=CLEF&output=raw

    gC2UZGUr_JJi5Nm7QKN5hQG06pEAAAAAAAHWLRe_BD6d4QTVAAABHiB
    QmEAAAAAAAlgAAQECvZr3ME_66sRrEAaAwzQAAEM0AADCtAAAQrQAAA

    Exemple: http://jeton-api.ign.fr/getToken?key=CLEF&gppkey=gC2UZ...AAA&output=xml (mise à jour)

    <token name="gppkey">
      37mZE3sL-EuU5GAvG2NFwXZaRLgAAAAAAJG_bR0eku1hUp-bAAABK
      OBRtx4AAAAAAlgAAQEBzIOB9cN7vYDDNAAAQzQAAMK0AABCtAAA
    </token>
  • En cas d'échec Une erreur HTTP 403 est retournée. Les causes possibles d'une telle erreur sont multiples :
    • clé ou jeton invalide
    • nombre de session maximales du contrat atteint
    • IP ou REFERER invalide (en fonction du contrat)
    • surcharge globale du service
  • Notes :
    • L'utilisation du format raw est déconseillée car celui-ci ne donne pas le nom du paramètre url du jeton.
    • Le nom actuel du paramètre url des jetons est gppkey. Le nom de ce paramètre pourra éventuellement changer.
    • La durée de vie actuelle des jetons est de 10 mn, cette durée est précisée par getConfig.
    • Des retours à la ligne et espaces ont été rajoutés dans exemples de retour pour faciliter leur lisibilité. Ils ne sont pas présents dans les réponses du serveur de jeton.
    • En cas tentative de mise à jour d'une session API expirée, une nouvelle session est créée.
    • Le nombre de sessions API simultanées est limité (globalement et par contrat), il est possible qu'une première demande de jeton soit refusée en cas de surcharge du service. Par contre, toute mise à jour d'une session valide déjà acceptée sera honorée.
    • Chaque clé possède une limite de sessions API simultanées. Il est donc important de libérer les sessions à l'aide de releaseToken. Dans le cas contraire, les sessions (utilisée ou non) sont libérées à leur expiration (10 mn).

Méthode releaseToken

  • Paramètre un jeton : libère la session d'un jeton.
  • Réponse : pour le moment aucune réponse n'est fournie.

    Libère une session API, le jeton ainsi libéré ne doit plus être utilisé. Bien que supportée, cette opération ne fait rien à la data d'écriture de cette documentation.

    Exemple: http://jeton-api.ign.fr/releaseToken?gppkey=gC...AA

Méthode getConfig

  • Paramètre key : clé du contrat API.

    Ce service fournit au format xml et json les information suivantes :

    • durée de vie d'un jeton
    • Emprise géographique du contrat
    • liste des ressources API accessibles par le contrat (serveur, protocole, couches)

    Exemple: http://jeton-api.ign.fr/getConfig?key=CLEF&output=xml

    <config>
      <tokenTimeOut>temps en secondes</tokenTimeOut>
      <boundingBox minx="longitude ouest"
                   miny="latitude sud"
                   maxx="longitude est"
                   maxy="latitude nord"/>
      <resources>
        <resource>
          <name>couche</name>
          <type>WMSC, WMS, WFS, ...</type>
          <url>Url du service</url>
        </resource>
        ...
      </resources>
    </config>

    Exemple: http://jeton-api.ign.fr/getConfig?key=CLEF&output=json

    {
      "tokenTimeOut":temps en secondes,
      "boundingBox":{
        "minx":longitude ouest,
        "miny":latitude sud,
        "maxx":longitude est,
        "maxy":latitude nord
      },
      "resources":[
        {
          "name":"couche",
          "type":"WMSC, WMS, WFS, ...",
          "url":"Url du service"
        },
        ...
      ]}

Utilisation d'un jeton sur les service API.

Toute requête HTTP à un service API protégé par GeoDRM doit contenir en paramètre un jeton valide, sous forme d'un en-tête HTTP, d'un paramètre url ou d'un cookie (l'url prime sur le cookie qui prime sur l'en-tête en cas de présence de plusieurs des formes du jeton). La requête est filtrée en fonction des droits d'accès du jeton utilisé.

Un jeton contient les droits d'accès d'un contrat, à savoir des ressources (service, couches), une emprise géographique (optionnel), une plage d'IP d'où doit provenir la requête (optionnel) et une liste de REFERER (optionnel) indiquant les sites Web autorisés.

En cas d'erreur, une erreur HTTP 403 est retournée.

Notes :

  • Pour permettre des développement locaux, toutes les clés fonctionnent avec les REFERER "localhost" et "127.0.0.1".
  • Une incompatibilité est connue avec le protocole HTTPS, car les navigateurs n'envoient pas l'en-tête HTTP REFERER dans ce cas. C'est pourquoi le support du HTTPS dans la gestion des droits d'accès est désactivée.