diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/fr/archive/mozilla/persona | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/fr/archive/mozilla/persona')
20 files changed, 1381 insertions, 0 deletions
diff --git a/files/fr/archive/mozilla/persona/api_de_verification/index.html b/files/fr/archive/mozilla/persona/api_de_verification/index.html new file mode 100644 index 0000000000..04a8400141 --- /dev/null +++ b/files/fr/archive/mozilla/persona/api_de_verification/index.html @@ -0,0 +1,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 && 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 < 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;</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> diff --git a/files/fr/archive/mozilla/persona/bootstrapping_persona/index.html b/files/fr/archive/mozilla/persona/bootstrapping_persona/index.html new file mode 100644 index 0000000000..ed8caf194e --- /dev/null +++ b/files/fr/archive/mozilla/persona/bootstrapping_persona/index.html @@ -0,0 +1,44 @@ +--- +title: Persona Hosted Services +slug: Archive/Mozilla/Persona/Bootstrapping_Persona +translation_of: Archive/Mozilla/Persona/Bootstrapping_Persona +--- +<p>Pour réussir et être vraiment décentralisé, Persona a besoin du soutien de trois groupes différent :</p> + +<ul> + <li><strong>Les Sites Web</strong> doivent permettre à leurs utilisateurs de se connecter avec Persona.</li> + <li><strong>Les Navigateurs Web</strong> doivent implémanter l'API <a href="/en/DOM/navigator.id" title="navigator.id"><code>navigator.id</code></a>.</li> + <li><strong>Les Fournisseurs d'Email</strong> doivent devenir des Fournisseur d'identité (IdPs).</li> +</ul> + +<p>Cela crée un cercle vicieux : aucun de ces groupes n'auraient un intêret significatif tant qu'il n'y avait un grand nombre d'utilisateur, mais un système distribué ne peut pas avoir un grand nombre d'utilisateur sans le soutien des groupes ci-dessus.</p> + +<p>Pour résoudre ce problème, <a class="link-https" href="https://login.persona.org" rel="freelink">https://login.persona.org</a> enregistre trois resources :</p> + +<ol> + <li>Un Fournisseur d'Identité de secours, qui es disponible pour les utilisateurs dont les fournisseurs d'email ne supporte pas Persona.</li> + <li>A <a href="/en-US/docs/persona/Browser_compatibility" title="/en-US/docs/persona/Browser_compatibility">cross-browser</a>, JavaScript implementation of the <code><a href="/en/DOM/navigator.id" title="navigator.id">navigator.id</a></code> APIs for browsers without native support.</li> + <li>A hosted verification API to make it easy for sites to verify user credentials.</li> +</ol> + +<p>Together, this allows web sites to offer Persona to users regardless of browser and without email providers needing to get involved.</p> + +<p>These services are temporary, and the Persona system is designed such that they transparently and automatically drop away as native support gets added to browsers and email providers. Thus, they will become less relevant as Persona matures, and may eventually be removed all together. At that point, <a href="https://login.persona.org" rel="freelink">https://login.persona.org</a> won't feature at all in the Persona system.</p> + +<h2 id="Fallback_Identity_Provider">Fallback Identity Provider</h2> + +<p>Any domain can become an Identity Provider as long as relying parties are willing to trust the certificates issued by that domain. We expect email providers to act as an IdPs for the addresses they administer, making the user experience of Persona seamless for those users. It allows the user to leverage their existing relationship with the email provider when authenticating at other sites.</p> + +<p>However, email providers won't become IdPs until there is significant demand from their users. In the meantime, Mozilla operates a fallback IdP at <a href="https://login.persona.org" rel="freelink">https://login.persona.org</a>. This fallback allows users to sign into sites with their existing email address, regardless of whether or not the email provider supports Persona. The fallback IdP will certify email addresses from any domain using its own authentication flow and its own password, so long as the user is able to prove control of an address by clicking a link in a verification email.</p> + +<p>Once an email provider supports Persona natively, its users will transparently begin use it instead of the fallback IdP.</p> + +<h2 id="Cross-browser_API_Library">Cross-browser API Library</h2> + +<p>For Persona to work, the user's browser must support the <a href="/en/DOM/navigator.id" title="navigator.id">navigator.id</a> API. Eventually, browsers will add native support for these APIs, but until then a <a href="/en-US/docs/persona/Browser_compatibility" title="/en-US/docs/persona/Browser_compatibility">cross-browser </a>implementation is available at <a href="https://login.persona.org/include.js" title="https://login.persona.org/include.js">https://login.persona.org/include.js</a>. By including this file, web sites can already begin using Persona. Once native implementations of the API are available, the library will automatically defer to those.</p> + +<h2 id="Remote_verification_service">Remote verification service</h2> + +<p>At <a href="https://login.persona.org" rel="freelink">https://login.persona.org</a> Mozilla hosts a <a href="/en/Persona/Remote_Verification_API" title="en/BrowserID/Remote_Verification_API">remote verification service</a> that web sites can use to verify identity assertions sent from users. This makes it simpler for web sites to support Persona as it takes care of parsing the assertion and cryptographically verifying user identities.</p> + +<p>Once the Persona data formats stabilize, verification will most likely be done locally on each site's server. This transition is especially important for user privacy, since it will make it impossible for the fallback IdP to track its users. Even with remote verification, users of native IdPs can't be tracked by that IdP.</p> diff --git a/files/fr/archive/mozilla/persona/branding/index.html b/files/fr/archive/mozilla/persona/branding/index.html new file mode 100644 index 0000000000..6baff2ccdc --- /dev/null +++ b/files/fr/archive/mozilla/persona/branding/index.html @@ -0,0 +1,44 @@ +--- +title: Ressources promotionnelles +slug: Archive/Mozilla/Persona/branding +tags: + - Persona +translation_of: Archive/Mozilla/Persona/User_interface_guidelines +--- +<h2 id="Se_connecter_avec_des_boutons_Persona">Se connecter avec des boutons Persona</h2> +<h3 id="Images">Images</h3> +<p>Le bouton "Se connecter" est disponible en trois versions et trois couleurs:</p> +<table> + <thead> + <tr> + <th scope="row"> </th> + <th scope="col">Se connecter avec votre Email</th> + <th scope="col">Se connecter avec Persona</th> + <th scope="col">Se connecter</th> + </tr> + </thead> + <tbody> + <tr> + <th scope="row">Noir</th> + <td><img alt="" src="/files/3955/email_sign_in_black.png" style="width: 202px; height: 25px;"></td> + <td><img alt="" src="/files/3961/persona_sign_in_black.png" style="width: 185px; height: 25px;"></td> + <td><img alt="" src="/files/3967/plain_sign_in_black.png" style="width: 95px; height: 25px;"></td> + </tr> + <tr> + <th scope="row">Bleu</th> + <td><img alt="" src="/files/3957/email_sign_in_blue.png" style="width: 202px; height: 25px;"></td> + <td><img alt="" src="/files/3963/persona_sign_in_blue.png" style="width: 185px; height: 25px;"></td> + <td><img alt="" src="/files/3969/plain_sign_in_blue.png" style="width: 95px; height: 25px;"></td> + </tr> + <tr> + <th scope="row">Rouge</th> + <td><img alt="" src="/files/3959/email_sign_in_red.png" style="width: 202px; height: 25px;"></td> + <td><img alt="" src="/files/3965/persona_sign_in_red.png" style="width: 185px; height: 25px;"></td> + <td><img alt="" src="/files/3971/plain_sign_in_red.png" style="width: 95px; height: 25px;"></td> + </tr> + </tbody> +</table> +<h3 id="En_CSS">En CSS</h3> +<p><a href="http://sawyerhollenshead.com/" title="http://sawyerhollenshead.com/">Sawyer Hollenshead</a> a créé une série d'excellents boutons en CSS. <a href="/files/3973/persona-css-buttons.zip" title="/files/3973/persona-css-buttons.zip">Télécharger (.zip)</a></p> +<h2 id="Informations_complémentaires">Informations complémentaires</h2> +<p>Vous pouvez obtenir des informations complémentaires sur la conception visuelle de Persona dans <a href="http://people.mozilla.org/~smartell/persona/" title="http://people.mozilla.org/~smartell/persona/">les embelissement du style de Sean Martell</a>.</p> diff --git a/files/fr/archive/mozilla/persona/browser_compatibility/index.html b/files/fr/archive/mozilla/persona/browser_compatibility/index.html new file mode 100644 index 0000000000..1bdf4c4e5d --- /dev/null +++ b/files/fr/archive/mozilla/persona/browser_compatibility/index.html @@ -0,0 +1,82 @@ +--- +title: Compatibilité des navigateurs +slug: Archive/Mozilla/Persona/Browser_compatibility +tags: + - Persona +translation_of: Archive/Mozilla/Persona/Browser_compatibility +--- +<h2 id="Navigateurs_supportés">Navigateurs supportés</h2> +<p>Persona est développé, testé, et supporté avec les navigateurs suivants. Grâce à la bibliothèque JavaScript inter-plateformes de Persona, les utilisateurs n'ont pas besoin de greffons pour utiliser Persona.</p> +<table> + <tbody> + <tr> + <th colspan="3" style="text-align: center; background-color: #d3d7cf;" scope="row"><strong>Navigateurs pour ordinateur de bureau</strong></th> + </tr> + <tr> + <th scope="row"><strong>Internet Explorer</strong></th> + <td colspan="2" style="background-color: #8ae234;" rowspan="1">8.0<sup>*</sup>, 9.0<sup>†</sup>, 10.0** (mais voir le <a href="#Mode_de_compatibilit.C3.A9_d'Internet_Explorer">mode de compatibilité</a> ci-dessous)</td> + </tr> + <tr> + <th scope="row"><strong>Firefox</strong></th> + <td colspan="2" style="background-color: #8ae234;">Versions courante, stable, Beta, Aurora, Nightly, et ESR.<br> + Précédente version stable</td> + </tr> + <tr> + <th scope="row"><strong>Chrome</strong></th> + <td colspan="2" style="background-color: #8ae234;">Dernière version stable</td> + </tr> + <tr> + <th scope="row"><strong>Safari</strong></th> + <td colspan="2" style="background-color: #8ae234;">Dernière version stable</td> + </tr> + <tr> + <th scope="row"><strong>Opera</strong></th> + <td colspan="2" style="background-color: #8ae234;">Dernière version stable<sup>‡</sup></td> + </tr> + <tr> + <th colspan="3" style="text-align: center; background-color: #d3d7cf;" scope="row"><strong>Navigateurs iOS</strong></th> + </tr> + <tr> + <th scope="row"><strong>Safari</strong> Mobile</th> + <td colspan="2" style="background-color: #8ae234;" rowspan="1">iOS 5.x — 6.x</td> + </tr> + <tr> + <th colspan="3" style="text-align: center; background-color: #d3d7cf;" scope="row"><strong>Navigateurs Android</strong></th> + </tr> + <tr> + <th scope="row"><strong>Navigateur par défaut</strong></th> + <td colspan="2" style="background-color: #8ae234;" rowspan="1">2.x — 4.x</td> + </tr> + <tr> + <th scope="row"><strong>Firefox</strong></th> + <td colspan="2" style="background-color: #8ae234;">Versions stable courante, Beta, Aurora, et Nightly<br> + Précédente version stable</td> + </tr> + <tr> + <th scope="row"><strong>Chrome</strong></th> + <td colspan="2" style="background-color: #8ae234;">Dernière version stable</td> + </tr> + </tbody> +</table> +<p><sup>*</sup> : pour Windows XP. <sup>†</sup> : pour Windows Vista et Windows 7. ** : Windows 8. <sup>‡</sup> : selon durée de vie.</p> +<h2 id="Navigateurs_non_supportés">Navigateurs non supportés</h2> +<ul> + <li>Internet Explorer versions 6.0 et 7.0 non supportés. Les utilisateurs seront incités à mettre à jour leur navigateur.</li> + <li>Google Chrome Frame non supporté et ne fonctionne pas.</li> + <li>Les navigateurs tierces sur iOS ne sont pas supportés et ne fonctionnent pas. Le support pourra être ajouté par la suite (<a href="https://github.com/mozilla/browserid/issues/2034" title="https://github.com/mozilla/browserid/issues/2034">Issue #2034</a>).</li> +</ul> +<h2 id="Mode_de_compatibilité_d'Internet_Explorer">Mode de compatibilité d'Internet Explorer</h2> +<p>À partir de la version 8.0, Internet Explorer supporte une fonctionnalité appelée <em>Mode de compatibilité</em>, dans lequel le navigateur peut être amené à émuler une version antérieure à la 8.0, en affichant la page. Cette fonctionnalité peut être contrôlée de trois façons différentes :</p> +<ul> + <li>À travers un paramètre dans le navigateur ;</li> + <li>En se basant sur la présence et la valeur de la déclaration DOCTYPE de la page ;</li> + <li>À travers une instruction envoyée depuis le site, utilisant l'en-tête <code>X-UA-Compatible</code>, par un en-tête HTTP ou une balise <code><meta></code> dans la page. Cette méthode peut supplanter les deux autres.</li> +</ul> +<p>Parce que les versions Internet Explorer avant la 8.0 ne sont pas supportées par Persona, toute version d'Internet Explorer qui est configurée pour émuler une version antérieure à la 8.0, ne fonctionnera pas avec Persona.</p> +<h2 id="Autres_navigateurs">Autres navigateurs</h2> +<p>Bien qu'ils ne soient pas explicitement supportés, un navigateur incluant aussi bien <a href="/fr/docs/Web/API/Window/postMessage" title="La méthode window.postMessage permet une communication inter-domaine en toute sécurité. Normalement, les scripts de différentes pages sont autorisés à accéder les uns aux autres si et seulement si les pages depuis lesquelles ils sont exécutés ont des URL de même origine, c'est-à-dire avec le même protocole (généralement http ou https), le même numéro de port (80 étant le port par défaut pour http), et le même nom d'hôte (à condition que document.domain soit initialisé à la même valeur par les deux pages). window.postMessage fournit un mécanisme contrôlé pour contourner cette restriction d'une manière sécurisée si bien utilisée."><code>window.postMessage()</code></a> que <a href="/fr/docs/Web/API/Storage" title="L'interface Storage de l'API Web Storage donne accès au stockage de session (SessionStorage) ou au stockage local (LocalStorage) pour un domaine donné, vous permettant par exemple d'ajouter, de modifier ou de supprimer des éléments enregistrés."><code>localStorage</code></a> devrait fonctionner. Ces API ont été rendues disponibles dans les principaux navigateurs depuis mars 2010.</p> +<h2 id="Problèmes_connus">Problèmes connus</h2> +<ul> + <li>Les utilisateurs d'Android 2.x qui n'ont pas sélectionné de navigateur par défaut ne pourront pas se connecter (<a href="https://github.com/mozilla/browserid/issues/1854" title="https://github.com/mozilla/browserid/issues/1854">Issue #1854</a>) ;</li> + <li>Les navigateurs doivent accepter les cookies tiers pour bénéficier de toutes les fonctionnalités (<a href="https://github.com/mozilla/browserid/issues/1352" title="https://github.com/mozilla/browserid/issues/1352">Issue #1352</a>).</li> +</ul> diff --git a/files/fr/archive/mozilla/persona/considerations_de_securite/index.html b/files/fr/archive/mozilla/persona/considerations_de_securite/index.html new file mode 100644 index 0000000000..d067791639 --- /dev/null +++ b/files/fr/archive/mozilla/persona/considerations_de_securite/index.html @@ -0,0 +1,57 @@ +--- +title: Considérations de sécurité +slug: Archive/Mozilla/Persona/Considerations_de_securite +tags: + - Persona +translation_of: Archive/Mozilla/Persona/Security_Considerations +--- +<p>Lorsque vous ajoutez Persona sur votre site, il s'occupe du fardeau que représente la sécurité tant qu'il le peut. Cependant, certains aspects de la sécurité peuvent uniquement être gérés par votre site. Ils sont listés ci-dessous.</p> +<h2 id="Essential_practices" name="Essential_practices">Pratiques essentielles</h2> +<h3 id="Verify_assertions_on_your_server" name="Verify_assertions_on_your_server">Vérifier les assertions côté serveur</h3> +<p>Lorsque vous utilisez Persona, les assertions d'identité sont passées à la fonction <code> onlogin</code> passée à <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>. Vous devriez <em>toujours</em> envoyer l'assertion au serveur pour vérification, et seul votre serveur devrait décider de donner à l'utilisateur les permissions additionnelles selon le résultat de la vérification:</p> +<pre class="brush:js;">// Dans navigator.id.watch({ ... +onlogin: function(assertion) { + // Un utilisateur veut se connecter ! Vous devez: + // 1. Envoyer l'assertion à votre backend pour vérification et création d'une session. + // 2. Mettre à jour l'interface. +}, +</pre> +<p>Si vous essayez de vérifier l'assertion en utilisant le JavaScript client, un utilisateur malveillant pourrait usurper l'identité d'un utilisateur légitime en injectant localement du code et en modifiant votre JavaScript. Ceci est possible parce que vous n'êtes pas en contrôle total de ce qui se passe dans le navigateur de l'utilisateur, là où le JavaScript est exécuté.</p> +<p>Encore une fois, vous devriez <em>systématiquement</em> envoyer l'assertion au serveur pour vérification. Même si vous utilisez l'API de vérification locale.</p> +<h3 id="Explicitly_specify_the_audience_parameter" name="Explicitly_specify_the_audience_parameter">Spécifiez explicitement le paramètre audience</h3> +<p>Pour vérifier une assertion, vous pouvez envoyer une requête POST à l'adresse <code>https://verifier.login.persona.org/verify</code>. La requêtre inclut un paramètre appelé <code>audience :</code></p> +<pre><code>assertion=<ASSERTION>&audience=https://monsite.com:443"</code></pre> +<p>Le paramètre <code>audience</code> est requis. Vous devriez toujours spécifier l'audience explicitement dans votre code, où dans votre configuration. Attention à :</p> +<ul> + <li>Ne pas croire le header Host envoyé par le navigateur.</li> + <li>Ne pas croire un paramètre explicite envoyé par le navigateur, mais généré par votre JavaScript en utilisant par exemple <code>document.location</code>.</li> +</ul> +<p>Si vous faites confiance au navigateur pour vous fournir l'audience, alors il devient possible pour un site malveillant de réutiliser les assertions de <em>son</em> site pour se connecter sur <em>votre</em> site.</p> +<h3 id="Verify_SSL_certificates" name="Verify_SSL_certificates">Vérifier les certificats SSL</h3> +<p>Pour vérifier une assertion, vous pouvez envoyer une requête POST à l'adresse <code>https://verifier.login.persona.org/verify</code>. Vous devez vous assurer que la requête HTTPS vérifie le certificat envoyé par le serveur contre un certificat-racine sûr. Si vous ne le faites pas, alors un hacker pourrait se faire passer pour <code>verifier.login.persona.org</code> et renvoyer des vérifications erronées.</p> +<p>Vérifiez que la librairie utilisée vérifie les certicicats correctements, et que vous l'intialisez avec les certificats-racines appropriés.</p> +<p><span style="line-height: 1.572;">Par exemple, le module standard de Python 2.7 ne valide pas les certificats serveurs. Nous recommandons plutôt d'utiliser les modules "</span><a class="external" href="http://pypi.python.org/pypi/requests" style="line-height: 1.572;">requests</a><span style="line-height: 1.572;">" (en) ou "</span><a class="external" href="http://pypi.python.org/pypi/urllib3" style="line-height: 1.572;" title="http://pypi.python.org/pypi/urllib3">urllib3</a><span style="line-height: 1.572;">" (en) en Python 2.x, ou la classe standard <code>http.client.HTTPSConnection</code></span> en Python 3.x<span style="line-height: 1.572;">. En Perl, assurez-vous d'utiliser au moins la version 6.0 de <code>libwww-perl</code></span>. En fonction du langage, de la bibliothèque et du système d'exploitation utilisé, vous pourriez devoir fournir soit une liste de certificats-racines sûrs, soit le seul certificat utilisé par <code>verifier.login.persona.org</code>.</p> +<h3 id="Implement_CSRF_protection" name="Implement_CSRF_protection">Implémenter une protection CSRF</h3> +<p>Lors d'une attaque de connexion CSRF (Cross-Site Request Forgery, contrefaçon de requêtes trans-sites), un hacker utilise une contrefaçon de requête trans-site pour connecter un utilisateur sur un site en utilisant ses identifiants.</p> +<p>Par exemple : un utilisateur visite un site web malveillant contenant un élément <code>form</code>. L'attribut <font face="Courier New, Andale Mono, monospace"><span style="line-height: normal;">action</span></font> du formulaire est défini sur une requête HTTP POST pointant vers <a class="external" href="http://www.google.com/login" title="http://www.google.com/login">http://www.google.com/login</a>, en envoyant le nom d'utilisateur et le mot de passe du hacker. Lorsque l'utilisateur envoie le formulaire, sa requête est envoyée à Google, la connexion est faite avec succès et le serveur Google définit un cookie dans le navigateur de l'utilisateur. À présent, l'utilisateur est sans le savoir connecté sur le compte Google du hacker.</p> +<p>Cette attaque peut être utilisée pour récupérer des informations sensibles à propos de l'utilisateur. Par exemple, la fonctionnalité d'<a class="link-https" href="https://www.google.com/history/">Historique Web</a> de Google recense tous les mots-clefs de recherche de l'utilisateur. Si l'utilisateur est connecté sur le compte Google du hacker ayant la fonctionnalité d'Historique Web activée, alors l'utilisateur donne toutes ses informations au hacker.</p> +<p>Les attaques de connexion CSRF, et les défenses potentielles à mettre en place contre elles, sont documentées plus exhaustivement dans <a class="external" href="http://www.adambarth.com/papers/2008/barth-jackson-mitchell-b.pdf">Défenses robustes contre les contrefaçons de requêtes trans-sites</a> (PDF, en). Elles ne sont pas spécifiques à Persona : la plupart des mécanismes de connexion sont potentiellement vulnérables face à elles.</p> +<p>Il y a plusieurs techniques qui peuvent être utilisées pour protéger un site contre les attaques de connexion CSRF, qui sont documentées plus exhaustivement dans l'étude ci-dessus.</p> +<p>Une de ces approches est de créer un identifiant secret dans le serveur, partagé avec le navigateur et de demander au navigateur de le fournir lors de requêtes de connexions. Par exemple :</p> +<ol> + <li>Dès que l'utilisateur arrive sur votre site, avant qu'il n'essaie de se connecter, créez une session pour lui sur le serveur. Enregistrez l'ID de la session dans un cookie de navigateur.</li> + <li>Sur le serveur, générez une chaîne de caractères aléatoire d'au moins 10 caractères alphanumériques. Un UUID généré aléatoirement est une bonne solution. C'est le jeton CSRF. Enregistrez-le dans la session.</li> + <li>Donnez le jeton CSRF au navigateur en l'incluant dans du JavaScript ou dans le HTML en tant que variable de formulaire cachée.</li> + <li>Assurez-vous que les envois AJAX ou les requêtes POST de formulaires incluent le jeton CSRF.</li> + <li>Côté serveur, avant d'accepter une assertion, assurez-vous que le jeton CSRF envoyé correspond au jeton CSRF enregistré dans la session.</li> +</ol> +<h2 id="Enhancements" name="Enhancements">Améliorations</h2> +<h3 id="Content_Security_Policy_(CSP)" name="Content_Security_Policy_(CSP)">Politique de sécurité du contenu (CSP)</h3> +<p>La <a href="/fr/docs/Sécurité/CSP" title="Security/CSP">Politique de sécurité du contenu</a> (CSP) est une couche supplémentaire de sécurité qui aide à détecter et atténuer certains types d'attaques, dont le Scriptage Trans-sites (XSS) et les attaques d'injection de données. Ces attaques sont utilisées pour beaucoup de choses du vol de données à la dégradation du site ou la distribution de logiciels malveillants.</p> +<p>Si vous utilisez la CSP sur votre site, vous devriez modifier votre politique pour inclure Persona. En fonction de votre politique, vous pourriez avoir besoin de :</p> +<ul> + <li>Supprimer les URI <font face="Courier New, Andale Mono, monospace"><span style="line-height: normal;">javascript:</span></font> les remplacer par du code chargé depuis un fichier de script additionnel. Ce fichier peut parcourir les éléments d'après leur ID et attacher des événements aux éléments en modifiant la propriété <a href="/fr/docs/Web/API/Element/onclick" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>onclick</code></a> ou en apppelant <a href="/fr/docs/Web/API/Element/addEventListener" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>addEventListener()</code></a>.</li> + <li>Autoriser <code>https://login.persona.org</code> aussi bien en tant que <code>script-src</code> qu'en tant que <code>frame-src</code> afin que votre site puisse charger le fichier <code>include.js</code> local et que ce fichier puisse communiquer avec l'implémentation alternative de Persona.</li> +</ul> +<p>Une configuration Apache d'example pourrait inclure :</p> +<pre><span class="diff-content"><span class="idiff">Header set X-Content-Security-Policy: "default-src 'self'; frame-src 'self' https://login.persona.org ; script-src 'self' https://login.persona.org"</span></span></pre> diff --git a/files/fr/archive/mozilla/persona/identity_provider_overview/index.html b/files/fr/archive/mozilla/persona/identity_provider_overview/index.html new file mode 100644 index 0000000000..6a29be7c8f --- /dev/null +++ b/files/fr/archive/mozilla/persona/identity_provider_overview/index.html @@ -0,0 +1,59 @@ +--- +title: Identity Provider Overview +slug: Archive/Mozilla/Persona/Identity_Provider_Overview +translation_of: Archive/Mozilla/Persona/Identity_Provider_Overview +--- +<p>Un Fournisseur d'Identité (Identity Provider ou IdP) Persona est un domaine qui enregistre et certifie directement l'identité de ses utilisateurs. Parce que les identités de Persona sont basées sur les adresses email, tous domaine offrant des emails à leurs utilisateurs peut simplement devenir un IdP.</p> + +<p>Si vous avez un nom de domaine, vous pouvez devenir un IdP Persona en implémentant un support pour le protocole BrowserID.</p> + +<p><em>If you have a domain name, you can become a Persona IdP by implementing support for the underlying BrowserID protocol.</em></p> + +<h2 id="Le_document_support_IdP">Le document support IdP</h2> + +<p>Domains advertise their ability to act as IdPs by publishing a support document at <code>/.well-known/browserid</code>. This JSON-formatted document contains three values:</p> + +<ul> + <li><code>public-key</code>: The public part of the domain's cryptographic key.</li> + <li><code>authentication</code>: The domain's page for asking users to log in.</li> + <li><code>provisioning</code>: The domain's page for certifying its users' identities.</li> +</ul> + +<p>Websites use the <code>public-key</code> to verify the authenticity of users' identity assertions.</p> + +<p>Browsers use the <code>authentication</code> and <code>provisioning</code> values to obtain certification of their user's identity.</p> + +<p>For more information, including how domains can delegate to other IdPs, see the <a href="https://developer.mozilla.org/en-US/docs/Persona/.well-known-browserid" title="https://developer.mozilla.org/en-US/docs/BrowserID/.well-known-browserid"><code>/.well-known/browserid</code> documentation</a>.</p> + +<h2 id="Comment_le_navigateur_interagit-t-il_avec_les_IdPs">Comment le navigateur interagit-t-il avec les IdPs ?</h2> + +<p>Pour montrer l'interaction entre les Navigateurs et les IdPs, nous allons regarder ce qui doit se passer la première fois que <code>alice@example.com</code> essaie de se connecter à un site en utilisant Persona.</p> + +<ol> + <li>Le navigateur d'alice récupère le document support à l'url <code>https://example.com/.well-known/browserid</code>.</li> + <li>Alice's browser invisibly loads the <code>provisioning</code> page for <code>example.com</code> and asks it to sign a public key certifying Alice's identity.</li> + <li>Before signing the key, <code>example.com</code> needs proof that the user really is Alice, so it tells the browser that she needs to authenticate.</li> + <li>Alice's browser shows Alice the <code>authentication</code> page for <code>example.com</code> and she signs in, establishing a new session at <code>example.com</code>.</li> + <li>Alice's browser reloads the <code>provisioning</code> page and again asks it to sign a public key certifying Alice's identity.</li> + <li>The <code>provisioning</code> page can verify Alice's identity by inspecting the new session. Satisfied, it signs a certificate containing Alice's public key, her email address, and an expiration date for the certificate.</li> +</ol> + +<p>For the duration of the signed certificate, Alice's browser can create valid identity assertions for <code>alice@example.com</code> whenever she wants to log into a web site with Persona.</p> + +<p>Steps 3-5 can be skipped if Alice already has a valid session with <code>example.com</code>, for example, from logging into her webmail or an intranet portal.</p> + +<h2 id="Comment_les_Sites_Web_interagissent_avec_les_IdPs">Comment les Sites Web interagissent avec les IdPs ?</h2> + +<p>Let's say Alice wants to sign in to <a href="http://123done.org" title="http://123done.org">123done.org</a>. Her browser would generate and sign an identity assertion containing the certificate from above and present it as proof of her identity.</p> + +<p>By comparing Alice's signature on the identity assertion with the public key inside the signed certificate, 123done can be confident that the certificate was issued to the same person that generated the identity assertion. However, 123done still needs to check that the certificate itself is valid by examining its signature.</p> + +<p>Because the certificate was issued for <code>alice@example.com</code>, 123done fetches the support document from <code>https://example.com/.well-known/browserid</code>. It then extracts the <code>public-key</code> and compares that to the signature on Alice's certificate. If the key matches the signature, 123done knows that the certificate is legitimate and can finish logging Alice in.</p> + +<p>Note that 123done never "phoned home" or otherwise revealed Alice's identity when she logged in. Rather, it only needed to request a single, cacheable document from <code>example.com</code>.</p> + +<h2 id="Security_and_trust">Security and trust</h2> + +<p>The BrowserID protocol, and thus Persona, are built on standard public key crytography techniques.</p> + +<p>Feel free to explore our documentation on the <a href="/en/Persona/Crypto" title="https://developer.mozilla.org/en/Persona/Crypto">cryptographic concepts</a> behind how a Persona IdP works or read <a href="/en-US/docs/Persona/Implementing_a_Persona_IdP" title="/en-US/docs/Persona/Implementing_a_Persona_IdP">more detail on how IdPs are implemented</a>.</p> diff --git a/files/fr/archive/mozilla/persona/index.html b/files/fr/archive/mozilla/persona/index.html new file mode 100644 index 0000000000..160cdb0e3a --- /dev/null +++ b/files/fr/archive/mozilla/persona/index.html @@ -0,0 +1,195 @@ +--- +title: Persona +slug: Archive/Mozilla/Persona +tags: + - Persona +translation_of: Archive/Mozilla/Persona +--- +<div class="summary">Un système de connexion simple et respectueux de la vie privée : laissez vos utilisateurs s'identifier avec leurs adresses e-mail, et libérez-vous de la gestion des mots de passe.</div> + +<p><span class="seoSummary"><a class="link-https" href="https://login.persona.org">Mozilla Persona</a> est un système d'identification pour le web facile à utiliser et à déployer. Il fonctionne sur <a href="/fr/docs/persona/Browser_compatibility">tous les principaux navigateurs</a>, vous pouvez l'<a href="/fr/Persona/Quick_Setup">utiliser dès maintenant</a>.</span></p> + +<p>Pourquoi utiliser Persona sur votre site web ?</p> + +<ol> + <li><strong>Persona élimine complètement les mots de passe spécifiques à un site web</strong>, libérant les utilisateurs et les sites web du fardeau de créer, gérer et sauvegarder de manière sécurisée les mots de passe.</li> + <li><strong>Persona est facile à utiliser.</strong> En deux clics seulement, un utilisateur de Persona peut se connecter sur un site web comme <a href="http://voo.st" title="http://voo.st">Voost</a>, en s'affranchissant des contraintes liées à la création d'un nouveau compte.</li> + <li><strong>Persona est facile à mettre en oeuvre</strong><strong>. </strong>Les développeurs peuvent ajouter Persona à leur site web en seulement un après-midi.</li> + <li>Bien mieux, il n'y a <strong>pas de contrainte</strong>. Les développeurs recoivent une adresse e-mail vérifiée pour chacun de leurs utilisateurs, et l'utilisateur peut utiliser n'importe quelle adresse e-mail avec Persona.</li> +</ol> + +<p>De plus, Persona ne peut que s'améliorer : il est constuit sur un <strong>protocole ouvert et décentralisé</strong>, qui a été conçu pour permettre une i<strong>ntégration direct aux navigateurs</strong> et un <strong>support natif par les fournisseurs d'e-mail</strong>. Les sites qui implémentent Persona aujourd'hui profiteront automatiquement de ces améliorations sans avoir à modifier leur code.</p> + +<hr> +<div class="column-container"> +<h2 id="Utiliser_Persona_sur_votre_site">Utiliser Persona sur votre site</h2> + + +<div class="column-third"> +<h3 id="Pour_commencer">Pour commencer</h3> + +<dl> + <dt><a href="/fr/Persona/Pourquoi_Persona">Pourquoi Persona ?</a></dt> + <dd>Qu'est ce qui rend Persona spécial comparé aux autres systèmes d'identification et authentification.</dd> + <dt><a href="/fr/Persona/Quick_Setup">Configuration rapide</a></dt> + <dd>Une rapide introduction montrant comment ajouter Persona à votre site web.</dd> +</dl> + +<h3 id="Référence_de_l'API">Référence de l'API</h3> + +<dl> + <dt><a href="/fr/docs/Web/API/navigator.id">L'API navigator.id </a></dt> + <dd>Référence pour l'objet <code>navigator.id</code>.</dd> + <dt><a href="/fr/Persona/API_de_verification">L'API de vérification</a></dt> + <dd>Référence pour l'API de vérification.</dd> +</dl> +</div> + +<div class="column-third"> +<h3 id="Guides">Guides</h3> + +<dl> + <dt><a href="/fr/Persona/Considerations_de_securite">Considérations de sécurité</a></dt> + <dd>Pratiques et techniques pour déployer votre Persona en toute sécurité.</dd> + <dt><a href="/fr/docs/persona/Browser_compatibility">Compatibilité des navigateurs</a></dt> + <dd>Découvrez quels navigateurs sont supportés par Persona.</dd> + <dt><a href="/fr/Persona/Internationalisation">Internationalisation</a></dt> + <dd>Découvrez comment Persona supporte différents langages.</dd> + <dt><a href="/fr/Persona/The_implementor_s_guide">Le guide de l'implémenteur</a></dt> + <dd>Des astuces par les sites qui ont ajouté le support de Persona.</dd> +</dl> +</div> + +<div class="column-third"> +<h3 id="Ressources">Ressources</h3> + +<dl> + <dt><a class="link-https" href="/fr/Persona/Libraries_and_plugins" title="https://developer.mozilla.org/en-US/docs/Mozilla/Persona/Libraries_and_plugins">Librairies et plugins</a></dt> + <dd>Vous trouverez une drop-in librairie pour votre langage de programmation favori, web framework, blog, ou CMS.</dd> + <dt><a class="link-https" href="https://github.com/mozilla/browserid-cookbook" title="https://github.com/mozilla/browserid-cookbook">Le livre d'astuces Personna</a></dt> + <dd>Exemples de codes sources pour les sites Persona. Avec des extraits en C# (MVC3), PHP, Node.JS, et autres.</dd> + <dt><a href="/fr/docs/persona/branding" title="/en-US/docs/persona/branding">Ressources promotionnelles</a></dt> + <dd>Boutons <em>se connecter</em> et autres éléments graphiques pour aider à présenter Persona à vos utilisateurs.</dd> +</dl> +</div> +</div> + +<hr> +<h2 id="Devenir_un_fournisseur_d'identité">Devenir un fournisseur d'identité</h2> + +<p>Si vous êtes un fournisseur d'adresses de messagerie ou d'un autre service d'identification, voyez les liens ci-dessous pour apprendre comment devenir un fournisseur d'identité Persona.</p> + +<div class="column-container"> +<div class="column-third"> +<dl> + <dt><a href="/en-US/docs/Persona/Identity_Provider_Overview">IdP : vue d'ensemble</a></dt> + <dd>Une vue haut niveau des fournisseurs d'identité de Persona.</dd> +</dl> +</div> + +<div class="column-third"> +<dl> + <dt><a href="/en/Persona/Implementing_a_Persona_IdP">Implémenter un IdP</a></dt> + <dd>Un guide précis sur les détails techniques pour devenir un IdP.</dd> +</dl> +</div> + +<div class="column-third"> +<dl> + <dt><a href="/en-US/docs/Persona/.well-known-browserid">.well-known/browserid</a></dt> + <dd>Un aperçu de la structure et de l'objet du fichier <code>.well-known/browserid</code> que les IdPs utilisent pour signaler leur utilisation du protocole.</dd> +</dl> +</div> +</div> + +<hr> +<h2 id="Le_projet_Persona">Le projet Persona</h2> + +<div class="column-container"> +<div class="column-third"> +<dl> + <dt><a href="/en/Persona/Glossary" title="navigator.id">Glossaire</a></dt> + <dd>Définitions de la terminologie utilisée par BrowserID et Persona.</dd> + <dt><a href="/en/Persona/FAQ" title="en/BrowserID/FAQ">FAQ</a></dt> + <dd>Réponses aux questions fréquentes.</dd> + <dt><a href="/fr/Persona/vue_densemble_du_protocole" title="BrowserID/Protocol overview">Protocole : vue d'ensemble</a></dt> + <dd>Un aperçu de niveau technique intermédiaire du protocole sous-jacent BrowserID.</dd> +</dl> +</div> + +<div class="column-third"> +<dl> + <dt><a href="/en/persona/Crypto" title="MDN">Crypto</a></dt> + <dd>Un aperçu des concepts cryptographiques derrière Persona et BrowserID.</dd> + <dt><a class="link-https" href="https://github.com/mozilla/id-specs/blob/master/browserid/index.md" title="https://github.com/mozilla/id-specs/blob/master/browserid/index.md">Les Spécifications</a></dt> + <dd>Détails techniques approfondis.</dd> +</dl> +</div> + +<div class="column-third"> +<dl> + <dt><a href="/Persona/Bootstrapping_Persona" title="en/BrowserID/Bootstrapping_BrowserID">Le site web de Persona</a></dt> + <dd>Pour faire fonctionner Persona, nous hébergeons trois services sur <a class="link-https" href="https://login.persona.org" rel="freelink">https://login.persona.org</a>: un fournisseur d'identité de substitution, une implémentation portable des APIs <a href="/fr/docs/Web/API/Navigator/id" title="Le protocole BrowserID définit une nouvelle propriété id dans l'objet window.navigator, dans laquelle l'API BrowserID est rendue disponible. Cette API a subi plusieurs importantes modifications. Chaque modification est listée séparément ci-dessous."><code>navigator.id</code></a> et un service de vérification des affirmations d'identité.</dd> + <dt><a href="https://github.com/mozilla/browserid">Code source de Persona </a></dt> + <dd>Le code source de Persona pour les sites web est sur un dépot sur GitHub. Patches bienvenus !</dd> +</dl> +</div> +</div> + +<p></p><div class="overheadIndicator communitybox"> + + <div class="column-container"> + <h2 id="Rejoignez_la_communauté_Identity">Rejoignez la communauté Identity</h2> + <div class="column-half"> + <div class="communitysubhead">Choisissez votre méthode préférée pour rejoindre la discussion :</div> + <ul class="communitymailinglist"> + <li><a href="https://lists.mozilla.org/listinfo/dev-identity"> Liste de diffusion</a></li> + + + <li><a href="http://groups.google.com/group/mozilla.dev.identity"> newsgroup</a></li> + <li><a href="http://groups.google.com/group/mozilla.dev.identity/feeds"> Flux de syndication</a></li> +</ul> + </div> + <div class="column-half"> + <ul class="communitycontact"><li><strong>IRC: </strong><a href="irc://irc.mozilla.org/identity">#identity</a> <span class="smaller">(<a href="https://wiki.mozilla.org/IRC">en apprendre plus</a>)</span></li><li><strong>Blog: </strong><a href="http://identity.mozilla.com/" title="Visitez le blog Identity">identity.mozilla.com</a></li><li><strong>GitHub: </strong><a href="https://github.com/mozilla/browserid/issues/new" title="Signaler un bug">Signaler un bug</a></li></ul> + </div> + </div> +</div><p></p> + +<p> </p> + +<h2 id="Subnav">Subnav</h2> + +<ol> + <li><a href="#">Utiliser Persona sur votre site web</a> + + <ol> + <li><a href="/fr/Persona/Pourquoi_Persona" title="Why Persona?">Pourquoi utiliser Persona ?</a></li> + <li><a href="/fr/Persona/Quick_Setup" title="Quick Start">Configuration rapide</a></li> + <li><a href="/fr/Persona/The_implementor_s_guide" title="Implementor's Guide">Astuces pour implémenter Persona</a></li> + <li><a href="/fr/Persona/Considerations_de_securite" title="Security Considerations">Considérations de sécurité</a></li> + <li><a href="/fr/docs/persona/Browser_compatibility" title="Browser compatibility">Compatibilité navigateurs</a></li> + <li><a href="/fr/Persona/Internationalisation" title="Internationalization">Internationalisation</a></li> + <li><a href="/en-US/Persona/The_navigator.id_API" title="The navigator.id API">L'API navigator.id</a></li> + <li><a href="/fr/Persona/API_de_verification" title="Remote Verification API">L'API de vérification à distance</a></li> + <li><a href="/fr/Persona/Libraries_and_plugins" title="Libraries and plugins">Bibliothèques et plugins</a></li> + <li><a href="/fr/docs/persona/branding" title="User interface guidelines">Recommandations d'interface Utilisateur</a></li> + </ol> + </li> + <li><a href="#">Devenir un fournisseur d'identité</a> + <ol> + <li><a href="/en-US/Persona/Identity_Provider_Overview" title="IdP Overview">Vue d'ensemble IdP</a></li> + <li><a href="/en-US/Persona/Implementing_a_Persona_IdP" title="Implementing an IdP">Implémenter un IdP</a></li> + <li><a href="/en-US/Persona/.well-known-browserid" title=".well-known-browserid format">Format de .well-known-browserid</a></li> + </ol> + </li> + <li><a href="#">Le projet Persona</a> + <ol> + <li><a href="/en-US/Persona/Glossary" title="Glossary">Glossaire</a></li> + <li><a href="/en-US/Persona/FAQ" title="FAQ">FAQ</a></li> + <li><a href="/en-US/Persona/Bootstrapping_Persona" title="Persona hosted services">Services hébergés Persona</a></li> + <li><a href="/fr/Persona/vue_densemble_du_protocole" title="Protocol overview">Vue d'ensemble du protocole</a></li> + <li><a href="/en-US/Persona/Crypto" title="Crypto">Cryptographie</a></li> + </ol> + </li> +</ol> diff --git a/files/fr/archive/mozilla/persona/internationalisation/index.html b/files/fr/archive/mozilla/persona/internationalisation/index.html new file mode 100644 index 0000000000..0989a4d086 --- /dev/null +++ b/files/fr/archive/mozilla/persona/internationalisation/index.html @@ -0,0 +1,50 @@ +--- +title: Internationalisation +slug: Archive/Mozilla/Persona/Internationalisation +tags: + - Persona +translation_of: Archive/Mozilla/Persona/Internationalization +--- +<h2 id="Qu'est-ce_qui_est_traduit_dans_Persona">Qu'est-ce qui est traduit dans Persona ?</h2> +<p>Dans le futur, l'interface pour se connecter sur des sites avec Persona sera intégrée directement dans le navigateur, et ainsi traduite avec la traduction du navigateur. Pour les navigateurs qui n'intégrent pas Persona, son interface consiste en une série de dialogues affichées depuis <a style="line-height: 1.572;" href="https://login.persona.org" title="https://login.persona.org">login.persona.org</a><span style="line-height: 1.572;">. Ces dialogues sont traduits par une équipe de volontaires de la communauté, et plus de 45 langues sont actuellement </span><a style="line-height: 1.572;" href="https://github.com/mozilla/browserid/blob/dev/config/l10n-prod.json" title="https://github.com/mozilla/browserid/blob/dev/config/l10n-prod.json">activées en production</a><span style="line-height: 1.572;">.</span></p> +<h2 id="Comment_Persona_choisit_la_langue">Comment Persona choisit la langue</h2> +<p>Le service Persona sélectionne une langue en se basant sur le header <code>Accept-Language</code> envoyé dans les requêtes du navigateur. L'algorithme utilisé pour faire correspondre une langue au header <code>Accept-Language</code> est le même que celui utilisé par <code>mozilla.org</code> :</p> +<ol> + <li>Pour chaque identifiant de langue dans le header <code>Accept-Language</code> : + <ul> + <li>vérifier s'il existe une correspondance exacte pour la langue associée à l'identifiant de langue</li> + <li>vérifier s'il existe une correspondance partielle de la première partie de l'identifiant de langue avec une langue</li> + </ul> + </li> + <li>Si une correspondance ne peut pas être établie en utilisant la première règle, s'en remettre à en-US. Cependant, <em>en</em> ou <em>en-US</em> est presque toujours le dernier header de langue préférée envoyé par la plupart des navigateurs.</li> +</ol> +<p>Par exemple, le tableau ci-dessous liste la langue choisie pour différents headers <code>Accept-Language</code>, si les langues suivantes étaient supportées : <code>en-US, es, es-MX</code> :</p> +<table> + <thead> + <tr> + <th scope="col"><strong>Header <code>Accept-Language</code></strong></th> + <th scope="col"><strong>Langue sélectionnée</strong></th> + </tr> + </thead> + <tbody> + <tr> + <td><code>es-AR,es;q=0.8,en-us;q=0.5</code></td> + <td><code>es</code></td> + </tr> + <tr> + <td><code>es-MX,es;q=0.8,en-us;q=0.5</code></td> + <td><code>es-MX</code></td> + </tr> + <tr> + <td><code>e</code><code>s-es,en-us;q=0.5</code></td> + <td><code>en-US</code></td> + </tr> + <tr> + <td><code>e</code><code>s-es</code></td> + <td><code>en-US</code></td> + </tr> + </tbody> +</table> +<p>Il n'y a pour le moment pas de possibilité pour un site de forcer le dialogue d'être dans un langage prédéfini. C'est parce que l'interface de Persona est d'un point de vue logique (et tout comme les futures implémentations natives le seront) intégrée dans l'interface du navigateur, c'est pourquoi sa langue doit être cohérente avec la langue du navigateur.</p> +<h2 id="Comment_aider">Comment aider</h2> +<p>Persona utilise Mozilla Verbatim pour permettre aux volontaires de créer de nouvelles traductions. Si vous souhaitez aider, lisez le guide « <a href="https://developer.mozilla.org/en-US/docs/Localizing_with_Verbatim" title="https://developer.mozilla.org/en-US/docs/Localizing_with_Verbatim">démarrer avec Verbatim</a> (en) » et visitez le <a href="https://localize.mozilla.org/projects/browserid/" title="https://localize.mozilla.org/projects/browserid/">projet « BrowserID »</a> (en) sur Verbatim.</p> diff --git a/files/fr/archive/mozilla/persona/libraries_and_plugins/index.html b/files/fr/archive/mozilla/persona/libraries_and_plugins/index.html new file mode 100644 index 0000000000..54d297c63b --- /dev/null +++ b/files/fr/archive/mozilla/persona/libraries_and_plugins/index.html @@ -0,0 +1,205 @@ +--- +title: Bibliothèques et plugins +slug: Archive/Mozilla/Persona/Libraries_and_plugins +tags: + - Persona +translation_of: Archive/Mozilla/Persona/Libraries_and_plugins +--- +<p>Envie d'utiliser Persona sur votre site ou votre blog ? Implémenter Persona à partir de rien, c'est <a href="/fr/docs/Persona/Quick_Setup" title="/en-US/docs/Persona/Quick_Setup">simple</a>, mais les plugins et bibliothèques listées ici pourraient bien vous aider à aller plus vite !<br> + <br> + Cette page liste trois types de bibliothèques :<br> + <br> + 1. des <strong>p</strong><strong>lugins</strong> qui intégrent Persona dans des environnements de travail et systèmes de gestion de contenu (CMS) existants<br> + 2. des <strong>bibliothèques utilitaires</strong>, utiles lorsque vous développez de nouveaux plugins ou que vous intégrez Persona dans un site à partir de rien<br> + 3. <strong>n'importe quoi d'autre</strong> en rapport avec Persona, ce qui inclut des bibliothèques pour faire de votre domaine un Persona Identity Provider<br> + <br> + Ceci est une liste maintenue par la communauté. Si vous avez créé une bibliothèque ou un plugin, merci de l'ajouter à cette page.</p> + +<div class="note">Cette page est actuellement en cours de tri, et certains plugins pourraient être obsolètes. N'oubliez pas de faire des recherches sur les plugins avant de les utiliser.</div> + +<div class="warning"> +<p>Les liens vers les plugins listés ici sont des documents rédigés en anglais</p> +</div> + +<h2 id="Plugins">Plugins</h2> + +<h3 id="Clojure">Clojure</h3> + +<ul> + <li>Noir: <a href="https://github.com/tmarble/nongrata" title="https://github.com/tmarble/nongrata">https://github.com/tmarble/nongrata</a></li> + <li>ring / cemerick.friend / cljs: <a href="https://github.com/osbert/persona-kit" title="https://github.com/osbert/persona-kit">https://github.com/osbert/persona-kit</a></li> +</ul> + +<h3 id="Cold_Fusion">Cold Fusion</h3> + +<ul> + <li>CFML: <a href="https://github.com/gregmoser/cfpersona" title="https://github.com/gregmoser/cfpersona">https://github.com/gregmoser/cfpersona</a></li> +</ul> + +<h3 id="Haskell">Haskell</h3> + +<ul> + <li>Yesod: <a href="https://github.com/yesodweb/authenticate" title="https://github.com/yesodweb/authenticate">https://github.com/yesodweb/authenticate</a></li> +</ul> + +<h3 id="Java">Java</h3> + +<ul> + <li>Spring: <a href="https://github.com/webdetails/SpringSecurityBrowserID" title="https://github.com/webdetails/SpringSecurityBrowserID">https://github.com/webdetails/SpringSecurityBrowserID</a></li> + <li>Lutece: <a href="http://dev.lutece.paris.fr/plugins/module-mylutece-persona/" title="https://dev.lutece.paris.fr/plugins/module-mylutece-persona/">http://dev.lutece.paris.fr/plugins/module-mylutece-persona/</a></li> +</ul> + +<h3 id="JavaScript">JavaScript</h3> + +<ul> + <li>Mootools: <a href="http://mootools.net/forge/p/browserid" title="http://mootools.net/forge/p/browserid">http://mootools.net/forge/p/browserid</a></li> + <li>jQuery: <a href="https://github.com/altryne/browserID-jQuery" title="https://github.com/altryne/browserID-jQuery">https://github.com/altryne/browserID-jQuery</a></li> + <li>Meteor: <a href="https://github.com/vladikoff/meteor-accounts-persona" title="https://github.com/vladikoff/meteor-accounts-persona">https://github.com/vladikoff/meteor-accounts-persona</a></li> +</ul> + +<h3 id="Node.js">Node.js</h3> + +<ul> + <li>Express: <a href="https://github.com/jbuck/express-persona" title="https://github.com/jbuck/express-persona">https://github.com/jbuck/express-persona</a></li> + <li>Express / Jungles: <a href="https://npmjs.org/package/jungles-auth-persona" title="https://npmjs.org/package/jungles-auth-persona">https://npmjs.org/package/jungles-auth-persona</a></li> + <li>Passport: <a href="https://github.com/jaredhanson/passport-browserid" title="https://github.com/jaredhanson/passport-browserid">https://github.com/jaredhanson/passport-browserid</a></li> + <li>Express / connect - connect-auth: <a href="https://github.com/ciaranj/connect-auth" title="https://github.com/ciaranj/connect-auth">https://github.com/ciaranj/connect-auth</a></li> + <li>Persona + LevelDB session storage: <a href="https://github.com/maxogden/doorknob" title="/en-US/docs/">https://github.com/maxogden/doorknob</a></li> +</ul> + +<h3 id="PHP">PHP</h3> + +<ul> + <li>CakePHP: <a href="https://github.com/overflow636/ofbid" title="https://github.com/overflow636/ofbid">https://github.com/overflow636/ofbid</a> et <a href="https://github.com/markomarkovic/cakephp-plugin-persona" title="https://github.com/markomarkovic/cakephp-plugin-persona">https://github.com/markomarkovic/cakephp-plugin-persona</a></li> + <li>DokuWiki: <a href="https://github.com/Rudloff/dokuwiki-browserid" title="https://github.com/Rudloff/dokuwiki-browserid">https://github.com/Rudloff/dokuwiki-browserid</a></li> + <li>Dotclear: <a href="http://plugins.dotaddict.org/dc2/details/browserID" title="http://plugins.dotaddict.org/dc2/details/browserID">http://plugins.dotaddict.org/dc2/details/browserID</a></li> + <li>Drupal: <a href="https://drupal.org/project/persona" title="https://drupal.org/project/persona">https://drupal.org/project/persona</a></li> + <li>Elgg: <a href="http://community.elgg.org/plugins/1154520/1.0/persona" title="/en-US/docs/">http://community.elgg.org/plugins/1154520/1.0/persona</a></li> + <li>Joomla: <a href="http://extensions.joomla.org/extensions/access-a-security/authentication-cloud-based/18567" title="http://extensions.joomla.org/extensions/access-a-security/authentication-cloud-based/18567">http://extensions.joomla.org/extensions/access-a-security/authentication-cloud-based/18567</a></li> + <li>Midgard MVC: <a href="https://github.com/midgardproject/midgardmvc_core/blob/master/services/authentication/browserid.php" title="https://github.com/midgardproject/midgardmvc_core/blob/master/services/authentication/browserid.php">https://github.com/midgardproject/midgardmvc_core/blob/master/services/authentication/browserid.php</a></li> + <li>MyBB: <a href="https://github.com/Rudloff/mybb-browserid" title="https://github.com/Rudloff/mybb-browserid">https://github.com/Rudloff/mybb-browserid</a></li> + <li>SPIP: <a href="http://www.spip-contrib.net/BrowserID" title="http://www.spip-contrib.net/BrowserID">http://www.spip-contrib.net/BrowserID</a></li> + <li>Symfony2: <a href="https://github.com/Proxiweb/PersonaBundle" title="https://github.com/Proxiweb/PersonaBundle">https://github.com/Proxiweb/PersonaBundle</a>, <a href="https://github.com/bitgrave/BGPersonaBundle" title="https://github.com/bitgrave/BGPersonaBundle">https://github.com/bitgrave/BGPersonaBundle</a>, https://packagist.org/packages/champs-libres/persona-user-bundle</li> + <li>Tiki: <a href="http://dev.tiki.org/Mozilla+Persona" title="http://dev.tiki.org/Mozilla+Persona">http://dev.tiki.org/Mozilla+Persona</a></li> + <li>WordPress / bbPress 2: <a href="http://wordpress.org/extend/plugins/browserid/" title="http://wordpress.org/extend/plugins/browserid/">http://wordpress.org/extend/plugins/browserid/</a></li> +</ul> + +<h3 id="Python">Python</h3> + +<ul> + <li>CherryPy: <a href="https://bitbucket.org/jaraco/jaraco.persona">https://bitbucket.org/jaraco/jaraco.persona</a></li> + <li>Django: <a href="https://github.com/mozilla/django-browserid" title="https://github.com/mozilla/django-browserid">https://github.com/mozilla/django-browserid</a> (voir des <a href="http://godjango.com/11-browser-id/" title="http://godjango.com/11-browser-id/">captures d'écran</a>)</li> + <li>Django Social Auth: <a href="https://github.com/omab/django-social-auth/blob/master/social_auth/backends/browserid.py" title="https://github.com/omab/django-social-auth/blob/master/social_auth/backends/browserid.py">https://github.com/omab/django-social-auth/blob/master/social_auth/backends/browserid.py</a></li> + <li>Django 1.5 and Python 3: <a href="https://github.com/mozillaperu/MozTanta-Persona" title="/en-US/docs/">https://github.com/mozillaperu/MozTanta-Persona</a></li> + <li>Flask: <a href="http://pypi.python.org/pypi/Flask-BrowserID" title="http://pypi.python.org/pypi/Flask-BrowserID">http://pypi.python.org/pypi/Flask-BrowserID</a></li> + <li>Google App Engine: <a href="https://github.com/psawaya/BrowserID-GAE" title="https://github.com/psawaya/BrowserID-GAE">https://github.com/psawaya/BrowserID-GAE</a></li> + <li>Pyramid: <a href="http://www.rfk.id.au/blog/entry/painless-auth-pyramid-browserid/" title="http://www.rfk.id.au/blog/entry/painless-auth-pyramid-browserid/">http://www.rfk.id.au/blog/entry/painless-auth-pyramid-browserid/</a></li> + <li>Pyramid: <a href="https://github.com/madjar/pyramid_persona/" title="https://github.com/madjar/pyramid_persona/">https://github.com/madjar/pyramid_persona/</a> (voir un <a href="http://compiletoi.net/quick-authentication-on-pyramid-with-persona.html" title="http://compiletoi.net/quick-authentication-on-pyramid-with-persona.html">billet de blog</a>)</li> + <li>Repoze: <a href="https://github.com/mozilla-services/repoze.who.plugins.browserid" title="https://github.com/mozilla-services/repoze.who.plugins.browserid">https://github.com/mozilla-services/repoze.who.plugins.browserid</a></li> + <li>Tornado: <a href="http://www.peterbe.com/plog/integrate-browserid-in-a-tornado-web-app" title="http://www.peterbe.com/plog/integrate-browserid-in-a-tornado-web-app">http://www.peterbe.com/plog/integrate-browserid-in-a-tornado-web-app</a></li> + <li>Twisted: <a href="https://github.com/warner/browserid-cred" title="https://github.com/warner/browserid-cred">https://github.com/warner/browserid-cred</a></li> + <li>web.py: <a href="https://github.com/oscarfroberg/browserid-webpy" title="https://github.com/oscarfroberg/browserid-webpy">https://github.com/oscarfroberg/browserid-webpy</a></li> + <li>WSGI: <a href="https://github.com/ianb/wsgibrowserid" title="https://github.com/ianb/wsgibrowserid">https://github.com/ianb/wsgibrowserid</a></li> +</ul> + +<h3 id="Ruby">Ruby</h3> + +<ul> + <li>Devise: <a href="https://rubygems.org/gems/devise-browserid" title="https://rubygems.org/gems/devise-browserid">https://rubygems.org/gems/devise-browserid</a></li> + <li>Devise: <a href="https://github.com/denschub/devise_browserid_authenticatable" title="https://github.com/denschub/devise_browserid_authenticatable">https://github.com/denschub/devise_browserid_authenticatable</a></li> + <li>OmniAuth: <a href="https://github.com/intridea/omniauth-browserid" title="https://github.com/intridea/omniauth-browserid">https://github.com/intridea/omniauth-browserid</a></li> + <li>Rails: <a href="http://rubygems.org/gems/browserid-rails" title="http://rubygems.org/gems/browserid-rails">http://rubygems.org/gems/browserid-rails</a></li> + <li>Sinatra: <a href="http://rubygems.org/gems/sinatra-browserid" title="http://rubygems.org/gems/sinatra-browserid">http://rubygems.org/gems/sinatra-browserid</a></li> + <li>Warden / Rack: <a href="https://rubygems.org/gems/warden-browserid" title="/en-US/en-US/docs/">https://rubygems.org/gems/warden-browserid</a></li> +</ul> + +<h3 id="Miscellaneous">Miscellaneous</h3> + +<ul> + <li>Apache: <a href="https://github.com/mozilla/mod_browserid" title="/Link_Type_Article_Title_Lookup_/_Link_Text_Attachments_URL">https://github.com/mozilla/mod_browserid</a></li> + <li>Cyrus SASL: <a href="https://github.com/ozten/sasl-browserid" title="https://github.com/ozten/sasl-browserid">https://github.com/ozten/sasl-browserid</a></li> + <li>PhoneGap: <a href="https://github.com/couchbaselabs/cordova-browserid" title="https://github.com/couchbaselabs/cordova-browserid">https://github.com/couchbaselabs/cordova-browserid</a></li> +</ul> + +<p>Vous n'avez pas vu votre langage ou environnement de travail ici ? <a href="http://identity.mozilla.com/post/31008721633/" title="http://identity.mozilla.com/post/31008721633/">LoginRadius</a>, un widget d'authentification, offre une intégration de Persona pour beaucoup de plateformes.</p> + +<h2 id="Bibliothèques_utilitaires">Bibliothèques utilitaires</h2> + +<h3 id="C">C</h3> + +<ul> + <li><a href="https://github.com/PADL/gss_browserid" title="https://github.com/PADL/gss_browserid">https://github.com/PADL/gss_browserid</a> (composant libbrowserid)</li> +</ul> + +<h3 id="Go">Go</h3> + +<ul> + <li><a href="https://github.com/elathan/gobrowserid" title="https://github.com/elathan/gobrowserid">https://github.com/elathan/gobrowserid</a></li> +</ul> + +<h3 id="Haskell_2">Haskell</h3> + +<ul> + <li><a href="http://hackage.haskell.org/package/authenticate" title="http://hackage.haskell.org/package/authenticate">http://hackage.haskell.org/package/authenticate</a></li> +</ul> + +<h3 id=".Net">.Net</h3> + +<ul> + <li><a href="https://github.com/cvrajeesh/NBrowserID" title="https://github.com/cvrajeesh/NBrowserID">https://github.com/cvrajeesh/NBrowserID</a></li> + <li><a href="http://www.codeguru.com/csharp/.net/net_asp/using-browserid-authentication-in-asp.net-web-sites.htm" title="http://www.codeguru.com/csharp/.net/net_asp/using-browserid-authentication-in-asp.net-web-sites.htm">http://www.codeguru.com/csharp/.net/net_asp/using-browserid-authentication-in-asp.net-web-sites.htm</a></li> + <li><a href="https://github.com/fernandozamoraj/BrowserIdDemoWithMVC3" title="https://github.com/fernandozamoraj/BrowserIdDemoWithMVC3">https://github.com/fernandozamoraj/BrowserIdDemoWithMVC3</a> (voir un <a href="http://fernandozamorajimenez.blogspot.com/2012/04/integrating-browserid-with-mvc3.html" title="http://fernandozamorajimenez.blogspot.com/2012/04/integrating-browserid-with-mvc3.html">billet de blog</a>)</li> + <li><a href="https://github.com/sergiotapia/ASP.Net-MVC3-Persona-Demo" title="https://github.com/sergiotapia/ASP.Net-MVC3-Persona-Demo">https://github.com/sergiotapia/ASP.Net-MVC3-Persona-Demo</a></li> +</ul> + +<h3 id="Node.js_2">Node.js</h3> + +<ul> + <li><a href="https://github.com/substack/persona-id" title="https://github.com/substack/persona-id">https://github.com/substack/persona-id</a></li> + <li><a href="https://github.com/lloyd/node-browserid" title="https://github.com/lloyd/node-browserid">https://github.com/lloyd/node-browserid</a></li> +</ul> + +<h3 id="PHP_2">PHP</h3> + +<ul> + <li><a href="https://github.com/Falco20019/php-browseridlib" title="https://github.com/Falco20019/php-browseridlib">https://github.com/Falco20019/php-browseridlib</a></li> + <li><a href="https://github.com/raymondjavaxx/php5-browserid" title="https://github.com/raymondjavaxx/php5-browserid">https://github.com/raymondjavaxx/php5-browserid</a></li> +</ul> + +<h3 id="Python_2">Python</h3> + +<ul> + <li><a href="https://github.com/mozilla/PyBrowserID" title="https://github.com/mozilla/PyBrowserID">https://github.com/mozilla/PyBrowserID</a></li> +</ul> + +<h2 id="Autres">Autres</h2> + +<h3 id="Perl">Perl</h3> + +<ul> + <li>Perl/CGI IdP: <a href="https://github.com/benkard/mulkyid" title="https://github.com/benkard/mulkyid">https://github.com/benkard/mulkyid</a></li> +</ul> + +<h3 id="Python_3">Python</h3> + +<ul> + <li>WSGI IdP: <a href="https://bitbucket.org/djc/persona-totp" title="https://bitbucket.org/djc/persona-totp">https://bitbucket.org/djc/persona-totp</a></li> +</ul> + +<h3 id="Ruby_2">Ruby</h3> + +<ul> + <li>Rack IdP: <a href="https://rubygems.org/gems/browserid-provider" title="https://rubygems.org/gems/browserid-provider">https://rubygems.org/gems/browserid-provider</a> (voir un <a href="https://rin.no/category/browserid-2/" title="https://rin.no/category/browserid-2/">billet de blog</a>)</li> +</ul> + +<h3 id="PHP_3">PHP</h3> + +<ul> + <li>Symfony2 IdP: <a href="https://github.com/gigablah/GBPersonaProviderBundle" title="https://github.com/gigablah/persona-provider-bundle">https://github.com/gigablah/GBPersonaProviderBundle</a></li> +</ul> + +<h3 id="Racket">Racket</h3> + +<ul> + <li>web-server module: <a href="https://github.com/cosmez/racket-persona">https://github.com/cosmez/racket-persona</a></li> +</ul> diff --git a/files/fr/archive/mozilla/persona/pourquoi_persona/index.html b/files/fr/archive/mozilla/persona/pourquoi_persona/index.html new file mode 100644 index 0000000000..589c24e8be --- /dev/null +++ b/files/fr/archive/mozilla/persona/pourquoi_persona/index.html @@ -0,0 +1,32 @@ +--- +title: Pourquoi Persona ? +slug: Archive/Mozilla/Persona/Pourquoi_Persona +tags: + - Persona +translation_of: Archive/Mozilla/Persona/Why_Persona +--- +<p style="">Le mécanisme le plus répandu, basé sur le couple identifiant/mot de passe, n'est pas tenable : on demande aux utilisateurs de créer et de retenir un nouveau mot de passe complexe pour chaque site ou service qu'ils utilisent, et chaque site doit stocker de son côté les mots de passe de manière sécurisée. Pourtant, des intrusions récentes montrent que même des entreprises de premier plan peuvent avoir des failles dans la sécurité de leur base de mots de passe, ce qui met en danger les informations de leurs utilisateurs.</p> +<p>Persona est un système de gestion des identités ouvert, distribué, adapté à l'échelle d'internet, qui remplace le système des mots de passe par site. Il répond aux limitations en termes d'ergonomie et de vie privée que peuvent rencontrer des systèmes comme OpenID, sans avoir recours à une infrastructure centralisée comme le fait Facebook Connect.</p> +<h2 id="Persona_la_fin_des_mots_de_passe_par_site">Persona : la fin des mots de passe par site</h2> +<p>Au lieu d'utiliser un mot de passe pour chaque site, Persona permet aux utillisateurs de se connecter en seulement deux clics après avoir réalisé un processus simple une seule fois pour chacune de leurs identités en ligne. Le processus est totalement sécurisé et basé sur les principes de la cryptographie à clé publique. Plutôt qu'un mot de passe, le navigateur internet de l'utilisateur génère ensuite une « assertion d'identité » chiffrée, qui expire après quelques minutes et n'est valable que pour un seul site. Du fait qu'il n'y a plus de mot de passe spécifique pour chaque site, les sites utilisant Persona n'ont plus à se préoccuper du stockage sécurisé des mots de passe ou de la perte éventuelle de leur base de mots de passe.</p> +<p>Cette méthode rapide d'authentification réduit aussi la complexité lors de la première connexion d'un utilisateur à un nouveau site.</p> +<h2 id="Les_identifiants_Persona_sont_vos_adresses_de_courriel">Les identifiants Persona sont vos adresses de courriel</h2> +<p>Plutôt que des identifiants à saisie libre, Persona utilise des adresses de courriel, ce qui a plusieurs avantages pour les utilisateurs comme pour les développeurs :</p> +<h3 id="Avantages_des_adresses_de_courriel_pour_les_utilisateurs">Avantages des adresses de courriel pour les utilisateurs</h3> +<ul> + <li>Les utilisateurs connaissent déjà leurs adresses de courriel, ils n'ont pas à apprendre une nouvelle adresse internet (URL), potentiellement complexe, comme c'est le cas avec OpenID.</li> + <li>Les adresses de courriel portent en elles l'idée <code>une-personne@un-contexte</code>, facilitant ainsi pour les utilisateurs la séparation de leurs identités comme <code>@travail</code>, <code>@maison</code>, <code>@ecole, etc</code>. C'est très différent de la tendance à la centralisation des identités que l'on retrouve dans les conditions d'utilisation des réseaux sociaux comme Facebook et Google+, de type « un seul compte basé sur la vraie identité ».</li> + <li>Les courriels peuvent etre auto-hébergés ou délégués à d'autres fournisseurs de service, laissant aux utilisateurs le contrôle total de leur indentité en ligne.</li> +</ul> +<h3 id="Avantages_des_adresses_de_courriel_pour_les_développeurs">Avantages des adresses de courriel pour les développeurs</h3> +<ul> + <li>Les adresses de courriel donnent aux développeurs un moyen direct pour contacter leurs utilisateurs.</li> + <li>La plupart des sites demandent une adresse de courriel à leurs utilisateurs. Persona la leur fournit automatiquement quand un utilisateur se connecte, éliminant le besoin d'avoir des formulaires supplémentaires après connexion.</li> + <li>De nombreux systèmes d'authentification traitent déjà les adresses de courriel comme des clés uniques. Cela signifie qu'il n'y a pas d'enfermement (lock-in) avec Persona, et qu'il peut être déployé à côté de systèmes d'authentification déjà existants.</li> +</ul> +<p>Sans oublier par ailleurs que le courriel est un système qui est déjà complètement distribué, avec des milliards de comptes existant chez d'innombrables fournisseurs.</p> +<h2 style="" id="En_quoi_Persona_diffère-t-il_des_autres_systèmes_d'authentification_unique_(Single_Sign-On)">En quoi Persona diffère-t-il des autres systèmes d'authentification unique (Single Sign-On) ?</h2> +<p>Persona est sécurisé et facile à utiliser. Il protège la vie privée des utilisateurs, leur laisse le contrôle et une liberté de choix de façon inégalée.</p> +<p>De nombreux réseaux sociaux comme Facebook ou Google+ imposent aux utilisateurs l'utilisation de leurs vrais noms et leur limitent l'accès à un compte unique. En utilisant comme identifiant de base l'adresse de courriel, Persona permet aux utilisateurs de garder séparées leurs identités de travail, de maison, d'école ainsi que leurs autres identités.</p> +<p>Persona est ouvert et distribué : toute personne ayant une adresse de courriel peut se connecter à des sites web avec Persona. Plus encore, chacun peut héberger son propre service d'authentification ou le déléguer à d'autres, exactement comme dans le cas des courriels, et contrairement aux services uniques et centralisés utilisés par les réseaux sociaux.</p> +<p>Persona propose aussi une nouvelle approche de la protection de la vie privée en mettant le navigateur internet au centre du processus d'authentification : le navigateur obtient d'un côté des certificats du fournisseur de courriel de l'utilisateur, et les présente de l'autre côté au site web. Le service de courriel ne peut pas pister l'utilisateur, et les sites tiers peuvent avoir confiance dans l'identité de l'utilisateur grâce à la signature chiffrée des certificats. La plupart des systèmes concurrents comme OpenID exigent que les sites tiers envoient un message en retour avant d'autoriser l'utilisateur à se connecter.</p> diff --git a/files/fr/archive/mozilla/persona/quick_setup/index.html b/files/fr/archive/mozilla/persona/quick_setup/index.html new file mode 100644 index 0000000000..ee692b5274 --- /dev/null +++ b/files/fr/archive/mozilla/persona/quick_setup/index.html @@ -0,0 +1,241 @@ +--- +title: Configuration rapide +slug: Archive/Mozilla/Persona/Quick_Setup +tags: + - Persona +translation_of: Archive/Mozilla/Persona/Quick_Setup +--- +<p>Seules cinq étapes sont nécessaires pour installer un système d'authentification Persona sur votre site :</p> + +<ol> + <li>Inclure la bibliothèque JavaScript Persona sur vos pages.</li> + <li>Ajouter les boutons “connexion” et “déconnexion”.</li> + <li>Observer les actions connexion et déconnexion.</li> + <li>Vérifier l'identification de l'utilisateur.</li> + <li>Consulter les meilleures pratiques.</li> +</ol> + +<p>Vous devriez être en mesure de le faire fonctionner en un simple après-midi, mais chaque chose en son temps : si vous comptez utiliser Persona sur votre site, s'il vous plaît, prenez un moment pour vous inscrire sur la liste de diffusion <a href="https://mail.mozilla.org/listinfo/persona-notices">Persona notices</a>. Elle est à faible trafic, étant uniquement utilisée pour annoncer les changements et les problème de sécurité qui pourraient affecter votre site.</p> + +<h2 id="Étape_1_Inclure_la_bibliothèque_Persona">Étape 1 : Inclure la bibliothèque Persona</h2> + +<p>Persona est conçu pour ne pas être lié à un navigateur en particulier et fonctionne bien dans <a href="/fr/docs/persona/Browser_compatibility">les principaux navigateurs de bureau et mobile</a>.</p> + +<p><span style="line-height: inherit;">Dans le futur nous espérons que les navigateurs fourniront un support natif de Persona, mais en attendant nous fournissons une bibliothèque JavaScript qui implémente pleinement l'interface et l'API client du protocole. En incluant cette <span style="line-height: inherit;">bibliothèque</span>, vos utilisateurs seront en mesure de se connecter avec Persona, que leur navigateur en ait un support natif ou non.</span></p> + +<p>Une fois la bibliothèque chargée sur la page, les fonctions Persona dont vous avez besoin (<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>watch()</code></a>, <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>request()</code></a>, et <a href="/fr/docs/Web/API/Navigator/id/logout" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>logout()</code></a>), seront accessible depuis l'objet global <code>navigator.id</code>.</p> + +<p>Pour inclure la <span style="line-height: inherit;"><span style="line-height: inherit;">bibliothèque</span></span> JavaScript Persona, vous pouvez placer cette balise <a href="/fr/docs/Web/HTML/Element/script" title="L'élément HTML <script> est utilisé pour intégrer ou faire référence à un script exécutable."><code><script></code></a> tout en bas de de votre code HTML, avant la fermeture de la balise <a href="/fr/docs/Web/HTML/Element/body" title="L'élément <body> représente le contenu principal du document HTML. Il ne peux y avoir qu'un élément <body> par document."><code><body></code></a> :</p> + +<pre class="brush: html;"><script src="https://login.persona.org/include.js"></script> +</pre> + +<p>Vous <strong>devez</strong> inclure ceci dans toutes les pages qui utilisent les fonctions de <a href="/fr/docs/Web/API/Navigator/id" title="Le protocole BrowserID définit une nouvelle propriété id dans l'objet window.navigator, dans laquelle l'API BrowserID est rendue disponible. Cette API a subi plusieurs importantes modifications. Chaque modification est listée séparément ci-dessous."><code>navigator.id</code></a>. Persona étant toujours en développement, il est déconseillé d'héberger vous-même une copie du fichier <code>include.js</code>.</p> + +<h3 id="Supprimer_le_Mode_de_Compatibilité">Supprimer le Mode de Compatibilité</h3> + +<p>Vous devez vous assurer que les utilisateurs d'Internet Explorer n'utilisent pas le Mode de Compatibilité, car il cassera Persona.</p> + +<p>Vous pouvez soit inclure cette balise <a href="/fr/docs/Web/HTML/Element/meta" title="L'élément HTML <meta> représente toute information de métadonnées qui ne peut pas être représentée par un des éléments (<base>, <link>, <script>, <style> ou <title>)"><code><meta></code></a>, dans votre page, avant tout élément <code>script</code> :</p> + +<pre class="brush: html"><code><meta http-equiv="X-UA-Compatible" content="IE=Edge"></code></pre> + +<p>Ou vous pouvez définir un entête HTTP sur votre page : <code>X-UA-Compatible: IE=Edge</code>.</p> + +<h2 id="Étape_2_Ajoutez_des_boutons_de_connexion_et_de_déconnexion">Étape 2 : Ajoutez des boutons de connexion et de déconnexion</h2> + +<p>Persona étant conçu comme une API DOM, vous devez appeler des fonctions quand un utilisateur clique sur un bouton de connexion ou de déconnexion sur votre site. Pour ouvrir la boîte de dialogue Persona et demander à l'utilisateur de se connecter, vous devez appeler <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.request()</code></a>. Pour la déconnexion, appelez <a href="/fr/docs/Web/API/Navigator/id/logout" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.logout()</code></a>. Notez que l'appel à <a href="/fr/docs/Web/API/Navigator/id/logout" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>logout()</code></a> <em>doit</em> être fait depuis la fonction attachée à l'évènement.</p> + +<p>Par exemple :</p> + +<pre class="brush: js;">var signinLink = document.getElementById('signin'); +if (signinLink) { + signinLink.onclick = function() { navigator.id.request(); }; +}; + +var signoutLink = document.getElementById('signout'); +if (signoutLink) { + signoutLink.onclick = function() { navigator.id.logout(); }; +}; +</pre> + +<p>À quoi devraient ressembler ces boutons ? Consultez notres page de <a href="/fr/docs/persona/branding">ressources graphiques</a> pour des exemple complets basés sur du CSS !</p> + +<h2 id="Étape_3_Gérez_les_actions_de_connexion_et_de_déconnexion">Étape 3 : Gérez les actions de connexion et de déconnexion</h2> + +<p>Afin que Persona puisse fonctionner, vous devez lui dire quoi faire lorsqu'un utilisateur se connecte ou se déconnecte. Pour cela, appelez la fonction <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> et passez lui trois paramètres :</p> + +<ol> + <li>L'adresse email de l'utilisateur actuellement connecté à votre site depuis cet ordinateur, ou <code>null</code> si aucun utilisateur n'est connecté. Par exemple, vous pouvez consulter un cookie du navigateur pour déterminer qui est connecté.</li> + <li>Une fonction à appeler lorsqu'une action <code>onlogin</code> est déclenchée. Cette fonction reçoit un seul paramètre, une "assertion d'identité" qui doit être vérifiée.</li> + <li>Une fonction à appeler lorsqu'une action <code>onlogout</code> est déclenchée. Cette fonction ne reçoit aucun paramètre.</li> +</ol> + +<div class="note style-wrap"> +<p><strong>Note:</strong> Vous devez toujours inclure à la fois <code>onlogin</code> et <code>onlogout</code> lorsque vous appelez <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>.</p> +</div> + +<p>Par exemple, si vous pensez que Bob est connecté à votre site, vous pourriez faire ceci :</p> + +<pre class="brush: js;">var currentUser = 'bob@example.com'; + +navigator.id.watch({ + <code class="language-js">loggedInUser</code>: currentUser, + onlogin: function(assertion) { + // Un utilisateur est connecté ! Voici ce qu'il faut faire : + // 1. Envoyer l'assertion à votre backend pour vérification et pour créer la session. + // 2. Mettre à jour l'interface utilisateur. + <code class="language-js">$<span class="punctuation token">.</span><span class="function token">ajax<span class="punctuation token">(</span></span><span class="punctuation token">{</span> + type<span class="punctuation token">:</span> <span class="string token">'POST'</span><span class="punctuation token">,</span> + url<span class="punctuation token">:</span> <span class="string token">'/auth/login'</span><span class="punctuation token">,</span><span class="comment token"> // Ceci est une URL sur votre site web. +</span> data<span class="punctuation token">:</span> <span class="punctuation token">{</span>assertion<span class="punctuation token">:</span> assertion<span class="punctuation token">}</span><span class="punctuation token">,</span> + success<span class="punctuation token">:</span> <span class="keyword token">function</span><span class="punctuation token">(</span>res<span class="punctuation token">,</span> status<span class="punctuation token">,</span> xhr<span class="punctuation token">)</span> <span class="punctuation token">{</span> window<span class="punctuation token">.</span>location<span class="punctuation token">.</span><span class="function token">reload<span class="punctuation token">(</span></span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="punctuation token">}</span><span class="punctuation token">,</span> + error<span class="punctuation token">:</span> <span class="keyword token">function</span><span class="punctuation token">(</span>xhr<span class="punctuation token">,</span> status<span class="punctuation token">,</span> err<span class="punctuation token">)</span> <span class="punctuation token">{</span> + navigator<span class="punctuation token">.</span>id<span class="punctuation token">.</span><span class="function token">logout<span class="punctuation token">(</span></span><span class="punctuation token">)</span><span class="punctuation token">;</span> + <span class="function token">alert<span class="punctuation token">(</span></span><span class="string token">"Login failure: "</span> <span class="operator token">+</span> err<span class="punctuation token">)</span><span class="punctuation token">;</span> + <span class="punctuation token">}</span> + <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code> + }, + onlogout: function() { + // Un utilisateur s'est déconnecté ! Voici ce qu'il faut faire : + // Détruire la session de l'utilisateur en redirigeant l'utilisateur ou en appelant votre backend. + // Assurez vous aussi de réinitialiser loggedInUser à null sur la prochain fois où la page sera chargée + // (Pas false, ni 0 ou undefined. null) + <code class="language-js">$<span class="punctuation token">.</span><span class="function token">ajax<span class="punctuation token">(</span></span><span class="punctuation token">{</span> + type<span class="punctuation token">:</span> <span class="string token">'POST'</span><span class="punctuation token">,</span> + url<span class="punctuation token">:</span> <span class="string token">'/auth/logout'</span><span class="punctuation token">,</span><span class="comment token"> // Ceci est une URL sur votre site web. +</span> success<span class="punctuation token">:</span> <span class="keyword token">function</span><span class="punctuation token">(</span>res<span class="punctuation token">,</span> status<span class="punctuation token">,</span> xhr<span class="punctuation token">)</span> <span class="punctuation token">{</span> window<span class="punctuation token">.</span>location<span class="punctuation token">.</span><span class="function token">reload<span class="punctuation token">(</span></span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="punctuation token">}</span><span class="punctuation token">,</span> + error<span class="punctuation token">:</span> <span class="keyword token">function</span><span class="punctuation token">(</span>xhr<span class="punctuation token">,</span> status<span class="punctuation token">,</span> err<span class="punctuation token">)</span> <span class="punctuation token">{</span> <span class="function token">alert<span class="punctuation token">(</span></span><span class="string token">"Logout failure: "</span> <span class="operator token">+</span> err<span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="punctuation token">}</span> + <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code> + } +}); +</pre> + +<p>Dans cet exemple, <code>onlogin</code> et <code>onlogout</code> sont tous deux implémentés en effectuant des requêtes <code>POST</code> asynchrones vers le backend de votre site. Le backend effectue ensuite la connexion ou la déconnexion de l'utilisateur, généralement en créant ou en effaçant des informations dans un cookie de session. Ensuite, si tout fonctionne bien, la page se recharge afin de prendre en compte le nouvel état de connexion.</p> + +<p>Notez que si l'assertion ne peut être vérifiée, vous devez appeler <a href="/fr/docs/Web/API/Navigator/id/logout" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.logout()</code></a>, qui indique à Persona qu'aucun utilisateur n'est actuellement connecté. Si vous ne le faîtes pas, alors Persona peut appeler <code>onlogin</code> immédiatement à nouveau, avec la même assertion, et entrainer une <a href="/en-US/Persona/The_implementor_s_guide/Call_logout()_after_a_failed_login">boucle infinie d'échecs de connexion</a>.</p> + +<p>Bien entendu vous pouvez utiliser des requêtes AJAX pour implémenter cela sans recharger la page ni rediriger l'utilisateur, mais cela ne fait pas partie du périmètre de ce tutoriel.</p> + +<p>Voici un autre exemple, cette fois-ci sans utiliser jQuery.</p> + +<pre class="brush: js;">function simpleXhrSentinel(xhr) { + return function() { + if (xhr.readyState == 4) { + if (xhr.status == 200) { + // recherche la page pour prendre en compte le nouveau statut de connexion + window.location.reload(); + } else { + navigator.id.logout(); + alert("XMLHttpRequest error: " + xhr.status); + } + } + }; +} + +function verifyAssertion(assertion) { + // Votre backend doit retourner un status code HTTP 200 pour indiquer la bonne + // vérification de l'adresse e-mail de l'utilisateur et il doit s'arranger pour que + // currentUser soit bien associer à cette adresse quand la page est rechargée + var xhr = new XMLHttpRequest(); + xhr.open("POST", "/xhr/sign-in", true); + // voir http://www.openjs.com/articles/ajax_xmlhttp_using_post.php + var param = "assertion="+assertion; + xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + xhr.setRequestHeader("Content-length", param.length); + xhr.setRequestHeader("Connection", "close"); + xhr.send(param); // pour la vérification par votre backend + xhr.onreadystatechange = simpleXhrSentinel(xhr); +} + +function signoutUser() { + // Votre backend doit retourner un code statut HTTP 200 pour indique la bonne déconnexion + // (habituellement après la réinitialisation de plusieurs variables de session) + // et s'arranger pour que l'association à currentUser soit 'null' quand la page est rechargée + var xhr = new XMLHttpRequest(); + xhr.open("GET", "/xhr/sign-out", true); + xhr.send(null); + xhr.onreadystatechange = simpleXhrSentinel(xhr); +} + +// C'est parti ! +navigator.id.watch({ + loggedInUser: currentUser, + onlogin: verifyAssertion, + onlogout: signoutUser +}}; +</pre> + +<p>Vous <strong>devez</strong> appeler <code>navigator.id.watch()</code> sur toutes les pages comprenant un bouton de connexion ou de déconnexion. Pour gérer les améliorations de Persona comme la connexion automatique et la déconnexion globale de vos utilisateurs, <strong>il est conseillé</strong> d'appeler cette fonction sur toutes les pages de votre site.</p> + +<p>Persona comparera l'adresse e-mail que vous passez dans <code>loggedInUser</code> avec celle qu'il connaît pour l'utilisateur actuellement connecté. Si elles ne correspondent pas, il peut déclencher automatiquement <code>onlogin</code> ou <code>onlogout</code> au chargement de la page.</p> + +<h2 id="Étape_4_Vérifiez_les_identifiants_de_l'utilisateur">Étape 4 : Vérifiez les identifiants de l'utilisateur</h2> + +<p>Plutôt qu'un mot de passe, Persona utilise des "assertions d'identité" qui sont une sorte de mot de passe à usage unique, lié à un seul site et combiné à l'adresse e-mail de l'utilisateur. Lorsqu'un utilisateur désire se connecter, votre fonction de callback <code>onlogin</code> sera appelée et recevra en paramètre une assertion de cet utilisateur. Avant d'autoriser la connexion, vous devez vérifier la validité de cette assertion.</p> + +<p>Il est <em>extrêmement important</em> que vous vérifiiez cette assertion sur votre serveur et non en JavaScript (qui s'exécute dans le navigateur de votre utilisateur) car cela serait trop facile à contourner. L'exemple ci-dessous confie l'assertion au backend du site en utilisant le helper jQuery <code>$.ajax()</code> pour effectuer un <code>POST</code> de celle-ci vers <code>/api/login</code>.</p> + +<p>Une fois que le serveur dispose d'une assertion, comment la vérifier ? Le moyen le plus simple est d'utiliser un helper fourni par Mozilla. Effectuez un simple <code>POST</code> de l'assertion vers <code>https://verifier.login.persona.org/verify</code> avec deux paramètres :</p> + +<ol> + <li><code>assertion</code>: L'assertion d'identité fournie par l'utilisateur.</li> + <li><code>audience</code>: Le nom de domaine et le port de votre site web. Vous devez coder cette valeur en dur dans votre backend ; ne la composez pas en fonction d'une quelconque donnée fournie par l'utilisateur.</li> +</ol> + +<p>Par exemple, si vous êtes <code>example.com</code>, vous pouvez utiliser la ligne de commande pour tester une assertion avec :</p> + +<pre class="brush: bash;">$ curl -d "assertion=<ASSERTION>&audience=https://example.com:443" "https://verifier.login.persona.org/verify" +</pre> + +<p>Si elle est valide, vous recevrez une réponse en JSON comme celle-ci :</p> + +<pre class="brush: js;">{ + "status": "okay", + "email": "bob@eyedee.me", + "audience": "https://example.com:443", + "expires": 1308859352261, + "issuer": "eyedee.me" +} +</pre> + +<p>Pour en apprendre plus à propos du service de vérification, lisez l'<a href="/fr/Persona/API_de_verification">API de vérification à distance</a>. Un exemple d'implémentation de <code>/api/login</code> utilisant <a href="http://python.org/">Python</a>, le framework web <a href="http://flask.pocoo.org/">Flask</a>, et la librairie HTTP <a href="http://python-requests.org">Requests</a> ressemblerait à ça :</p> + +<pre class="brush: python;">@app.route('/api/login', methods=['POST']) +def login(): + # La requête doit avoir une assertion à vérifier + if 'assertion' not in request.form: + abort(400) + + # Envoyer l'assertion au service de vérification de Mozilla. + data = {'assertion': request.form['assertion'], 'audience': 'https://example.com:443'} + resp = requests.post('https://verifier.login.persona.org/verify', data=data) + + # Le vérificateur a-t-il répondu ? + if resp.ok: + # Décoder la réponse + verification_data = json.loads(resp.content) + + # Si l'assertion est valide + if verification_data['status'] == 'okay': + # Connecter l'utilisateur en lui envoyant un cookie de session sécurisé + session.update({'email': verification_data['email']}) + return resp.content + + # Oups, quelque chose a échoué. Abandon. + abort(500) +</pre> + +<p>La gestion de session est probablement très similaire à votre système de connexion existant. Le premier grand changement est de vérifier l'identité de l'utilisateur en vérifiant une assertion plutôt que son mot de passe. L'autre grand changement est de s'assurer que l'adresse email de l'utilisateur est disponible pour la passer dans le paramètre <code>loggedInEmail</code> de <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>.</p> + +<p>La déconnexion est simple : vous n'avez qu'à effacer le cookie de session de l'utilisateur.</p> + +<h2 id="Étape_5_Consultez_les_bonnes_pratiques">Étape 5 : Consultez les bonnes pratiques</h2> + +<p>Une fois que tout fonctionne et que vous vous êtez connecté et déconnecté avec succès de votre site, vous devriez prendre un moment pour consulter les <a href="/fr/Persona/Considerations_de_securite">bonnes pratiques</a> pour utiliser Persona de manière sûre et sécurisée.</p> + +<p>Si vous construisez un site de production, consulter le <a href="/fr/Persona/The_implementor_s_guide">guide de l'implémenteur</a>, où nous collections les astuces pour intégrer les fonctionnalités souvent requises dans les systèmes de connexion.</p> + +<p>Enfin, n'oubliez pas de vous inscrire à la<span style="line-height: inherit;"> liste de difussion </span><a style="line-height: inherit;" href="https://mail.mozilla.org/listinfo/persona-notices">Persona notices</a><span style="line-height: inherit;"> afin d'être informé des failles de sécurité ou de changements incompatibles avec de précédentes versions de l'API Persona. Cette liste a un taffic extrêmement faible : elle est uniquement utilisée pour annoncer des changements qui pourraient avoir un impact négatif sur votre site.</span></p> + +<p> </p> diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/ajouter_adresse_email_supplementaire_avec_persona/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/ajouter_adresse_email_supplementaire_avec_persona/index.html new file mode 100644 index 0000000000..2058fd4b0a --- /dev/null +++ b/files/fr/archive/mozilla/persona/the_implementor_s_guide/ajouter_adresse_email_supplementaire_avec_persona/index.html @@ -0,0 +1,18 @@ +--- +title: Ajouter des adresses e-mail supplémentaires avec Persona +slug: >- + Archive/Mozilla/Persona/The_implementor_s_guide/Ajouter_adresse_email_supplementaire_avec_Persona +tags: + - Persona +translation_of: >- + Archive/Mozilla/Persona/The_implementor_s_guide/Adding_extra_email_addresses_with_Persona +--- +<p>C'est une bonne idée de permettre à vos utilisateurs d'ajouter des adresses e-mail supplémentaires à leurs comptes. Ceci leur permet de <a href="/fr/Persona/The_implementor_s_guide/permettre_utilisateurs_changer_adresse_email">changer leurs adresses e-mail</a>, et d'accéder à leur compte même s'ils sont dans l'impossibilité d'accéder à leur compte e-mail principal.</p> +<p>Vous devrez vérifier les adresses supplémentaires. Vous pouvez le faire manuellement, en envoyant un e-mail contenant un lien de vérification à la nouvelle adresse, ou le faire en utilisant Persona.</p> +<p>Si vous utilisez Persona pour ajouter des adresses e-mail, il vous faut alors faire attention à plusieurs points : rendez le contexte de la requête explicite, et mettez à jour la valeur passer dans <code>loggedInUser </code>pour assurer que la transaction n'est pas cassée par le gestionnaire de session de Persona</p> +<h3 id="Clarifier_le_context_de_la_requête">Clarifier le context de la requête</h3> +<p>Quand vous requêtez une nouvelle assertion en utilisant soit la vieille API <a href="/fr/docs/Web/API/Navigator/id/get" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.get()</code></a> ou l'API <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.request()</code></a>, Persona part du principe que l'utilisateur est en train d'essayer de se connecter au site web, et l'interface utilisateur est affiché en conséquence. Si vous utilisez Persona seulement pour vérifier une nouvelle adresse e-mail, votre site doit expliquer ceci clairement aux utilisateurs, afin qu'ils ne soient pas étonnés par la fenêtre de Persona.</p> +<h3 id="Mettre_à_jour_loggedInUser">Mettre à jour <code>loggedInUser</code></h3> +<p>Si vous utilisez l'API <a href="/fr/docs/Web/API/Navigator/id/get" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.get()</code></a> sur l'ensemble de votre site, alors vous pouvez simplement faire un nouvel appel à <a href="/fr/docs/Web/API/Navigator/id/get" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.get()</code></a> pour obtenir la nouvelle adresse e-mail.</p> +<p>Mais si vous utilisez <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.request()</code></a>, il vous faut alors utiliser <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.request()</code></a> pour obtenir l'adresse e-mail supplémentaire. Dans ce cas, quand vous avez vérifié l'assertion dans votre gestionnaire <code>onlogin</code>, vous devez mettre à jour l'argument <code>loggedInUser</code> de <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> avec la nouvelle adresse.</p> +<p>Si vous ne le faîtes pas, il y aura une mauvaise correspondance : Persona pensera que l'utilisateur connecté est <code>nouvelle_adresseemail@example.org</code>, mais votre site web dira que l'utilisateur connecté est <code>vieille_adresseemail@example.org</code>. Persona réagira en déclenchant <code>onlogin </code>avec une assertion pour <code>nouvelle_adresseemail@example.org</code>, que votre site web reconnatra sûrement comme un nouveau utilisateur souhaitant se connecter.</p> diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic/index.html new file mode 100644 index 0000000000..fb2c27e81b --- /dev/null +++ b/files/fr/archive/mozilla/persona/the_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic/index.html @@ -0,0 +1,12 @@ +--- +title: Appeler request() seulement depuis un gestionnaire de clic +slug: >- + Archive/Mozilla/Persona/The_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic +tags: + - Persona +translation_of: >- + Archive/Mozilla/Persona/The_implementor_s_guide/Call_request()_only_from_a_click_handler +--- +<p>Le fenêtre Persona est actuellement implémentée comme une fenêtre popup. Les navigateurs web modernes <a href="https://support.mozilla.org/fr/kb/parametres-exceptions-depannage-blocage-popup">bloquent les popups</a>, sauf s'ils sont déclenchés directement depuis un clic de la souris ou depuis un touche du clavier. Ceci veut dire que vous devez appeler <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.request()</code></a> ou <a href="/fr/docs/Web/API/Navigator/id/get" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.get()</code></a> directement depuis la fonction gérant le clic ou la touche pressée. Si c'est fait en réaction à un autre évènement, le popup ne s'affichera pas et l'utilisateur ne pourra pas s'identifier.</p> +<p>Par exemple : Supposons que votre site web diffère l'identification. Les utilisateurs peuvent parcourir le contenu, mais ils ne doivent s'identifier que lorsqu'ils souhaitent éditer le contenu. Si vous implémentez ceci en appelant <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.request()</code></a> en réponse à un évènement <code>focus</code> sur un champ texte, alors la popup sera bloquée.</p> +<p>Vous pouvez toujours implémenter l'identification sur le focus de cette façon : sur l'évènement <code>focus</code>, affichez un dialogue avec un bouton "Identifiez-vous", et attachez le déclenchement de <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.request()</code></a> sur l'évènement <code>click</code>.</p> diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/call_logout()_after_a_failed_login/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/call_logout()_after_a_failed_login/index.html new file mode 100644 index 0000000000..b587288f2d --- /dev/null +++ b/files/fr/archive/mozilla/persona/the_implementor_s_guide/call_logout()_after_a_failed_login/index.html @@ -0,0 +1,21 @@ +--- +title: Appeler logout() après une connexion échouée +slug: >- + Archive/Mozilla/Persona/The_implementor_s_guide/Call_logout()_after_a_failed_login +tags: + - Persona +translation_of: >- + Archive/Mozilla/Persona/The_implementor_s_guide/Call_logout()_after_a_failed_login +--- +<p>Après que votre gestionnaire <code>onlogin</code> a été appelé avec une assertion, si pour quelque raison, vous ne pouvez utiliser cette assertion pour connecter l'utilisateur, vous devez appeler <a href="/fr/docs/Web/API/Navigator/id/logout" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.logout()</code></a>.</p> +<p>Si vous ne le faîtes pas, la prochaine que vous appelerez <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>, Persona appelera immédiatement, à nouveau, votre gestionnaire <code>onlogin</code>, avec la même assertion. Ceci amène généralement à une boucle infinie d'echec de connexion :</p> +<ol> + <li>L'utilisateur clique sur "Se connecter"</li> + <li>L'utilisateur intéragit avec l'interface de Persona, et Persona génère une assertion</li> + <li>Persona livre l'assertion au gestionnaire <code>onlogin</code> de la page</li> + <li>Le gestionnaire <code>onlogin</code> rejète l'assertion, et redirige l'utilisateur vers la page de connexion</li> + <li>La page de connexion se charge, et appelle <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>. Nous retournons à l'étape 3.</li> +</ol> +<p>Ceci car Persona essaye de se souvenir de l'adresse e-mail que vous voulez utilisez pour la connexion sur un site donné. Une fois que l'utilisateur a essayé de se connecté à votre site en tant que bob@example.org, Personna se souvient que c'est l'adresse que vous souhaitez utiliser pour ce site. Quand une nouvelle page se charge et appele <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> avec un <code>loggedInUser</code> à '<code>null</code>', Persona compare à nouveau avec sa valeur "bob@example.org", et envoie l'assertion à nouveau.</p> +<p>Pour que Persona oublie l'association entre votre site l'adresse e-mail, appelez <a href="/fr/docs/Web/API/Navigator/id/logout" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.logout()</code></a> si vous ne souhaitez pas identifier l'utilisateur avec cette assertion. Ceci parce que l'assertion n'est pas valide, ou parce que vous ne voulez pas utiliser cette adresse e-mail.</p> +<p>Un scénario commun, où ce problème peut survenir, est quand un service veut autoriser ses utilisateurs à <strong>se connecter</strong> avec Persona, mais ne veut pas permettre de <strong>s'inscrire</strong> avec Persona, préférant un système d'inscription personnalisé pour les nouveaux utilisateurs. Dans ce cas, quand vous recevez l'assertion, vous vérifiez que l'adresse e-mail est bien celui d'un de vos utilisateurs, et si ce n'est pas le cas, vous rejetez la connexion. Si vous rejetez l'assertion, vous devez appeler <a href="/fr/docs/Web/API/Navigator/id/logout" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.logout()</code></a>.</p> diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/index.html new file mode 100644 index 0000000000..6057c265b6 --- /dev/null +++ b/files/fr/archive/mozilla/persona/the_implementor_s_guide/index.html @@ -0,0 +1,55 @@ +--- +title: Guide de l'implémenteur +slug: Archive/Mozilla/Persona/The_implementor_s_guide +tags: + - Persona +translation_of: Archive/Mozilla/Persona/The_implementor_s_guide +--- +<p>Le <a href="/fr/Persona/Quick_Setup">guide de configuration rapide</a> peut être suffisant pour démarrer, mais quand vous construisez un site complet pour la production, vous aurez probablement besoin de fonctionnalités qui n'ont pas été couvertes par ce guide. Dans cette page, nous avons rassemblé les fonctionnalités qui sont couramment nécessaires pour les systèmes de connexion, et nous expliquons les meilleures pratiques pour les implémenter avec Persona.</p> +<div class="section"> + <dl> + <dt> + <a href="/fr/Persona/The_implementor_s_guide/Call_logout()_after_a_failed_login">Appeler logout() après une connexion échouée</a></dt> + <dd> + Appeler toujours logout() si vous rejetez une assertion, pour évider une différence entre votre idée de l'utilisateur courant et l'idée de Persona, qui pourrait amener à une boucle infinie d'échecs de connexion.</dd> + </dl> + <dl> + <dt> + <a href="/fr/Persona/The_implementor_s_guide/Ajouter_adresse_email_supplementaire_avec_Persona">Ajouter des adresses e-mail supplémentaires avec Persona</a></dt> + <dd> + Comment permettre à vos utilisateurs d'ajouter une adresse e-mail secondaire en utilisant Persona.</dd> + </dl> + <dl> + <dt> + <a href="/fr/Persona/The_implementor_s_guide/permettre_utilisateurs_changer_adresse_email">Permettre aux utilisateurs de changer d'adresse e-mail</a></dt> + <dd> + Comme permettre à vos utilisateurs de changer d'adresse e-mail en utilisant Persona.</dd> + </dl> + <dl> + <dt> + <a href="/fr/Persona/The_implementor_s_guide/problemes_integrer_protection_CRSF">Problèmes pour intégrer une protection CSRF</a></dt> + <dd> + Un problème causé par l'intération entre un mécanisme courant de protection CSRF et l'API Observer de Persona.</dd> + </dl> + <dl> + <dt> + <a href="/fr/Persona/The_implementor_s_guide/supporter_utilisateurs_sans_javascript" title="BrowserID/Quick setup">Supporter les utilisateurs sans JavaScript</a></dt> + <dd> + Persona requiert JavaScript. Cette page a quelques astuces pour supporter les utilisateurs qui n'ont pas JavaScript.</dd> + </dl> + <dl> + </dl> + <dl> + <dt> + <a href="/fr/Persona/The_implementor_s_guide/appeler_request()_seulement_depuis_gestionnaire_clic">Appeler request() seulement depuis un gestionnaire de clic</a></dt> + <dd> + Parce que Persona utilise une fenêtre popup, vous devez appeler<code> request() </code>ou <code>get()</code> seulement dans la fonction attachée à l'évènement <code>click</code> ou <code>keypress</code>, pas à un autre type d'évènement.</dd> + </dl> + <dl> + <dt> + <a href="/fr/Persona/The_implementor_s_guide/tester">Tester votre système</a></dt> + <dd> + Quelques conseils pour simuler la connexion et la déconnexion des utilisateurs sur votre site web.</dd> + </dl> +</div> +<p> </p> diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/permettre_utilisateurs_changer_adresse_email/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/permettre_utilisateurs_changer_adresse_email/index.html new file mode 100644 index 0000000000..be06388a44 --- /dev/null +++ b/files/fr/archive/mozilla/persona/the_implementor_s_guide/permettre_utilisateurs_changer_adresse_email/index.html @@ -0,0 +1,22 @@ +--- +title: Permettre aux utilisateurs de changer d'adresse e-mail +slug: >- + Archive/Mozilla/Persona/The_implementor_s_guide/permettre_utilisateurs_changer_adresse_email +tags: + - Persona +translation_of: >- + Archive/Mozilla/Persona/The_implementor_s_guide/Enabling_users_to_change_their_email_address +--- +<p>Parce que les noms d'utilisateur Persona sont des adresses e-mail, il n'est pas forcément évident de savoir comment vous pouvez permettre à vos utilisateurs de changer d'adresse e-mail. Nous sommes en train de travailler pour améliorer le processus, et pour le moment, c'est un peu particulier, mais faisable en suivant ces étapes :</p> +<ol> + <li>Utilisez un identifiant qui est indépendant de l'adresse e-mail de l'utilisateur comme clef primaire dans votre table d'utilisateurs. Elle peut ainsi rester la même lorsque l'adresse e-mail change.</li> + <li>Permettez aux utilisateurs d'ajouter des adresses e-mail à leurs comptes. Vous devrez vérifier leurs adresses e-mail, ce que vous pouvez faire manuellement, en envoyer un lien de vérification dans un e-mail à leur nouvelle adresse, ou en utilisant Persona. Si vous utilisez Persona, lisez <a href="/fr/Persona/The_implementor_s_guide/Ajouter_adresse_email_supplementaire_avec_Persona">Ajouter des adresses e-mail supplémentaires avec Persona</a>.</li> + <li>Permettez aux utilisateurs de se connecter avec n'importe quelle adresse e-mail de leur compte.</li> + <li>Permettez aux utilisateurs de supprimer leurs adresses e-mail.</li> +</ol> +<p>Avec ces fonctionnalités, les utilisateurs peuvent changer leur adresse e-mail de cette façon :</p> +<ol> + <li>Connexion à leur compte en utilisant leur adresse e-mail courante</li> + <li>Ajout d'une nouvelle adresse e-mail à leur compte</li> + <li>Suppression de l'ancienne adresse e-mail de leur compte.</li> +</ol> diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/problemes_integrer_protection_crsf/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/problemes_integrer_protection_crsf/index.html new file mode 100644 index 0000000000..134f7954ec --- /dev/null +++ b/files/fr/archive/mozilla/persona/the_implementor_s_guide/problemes_integrer_protection_crsf/index.html @@ -0,0 +1,21 @@ +--- +title: Problèmes pour intégrer une protection CSRF +slug: >- + Archive/Mozilla/Persona/The_implementor_s_guide/problemes_integrer_protection_CRSF +tags: + - Persona +translation_of: >- + Archive/Mozilla/Persona/The_implementor_s_guide/Problems_integrating_with_CRSF_protection +--- +<p>Si vous implémentez une protection particulière contre les attaques de connexion CSRF (Cross-Site Request Forgery, contrefaçon de requêtes trans-sites), vous rencontrerez des problèmes quand un utilisateur a plusieurs pages ouvertes sur votre site, et essaie ensuite de se connecter avec l'une d'elles. Ce document explique ce problème, et comment le résoudre.</p> +<h3 id="CSRF_et_les_attaques_de_connexion_CSRF">CSRF et les attaques de connexion CSRF</h3> +<p>Dans le cas normal d'une attaque CSRF, l'utilisateur est déjà connecté au site ciblé (par exemple, leur banque). L'utilisateur charge alors une page sur un autre site, construite de manière malveillante. Cette page envoie une requête HTTP vers le site web ciblé : la requête présente un intérêt particulier (par exemple, le transfert d'argent vers l'attaqueur). Le site ciblé permet la requête car il pense que puisque l'utilisateur est connecté au site, elle est faite par l'utilisateur.</p> +<p>Dans le cas d'une attaque de connexion CSRF, l'utilisateur charge une page construite de manière malveillante qui connecte l'utilisateur sur le site ciblé, mais <strong>en tant que l'attaquant</strong> : le site ciblé dépose alors un cookie de session dans le navigateur de l'utilisateur. L'attaquant peut accéder au compte plus tard, et récupérer les informations que le site a collectées sur l'utilisateur.</p> +<h3 id="Protection_contre_CSRF_jetons_CSRF_déclinés_à_partir_de_l'identifiant_de_session">Protection contre CSRF : jetons CSRF déclinés à partir de l'identifiant de session</h3> +<p>Une protection courante contre les attaques normales CSRF consiste pour les sites web de générer un jeton à partir de l'identifiant de session de l'utilisateur, et l'inclure dans les pages qu'ils servent : ensuite les requêtes POST doivent inclure ce jeton, qui est vérifié par le serveur. Ceci veut dire que les requêtes POST ne peuvent pas être faites depuis d'autres domaines, car ils ne peuvent pas accéder au jeton utilisé pour la vérification.</p> +<p>Avec les attaques de <strong>connexion</strong> CSRF, bien sûr, l'utilisateur n'est pas encore connecté au site web. Donc le site prépare une première session dès que l'utilisateur visite une page. Elle est utilisée pour générer le jeton CSRF jusqu'à ce que l'utilisateur se connecte. Une fois l'utilisateur connecté, un nouvel identifiant de session est généré, et un jeton CSRF est regénéré.</p> +<h3 id="Le_problème_avec_Persona">Le problème avec Persona</h3> +<p>Le problème avec Persona survient quand l'utilisateur n'est pas encore identifié, et a des pages de votre site web dans deux différents onglets, A et B. Les pages contiennent le même jeton CSRF, généré à partir de l'identifiant de la première session. Ensuite l'utilisateur se connecte dans l'onglet A, et le site genère un nouvel identifiant de session, et de par le fait, un nouveau jeton CSRF. Mais l'onglet B a toujours l'ancienne page de chargée, contenant l'ancien jeton, maintenant invalide.</p> +<p>Dans des circonstances ordinaires cela n'aurait pas d'importance : dès que l'onglet B recharge la page, ou que l'utilisateur navigue sur une nouvelle page, le jeton CSRF inclus est mis à jour. Mais lorsque Persona a généré une assertion en réponse à un appel à <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.request()</code></a>, Persona appelle <code>onlogin</code> pour chaque onglet qui a chargé le site Web, et pas seulement pour celui qui a réclamé l'assertion. Dès l'appel du gestionnaire <code>onlogin</code> sur l'onglet B, il essaie d'envoyer en POST l'assertion vers le serveur qui utilise l'ancien jeton CSRF — et le serveur lance alors une erreur CSRF.</p> +<h3 id="La_solution">La solution</h3> +<p>La solution consiste pour le gestionnaire de <code>onlogin</code> à envoyer une requête GET qui réclame un nouveau jeton CSRF et vérifie que l'utilisateur est déjà identifié. Si l'utilisateur est bien identifié, le gestionnaire n'a plus qu'à recharger la page. Sinon il utilise le nouveau jeton CSRF pour envoyer l'assertion en POST au serveur.</p> diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/supporter_utilisateurs_sans_javascript/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/supporter_utilisateurs_sans_javascript/index.html new file mode 100644 index 0000000000..429975768b --- /dev/null +++ b/files/fr/archive/mozilla/persona/the_implementor_s_guide/supporter_utilisateurs_sans_javascript/index.html @@ -0,0 +1,10 @@ +--- +title: Supporter les utilisateurs sans JavaScript +slug: >- + Archive/Mozilla/Persona/The_implementor_s_guide/supporter_utilisateurs_sans_javascript +tags: + - Persona +translation_of: >- + Archive/Mozilla/Persona/The_implementor_s_guide/Supporting_users_without_JavaScript +--- +<p>Persona <a href="/en-US/Persona/FAQ#Why_does_Persona_require_JavaScript.3F">requiert actuellement JavaScript</a>. Si vous avez besoin de supporter les utilisateurs qui n'ont pas JavaScript activé, il vous faudra implémenter un système de connexion alternatif pour ces utilisateurs, et désactiver le bouton "Se connecter avec Persona", en l'activant avec le code JavaScript qui associe le bouton avec <a href="/fr/docs/Web/API/Navigator/id/request" title="Cette documentation n'a pas encore été rédigée, vous pouvez aider en contribuant !"><code>navigator.id.request()</code></a>.</p> diff --git a/files/fr/archive/mozilla/persona/the_implementor_s_guide/tester/index.html b/files/fr/archive/mozilla/persona/the_implementor_s_guide/tester/index.html new file mode 100644 index 0000000000..cc9db5711b --- /dev/null +++ b/files/fr/archive/mozilla/persona/the_implementor_s_guide/tester/index.html @@ -0,0 +1,10 @@ +--- +title: Tester +slug: Archive/Mozilla/Persona/The_implementor_s_guide/tester +tags: + - Persona +translation_of: Archive/Mozilla/Persona/The_implementor_s_guide/Testing +--- +<p>Si vous développez un système pour la production, vous aurez sûrement besoin d'écrire des tests d'intégration qui simuleront l'identification par un utilisateur et sa déconnexion, en utilisant Persona.</p> +<p>Si vous utilisez <a href="http://docs.seleniumhq.org/" title="http://docs.seleniumhq.org/">Selenium</a> pour tester, considérez l'utilisation de la bibliothèque <a href="https://github.com/mozilla/bidpom" title="https://github.com/mozilla/bidpom">bidpom</a>. Les sites <a href="https://mockmyid.com/" title="https://mockmyid.com/">mockmyid.com</a> et <a href="http://personatestuser.org" title="http://personatestuser.org">personatestuser.org</a> peuvent aussi être utiles.</p> +<p>Vous voudrez aussi peut-être regarder <a href="http://toolness.github.io/stubbyid/" title="http://toolness.github.io/stubbyid/">stubbyid</a>.</p> diff --git a/files/fr/archive/mozilla/persona/vue_densemble_du_protocole/index.html b/files/fr/archive/mozilla/persona/vue_densemble_du_protocole/index.html new file mode 100644 index 0000000000..2b14af2b69 --- /dev/null +++ b/files/fr/archive/mozilla/persona/vue_densemble_du_protocole/index.html @@ -0,0 +1,61 @@ +--- +title: Vue d'ensemble du protocole +slug: Archive/Mozilla/Persona/vue_densemble_du_protocole +translation_of: Archive/Mozilla/Persona/Protocol_Overview +--- +<p>Persona est construit sur le protocole BrowserID. Cette page décrit le fonctionnement haut niveau de BrowserID.</p> +<h2 id="Acteurs">Acteurs</h2> +<p>Le protocole implique trois acteurs:</p> +<ul> + <li><strong>Les utilisateurs :</strong> Les personnes voulant se connecter a des sites web en utilisant Persona.</li> + <li><strong>Relying Parties (RPs): </strong>Les sites web autorisant la connexion avec Persona.</li> + <li><strong>Fournisseur d</strong>'<strong>identite (IdPs): </strong>Domains that can issue Persona-compatible identity certificates to their users.</li> +</ul> +<p>Persona et le protocole BrowserID utilisent les adresses e-mail comme identifiant, il est donc naturel que les fournisseurs d'e-mail deviennent des IdPs.</p> +<p>Mozilla intervient en tant qu'IdP par défaut pour que les utilisateurs puissent utiliser n'importe quelle adresse e-mail, même si son fournisseur n'est pas un IdP.</p> +<h2 id="Étapes_du_protocole">Étapes du protocole</h2> +<p>Il y a trois étapes distinctes dans le protocole :</p> +<ol> + <li>Fourniture du certificat de l'utilisateur</li> + <li>Génération de l'assertion</li> + <li>Vérification de l'assertion</li> +</ol> +<p>Comme prérequis, l'utilisateur doit avoir une adresse e-mail active qu'il souhaite utiliser pour se connecter. Le protocole ne requière pas que le fournisseur d'identité soit un routeur SMTP, mais il requière que l'identité soit au format <code>utilisateur@domaine</code>.</p> +<h3 id="Fourniture_du_certificat_de_l'utilisateur">Fourniture du certificat de l'utilisateur</h3> +<p>Pour se connecter à un site, un utilisateur doit prouver qu'il est le propriétaire de l'e-mail. La base de cette preuve est un certificat signé et chiffré fourni par l'IdP attestant le lien entre le navigateur d'un utilisateur et une identité donnée par l'IdP.</p> +<p>Comme Persona utilise les techniques standard de <a href="https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique" title="https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique">cryptographie par clef publique</a>, le certificat de l'utilisateur est signé avec la clef privée de l'IdP et contient :</p> +<ul> + <li>L'adresse e-mail de l'utilisateur.</li> + <li>La clef publique de l'utilisateur pour cette adresse sur ce navigateur.</li> + <li>La date où le certificat a été publié.</li> + <li>La date où le certificat expire.</li> + <li>Le nom de domaine de l'IdP.</li> +</ul> +<p>Le navigateur de l'utilisateur génére une paire de clef différente pour chaque adresse de l'utilisateur, et ces paires ne sont pas partagées entre les navigateurs. En conséquence, un utilisateur doit obtenir un nouveau certificat à chaque fois qu'un expire, ou à chaque fois qu'il utilise un nouveau navigateur ou ordinateur. Les certificats doivent expirer dans les 24h après leur emission.</p> +<p>Quand un utilisateur séléctionne une identité à utiliser quand il se connécte a un site, le navigateur vérifie s'il a un certificat valide pour cette identité. Si c'est le cas, l'étape est terminée et la navigation continue avec l'étape d'après : la génération de l'assertion. Si le navigateur n'a pas de certificat valide, il essaye d'en obtenir un du domaine associé avec l'identité choisie.</p> +<ol> + <li>Le navigateur va chercher le document de support <a href="/en-US/docs/Persona/.well-known-browserid" title="/en-US/docs/Persona/.well-known-browserid">/.well-known/browserid</a> par SSL depuis le domaine de l'identité.</li> + <li>Avec les informations du document, le navigateur transmet l'adresse e-mail de l'utilisateur et la clef publique associée au fournisseur d'identité et demande un certificat signé.</li> + <li>Si nécessaire, l'utilisateur est invité à se connecter chez le fournisseur avant la fourniture du certificat.</li> + <li>Le fournissseur crée, signe et donne le certificat de l'utilisateur au navigateur de l'utilisateur.</li> +</ol> +<p>Le certificat en main, le navigateur peut continuer avec la génération de l'assertion et la connexion au site.</p> +<p><img alt="user-certificate-provisioning.png" class="internal default" src="/@api/deki/files/6043/=user-certificate-provisioning.png"></p> +<h3 id="Génération_de_l'assertion">Génération de l'assertion</h3> +<p>Le certificat de l'utilisateur établie un lien vérifiable entre une adresse e-mail et une clef publique. Cependant, seul, ce n'est pas suffisant pour se connecter à un site web : l'utilisateur doit encore monter son lien avec le certificat en prouvant sa possession de la clef privée.</p> +<p>Pour cela, le navigateur de l'utilisateur crée et signe un nouveau document appelé "assertion de l'identité". Il contient :</p> +<ul> + <li>Le domaine du site où l'utilisateur veut se connecter.</li> + <li>Une date d'expiration de l'assertion, généralement moins de 5 minutes après sa création.</li> +</ul> +<p>Le navigateur présente alors à la fois le certificat de l'utilisateur et l'assertion de l'identité au site web pour la vérification.</p> +<h3 id="Vérification_de_l'assertion">Vérification de l'assertion</h3> +<p>La combinaison du certificat et de l'assertion est suffisante pour confirmer l'identité d'un utilisateur.</p> +<p>D'abord, le site vérifie le domaine et la date d'expiration dans l'assertion. Si l'assertion est expirée ou destinée a un domaine different, elle est rejetée. Cela évite la réutilisation malicieuse de l'assertion</p> +<p>Ensuite, le site valide la signature de l'assertion avec la clef publique de l'utilisateur contenu dans le certificat. Si la clef et la signature correspondent, le site est assuré que l'utilisateur posséde vraiment la clef associée au certificat.</p> +<p>En dernier, le site va chercher la clef publique du fournisseur depuis son document <a href="/en-US/docs/Persona/.well-known-browserid" title="/en-US/docs/Persona/.well-known-browserid">/.well-known/browserid</a> et verifie qu'il correspond a la signature du certificat de l'utilisateur. Si c'est le cas, le site peut etre certain que le certificat a vraiment ete issue du domaine en question.</p> +<p>Une fois cela vérifié, this is a current login attempt for the proper RP, that the user certificate matches the current user, and that the user certificate is legitimate, the RP is done and can authenticate the user as the identity contained in the certificate.</p> +<p><img alt="assertion-generation-and-verify.png" class="internal default" src="/@api/deki/files/6042/=assertion-generation-and-verify.png"></p> +<h2 id="The_Persona_Fallback_IdP">The Persona Fallback IdP</h2> +<p>What if a user's email provider doesn't support Persona? In that case, the provisioning step would fail. By convention, the user's browser handles this by asking a trusted third party, <a href="https://login.persona.org/" title="https://login.persona.org/">https://login.persona.org/</a>, to certify the user's identity on behalf of the unsupported domain. After demonstrating ownership of the address, the user would then receive a certificate issued by the fallback IdP, <code>login.persona.org</code>, rather than the identity's domain.</p> +<p>RPs follow a similar process when validating the assertion: the RP would ultimately request the fallback IdP's public key in order to verify the certificate.</p> |