Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

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 = "https://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('https://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 : 
 Contributeurs à cette page : tregagnon, Delapouite, matteodelabre
 Dernière mise à jour par : tregagnon,