Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Les modèles de consentement peuvent être intégrés comme iframe à tout site HTML, de manière à réaliser un intégration sans couture.

Cinématique

Une fois l’intégration réalisée, la cinématique se déroule ainsi :

  • obtention d’un jeton d’authentification ;

  • obtention d’une URL de formulaire ;

  • présentation du formulaire ;

  • envoi du formulaire, à l’issu duquel :

    • optionnel : affichage du reçu de consentement ;

    • optionnel : envoi de message à la frame parente pour déclencher un rechargement du site ;

    • optionnel : redirection vers une nouvelle URL ;

Obtention d’un jeton d’authentification

L’obtention du jeton d’authentification peut se faire via une requête HTTP, bien qu’il soit conseillé d’utiliser un framework Oauth2 permettant un renouvellement automatique des jetons de session.

Exemple en PHP :

function getToken()
{
    $auth_url = "https://auth.fairandsmart.com/auth";
    $auth_client_id = "fsorg";
    $auth_username = "mysecretidentity@example.com";
    $auth_password = "MySecretPassword";
    $token = "";
    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_URL => $auth_url . "/realms/FairAndSmart/protocol/openid-connect/token",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => "grant_type=password&client_id=" . $auth_client_id . "&username=" . $auth_username . "&password=" . $auth_password,
        CURLOPT_HTTPHEADER => array(
            "Content-Type: application/x-www-form-urlencoded",
            "cache-control: no-cache",
        ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        $token = json_decode($response)->access_token;
    }

    return $token;
}

À l’issue de ce snippet, la variable token contiendra le token d’authentification..

Obtention d’une URL de formulaire de consentement

L’obtention du formulaire se fait via une requête HTTP ; à l’issue de l’opération on obtient une URL de formulaire de consentement intégrable par exemple en snippet.

Il est nécessaire d’indiquer un identifiant qui permettra de relayer le formulaire à son utilisateur (user_id ci-dessous).

function getForm($token)
{
    $api_url = "https://core.fairandsmart.com/api";
    $organisation_id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
    $model_id_or_alias = "YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY";
    $user_id = "test fns";
    $body = "userid=" . $user_id;
    $curl = curl_init();

    curl_setopt_array($curl, array(
        CURLOPT_URL => $api_url . "/organisations/" . $organisation_id . "/consents/" . $model_id_or_alias . "/endpoint",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => $body,
        CURLOPT_HTTPHEADER => array(
            "Authorization: Bearer $token",
            "Content-Type: application/x-www-form-urlencoded",
        ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
        echo "cURL Error #:" . $err;
    } else {
        $url = json_decode($response)->endpoint;
    }

    return $url;
}

À la fin de ce snippet, la variable $urlcontient l’url du formulaire de consentement.

Cet exemple ne couvre pas les variantes de l’appel ; les champs suivants peuvent être renseignés selon l’usage souhaité :

  • callback : URL vers laquelle l’utilisateur sera redirigé à l’issue de la saisie ;

  • optoutEmail : adresse email à laquelle une reçu de consentement sera transmis ;

  • receipt : booléen indiquant si un reçu de consentement doit être présenté à l’issue de la saisie ;

  • iframe : autorise l’injection de la librairie iframe-resizer dans le formulaire.

Se reporter à https://core.fairandsmart.com/doc/api.html#operation/getConsentEndointJson pour plus d’information et une liste exhaustive des paramètres possibles (langue du formulaire, pays de résidence etc …).

Présentation du formulaire

Une fois l’URL obtenue, elle peut être présentée à l’utilisateur par exemple par redirection HTTP (HTTP 3xx) ou via une iframe.

Par exemple dans le cas d’une iframe :

<html>
    <body>
        <iframe width="700" height="500" src="<?php echo getForm(getToken()) ?>"></iframe>
    </body>
</html>

Intégration avec iframeResizer

iframeResizer est une librairie javascript permettant l’intégration sans couture d’une iframe au sein d’un site.

dans ce cas l’appel HTTP de génération de l’URL du formulaire doit contenir le paramètre “iframe” positionné à “true”.

<html>
    <body>
        <style>iframe { width: 1px; min-width: 100%; }</style>
        <script src="http://url-du-script/iframeResizer.min.js"/>
        <script>iFrameResize({ log: true }, '#myIframe');</script>
        <iframe id="myIframe" src="<?php echo getForm(getToken()) ?>"></iframe>
</body>
</html>

Déclencher un rechargement de la frame parente

Dans le cas d’une intégration par iframe, il peut être souhaité de déclencher un événement de rechargement de la frame parente.

dans ce cas l’appel HTTP de génération de l’URL du formulaire doit contenir le paramètre “callback” positionné à l’URL à appeler.

<html>
    <body>
        <script type="application/javascript">
            window.addEventListener("message", messageListener, false);
            function messageListener(event) {
                console.log(event);
                if (event.data.startsWith('consent-receipt-callback/')) {
                    const callback = event.data.replace('consent-receipt-callback/', '');
                    window.location.assign(callback);
                }
            }
        </script>    
        <iframe width="700" height="500" src="<?php echo getForm(getToken()) ?>"></iframe>
    </body>
</html>

Références

  • No labels