Skip to main content

Créer une application OAuth2

note

Avant de pouvoir implémenter le procotole OAuth2, vous aurez besoin d'une application sur la plateforme Trackdéchets. Pour ce faire, merci de nous envoyer un email à l'adresse tech@trackdechets.beta.gouv.fr en spécifiant l'environnement concerné, (production ou "bac à sable") ainsi que les informations suivantes:

  • Email associé à un compte Trackdéchets existant
  • Nom de l'application
  • Logo de l’application au format png, jpeg ou svg
  • Une liste d’urls de redirection valides

Le protocole OAuth2 permet à des logiciels tiers type SaaS déchets ("client") d'accéder à l'API Trackdéchets ("ressource server") pour le compte d'utilisateurs ("ressource owner") sans exposer le mot de passe de celui-ci.

     +--------+                               +---------------+     |        |--(A)- Authorization Request ->|   Resource    |     |        |                               |     Owner     |     |        |<-(B)-- Authorization Grant ---|               |     |        |                               +---------------+     |        |     |        |                               +---------------+     |        |--(C)-- Authorization Grant -->| Authorization |     | Client |                               |     Server    |     |        |<-(D)----- Access Token -------|               |     |        |                               +---------------+     |        |     |        |                               +---------------+     |        |--(E)----- Access Token ------>|    Resource   |     |        |                               |     Server    |     |        |<-(F)--- Protected Resource ---|               |     +--------+                               +---------------+
                    Abstract Protocol Flow

Seul le "grant" par échange de de code d'autorisation est implémentée dans Trackdéchets https://tools.ietf.org/html/rfc6749#section-4.1. Le schéma de flux est le suivant

     +----------+     | Resource |     |   Owner  |     |          |     +----------+          ^          |         (B)     +----|-----+          Client Identifier      +---------------+     |         -+----(A)-- & Redirection URI ---->|               |     |  User-   |                                 | Authorization |     |  Agent  -+----(B)-- User authenticates --->|     Server    |     |          |                                 |               |     |         -+----(C)-- Authorization Code ---<|               |     +-|----|---+                                 +---------------+       |    |                                         ^      v      (A)  (C)                                        |      |       |    |                                         |      |       ^    v                                         |      |     +---------+                                      |      |     |         |>---(D)-- Authorization Code ---------'      |     |  Client |          & Redirection URI                  |     |         |                                             |     |         |<---(E)----- Access Token -------------------'     +---------+
   Note: The lines illustrating steps (A), (B), and (C) are broken into   two parts as they pass through the user-agent.
                     Authorization Code Flow
  • (A) L'application cliente initie le protocole en redirigeant l'utilisateur ("resource owner") sur l'URL d'autorisation Trackdéchets https://app.trackdechets.beta.gouv.fr/oauth2/authorize/dialog

Les arguments suivants doivent être passés en "query string" de la requête (Cf https://tools.ietf.org/html/rfc6749#section-4.1.1):

  • client_id={client_id}: L'identifiant de l'application cliente
  • response_type=code
  • redirect_url={redirect_uri}: URL de redirection

Exemple: https://app.trackdechets.beta.gouv.fr/oauth2/authorize/dialog?response_type=code&redirect_uri=https://client.example.com/cb&client_id=ck7d66y9s00x20784u4u7fp8l

Si la requête échoue à cause d'un paramètre invalide, une erreur est retournée https://tools.ietf.org/html/rfc6749#section-4.1.2.1

  • (B) Le serveur d'autorisation authentifie l'utilisateur via le navigateur ("resource owner") et établit si oui ou non l'utilisateur autorise ou non l'application autorise l'accès

oauth2-dialog.png

  • (C) Si l'utilisateur donne accès, le serveur d'autorisation redirige l'utilisateur vers l'application cliente en utilisant l'URL de redirection fournit à l'étape (A) https://tools.ietf.org/html/rfc6749#section-4.1.2. L'URL de redirection inclut un code d'autorisation avec une durée de validité de 10 minutes. Par exemple: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA.
  • (D) L'application cliente demande un jeton d'accès au serveur d'autorisation en incluant le code d'autorisation reçu à l'étape précédente en faisant un POST sur l'URL https://api.trackdechets.beta.gouv.fr/oauth2/token. Cf https://tools.ietf.org/html/rfc6749#section-4.1.3. Les paramètres suivants doivent être passés en utilisant le format "application/x-www-form-urlencoded".

    • grant_type=code
    • code={code} code reçu à l'étape précédente
    • redirect_uri={redirect_uri} URL de redirection spécifié à l'étape (A)

La requête doit être authentifiée avec avec le client_id et client_secret (méthode basique).

POST /oauth2/token HTTP/1.1Host: api.trackdechets.beta.gouv.frAuthorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JWContent-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=https://client.example.com/cb
  • (E) Si la requête est valide et autorisée, le serveur d'autorisation émet un jeton d'accès. Par exemple
HTTP/1.1 200 OKContent-Type: application/json;charset=UTF-8Cache-Control: no-storePragma: no-cache
{  "access_token":"*****************",  "token_type":"bearer",    user: {      email: "foo@bar.com",      name: "Foo Bar"    }}

Le token émit a une durée de vie infinie, il n'y a pas besoin de le rafraichir. Il pourra toutefois être révoqué par l'utilisateur dans son espace client Trackdéchets.

Vous pouvez ensuite stocker ce token et l'utiliser pour accéder aux ressources de l'utilisateur sur la plateforme Trackdéchets.

Si la requête échoue, le serveur répond par un message d'erreur tel que décrit ici

tip

Une application OAuth2 de démonstration a été créee à l'adresse https://td-oauth2-demo.osc-fr1.scalingo.io/