mozilla
Vos résultats de recherche

    API de vérification

    Résumé

    Lorsqu'un utilisateur essaie de se connecter sur un site, son navigateur génère un objet de données appelé une assertion. Il s'agit essentiellement d'une adresse mail cryptée. Le navigateur envoie cette assertion au site, qui doit vérifier sa validité avant de connecter l'utilisateur.

    Les assertions peuvent être vérifiées localement, ou en utilisant l'API disponible à l'adresse https://verifier.login.persona.org/verify. Cette page décrit comment utiliser l'API.

    Méthode

    Envoyez une requête HTTP POST à l'adresse https://verifier.login.persona.org/verify.

    Paramètres

    assertion
    L'assertion est fournie par l'utilisateur. Disponible en tant que premier paramètre passé à la fonction onlogin dans navigator.id.watch().
    audience
    Le protocole, nom de domaine et port de votre site. Par exemple : "https://example.com:443".

    Valeurs de retour

    La requête retourne un objet JSON contenant une propriété status qui peut valoir "okay" ou "failure". En fonction de ces valeurs, l'objet peut contenir des éléments additionels listés ci-dessous.

    "okay"

    L'assertion est valide.

    Dans ce cas, l'objet JSON contient en plus les propriétés suivantes :

    "email" L'adresse mail contenue dans l'assertion, pour permettre la connexion de l'utilisateur.
    "audience" La valeur audience contenue dans l'assertion. Doit être l'URL de votre propre site.
    "expires" La date à laquelle expire l'assertion, exprimée The date the assertion expires, exprimé comme une valeur primitive de l'objet Date qui est le nombre de secondes écoulées depuis le 1er Janvier 1970 00h00 GMT.
    "issuer" Le nom du fournisseur d'identité ayant fourni l'assertion.

    "failure"

    L'assertion n'est pas valide.

    Dans ce cas, l'objet JSON contient une propriété additionnelle :

    "reason" Une chaîne de caractère expliquant pourquoi la validation de l'assertion a échoué

    Exemples

    node.js

    Cet exemple utilise un serveur node.js utilisant express.js

    var express = require("express"),
        app = express.createServer(),
        https = require("https"),
        querystring = require("querystring");
    /* ... */
    
    // La variable audience doit correspondre à ce qu'affiche la barre d'adresse du navigateur,
    // ce qui inclut le protocole, le nom de domaine et le port
    var audience = "http://localhost:8888";
    
    app.post("/authenticate", function(req, res) {
      var vreq = https.request({
        host: "verifier.login.persona.org",
        path: "/verify",
        method: "POST"
      }, function(vres) {
        var body = "";
        vres.on('data', function(chunk) { body+=chunk; } )
            .on('end', function() {
              try {
                var verifierResp = JSON.parse(body);
                var valid = verifierResp && verifierResp.status === "okay";
                var email = valid ? verifierResp.email : null;
                req.session.email = email;
                if (valid) {
                  console.log("l'assertion a été vérifiée avec succès pour le mail :", email);
                  res.json(email);
                } else {
                  console.log("l'assertion n'a pas été validée pour la raison suivante :", verifierResp.reason);
                  res.send(verifierResp.reason, 403);
                }
              } catch(e) {
                console.log("le verifier n'a pas renvoyé un objet JSON");
                // bogus response from verifier!
                res.send("bogue de la part du verifier !", 403);
    
              }
            });
      });
    
      vreq.setHeader('Content-Type', 'application/x-www-form-urlencoded');
    
      var data = querystring.stringify({
        assertion: req.body.assertion,
        audience: audience
      });
    
      vreq.setHeader('Content-Length', data.length);
      vreq.write(data);
      vreq.end();
    
      console.log("vérification de l'assertion");
    });
    
    

    via Lloyd Hilaiel

    PHP

    $url = 'https://verifier.login.persona.org/verify';
    $assert = filter_input(
        INPUT_POST,
        'assertion',
        FILTER_UNSAFE_RAW,
        FILTER_FLAG_STRIP_LOW|FILTER_FLAG_STRIP_HIGH
    );
    //utiliser la superglobale $_POST pour PHP < 5.2 et écrire votre propre filtre 
    $params = 'assertion=' . urlencode($assert) . '&audience=' .
               urlencode('http://example.com:80');
    $ch = curl_init();
    $options = array(
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_POST => 2,
        CURLOPT_POSTFIELDS => $params
    );
    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);
    curl_close($ch);
    echo $result;

    Via Christian Heilmann

    Note: si vous envoyez les paramètres assertion et audience en tant qu'objet JSON, ils ne doivent pas être encodés. S'ils sont envoyés en tant que paramètres normaux d'une requête HTTP POST, comme dans l'exemple ci-dessus, ils doivent être encodés.

    Étiquettes et contributeurs liés au document

    Étiquettes : 
    Contributors to this page: Delapouite, MattouFP, tregagnon
    Dernière mise à jour par : tregagnon,