aboutsummaryrefslogtreecommitdiff
path: root/files/fr/archive/mozilla/persona/api_de_verification/index.html
blob: 04a840014140f2607d3c7202768421935ad02130 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
---
title: API de vérification
slug: Archive/Mozilla/Persona/API_de_verification
tags:
  - Persona
translation_of: Archive/Mozilla/Persona/Remote_Verification_API
---
<h2 id="Summary" name="Summary">Résumé</h2>
<p>Lorsqu'un utilisateur essaie de se connecter sur un site, son navigateur génère un objet de données appelé une <em>assertion</em>. 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.</p>
<p>Les assertions peuvent être vérifiées localement, ou en utilisant l'API disponible à l'adresse <span class="link-https"><code>https://verifier.login.persona.org/verify</code></span>. Cette page décrit comment utiliser l'API.</p>
<h2 id="Methods" name="Methods">Méthode</h2>
<p>Envoyez une requête HTTP POST à l'adresse <code>https://verifier.login.persona.org/verify</code>.</p>
<h3 id="Parameters" name="Parameters">Paramètres</h3>
<dl>
 <dt>
  <code>assertion</code></dt>
 <dd>
  L'assertion est fournie par l'utilisateur. Disponible en tant que premier paramètre passé à la fonction <code>onlogin</code> dans <a href="/fr/docs/Web/API/Navigator/id/watch" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.watch()</code></a>.</dd>
 <dt>
  <code>audience</code></dt>
 <dd>
  Le protocole, nom de domaine et port de votre site. Par exemple : "<code>https://example.com:443</code>".</dd>
</dl>
<h3 id="Return_values" name="Return_values">Valeurs de retour</h3>
<p>La requête retourne un objet JSON contenant une propriété <code>status</code> qui peut valoir "okay" ou "failure". En fonction de ces valeurs, l'objet peut contenir des éléments additionels listés ci-dessous.</p>
<h4 id="okay" name="okay">"okay"</h4>
<p>L'assertion est valide.</p>
<p>Dans ce cas, l'objet JSON contient en plus les propriétés suivantes :</p>
<table class="standard-table" style="width: 80%;">
 <tbody>
  <tr>
   <td>"<code>email</code>"</td>
   <td>L'adresse mail contenue dans l'assertion, pour permettre la connexion de l'utilisateur.</td>
  </tr>
  <tr>
   <td>"<code>audience</code>"</td>
   <td>La valeur audience contenue dans l'assertion. Doit être l'URL de votre propre site.</td>
  </tr>
  <tr>
   <td>"<code>expires</code>"</td>
   <td>La date à laquelle expire l'assertion, exprimée The date the assertion expires, exprimé comme une <a href="/fr/docs/Référence_de_JavaScript_1.5_Core/Objets_globaux/Date/valueOf" title="en/JavaScript/Reference/Global_Objects/Date/valueOf">valeur primitive de l'objet Date</a> qui est le nombre de secondes écoulées depuis le 1er Janvier 1970 00h00 GMT.</td>
  </tr>
  <tr>
   <td>"<code>issuer</code>"</td>
   <td>Le nom du fournisseur d'identité ayant fourni l'assertion.</td>
  </tr>
 </tbody>
</table>
<h4 id="failure" name="failure">"failure"</h4>
<p>L'assertion n'est pas valide.</p>
<p><span style="line-height: 1.572;">Dans ce cas, l'objet JSON contient une propriété additionnelle :</span></p>
<table class="compact-table">
 <tbody>
  <tr>
   <td><code>"reason"</code></td>
   <td>Une chaîne de caractère expliquant pourquoi la validation de l'assertion a échoué</td>
  </tr>
 </tbody>
</table>
<h2 id="Examples" name="Examples">Exemples</h2>
<h3 id="node.js" name="node.js">node.js</h3>
<p>Cet exemple utilise un serveur node.js utilisant express.js</p>
<pre class="brush: 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 &amp;&amp; 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");
});

</pre>
<p>via <a class="link-https" href="https://github.com/lloyd/myfavoritebeer.org/blob/06255b960e1f9078bc935c1c7af0662f33c88818/server/main.js#L112">Lloyd Hilaiel</a></p>
<h3 id="PHP" name="PHP">PHP</h3>
<pre class="brush: 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 &lt; 5.2 et écrire votre propre filtre
$params = 'assertion=' . urlencode($assert) . '&amp;audience=' .
           urlencode('http://example.com:80');
$ch = curl_init();
$options = array(
    CURLOPT_URL =&gt; $url,
    CURLOPT_RETURNTRANSFER =&gt; TRUE,
    CURLOPT_POST =&gt; 2,
    CURLOPT_POSTFIELDS =&gt; $params
);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
echo $result;</pre>
<p>Via <a class="link-https" href="https://github.com/codepo8/BrowserID-login-with-PHP/blob/184fdb74c8a554461c262875859968154d09288e/verify.php">Christian Heilmann</a></p>
<p>Note: si vous envoyez les paramètres assertion et audience en tant qu'objet JSON, ils <strong>ne doivent pas</strong> ê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 <strong>doivent</strong> être encodés.</p>