Jetons liés à un navigateur avec ENCRYPTREQ() et DECRYPTREQ()
ENCRYPTREQ($, value, key, [strict]) chiffre une valeur avec le user agent de la requête et renvoie un jeton sous forme de texte. DECRYPTREQ($, token, key) relit la valeur et ne renvoie rien (undefined) quand la clé est fausse, que le jeton est vide ou que la requête vient d'un autre client. Avec strict à true, l'adresse IP de la requête fait aussi partie du jeton, qui cesse donc de fonctionner aussi quand l'adresse change.
Utilisez-le pour des valeurs que vous remettez au navigateur et que vous attendez de retour du même navigateur : un lien de courte durée, une adresse de téléchargement, un jeton de formulaire. Ce n'est pas un remplacement d'une session : le user agent se copie facilement. Pour les jetons qui ne dépendent pas de la requête, voir la recette sur le chiffrement et le déchiffrement.
exports.install = function() {
ROUTE('GET /issue/', issue);
ROUTE('GET /read/', read);
ROUTE('GET /read-wrong-key/', wrongkey);
};
function issue($) {
$.json({ token: ENCRYPTREQ($, { id: 5 }, 'my-secret'), strict: ENCRYPTREQ($, 'only-here', 'my-secret', true) });
}
function read($) {
$.json({ value: DECRYPTREQ($, $.query.token, 'my-secret') || null });
}
function wrongkey($) {
$.json({ value: DECRYPTREQ($, $.query.token, 'another-secret') || null });
}