URL de retour
Quand une demande est lancée sur l’appareil même où se trouve l’ExcelID de l’utilisateur (avec l’autoStartToken), l’application ExcelID peut ramener l’utilisateur vers votre service une fois la demande terminée. Elle utilise pour cela la returnUrl que vous avez envoyée à la création de la demande.
Pourquoi l’utiliser
Utiliser returnUrl rend votre service plus sûr : l’adresse de retour fait partie de la demande et ne peut pas être modifiée dans le lien de lancement. Elle renforce le lien entre votre service et l’utilisateur (« channel binding »).
Comment l’envoyer
Ajoutez la returnUrl dans l’appel à /auth ou /sign. Elle doit :
- commencer par
https://; - ramener l’utilisateur à la même page web ;
- contenir un nonce lié à la session.
{
"endUserIp": "196.28.245.10",
"returnUrl": "https://monservice.example/auth/connexion#nonce=a3618c72-bc71-4002-b3de-509555b175db",
"userVisibleData": "Q29ubmV4aW9uIMOgIE1vbiBTZXJ2aWNl"
}
Ce que vous devez vérifier au retour
- Le
noncede l’adresse est bien celui de cette session de navigateur. Sinon, quelqu’un a envoyé un lien à la personne : refusez. - Le cookie de session et l’adresse IP de l’utilisateur n’ont pas changé entre la page de départ et la page de retour.
- Votre backend a vérifié, avec
/collect, que la demande est terminée avec succès, et que l’appareil qui reçoit lareturnUrlest celui qui l’a lancée.
const nonce = crypto.randomBytes(16).toString('hex');
req.session.nonce = nonce;
const order = await excelid('/v1/auth', {
endUserIp: req.ip,
userVisibleData: b64('Connexion à Mon Service'),
returnUrl: `https://monservice.example/auth/connexion#nonce=${nonce}`,
});
Cas particuliers
- Si l’utilisateur a une version d’ExcelID qui ne sait pas lire la
returnUrlenvoyée par le serveur, la demande est annulée et il est invité à mettre à jour l’application. - La
returnUrlest toujours ouverte dans le navigateur par défaut de l’utilisateur, même si un autre navigateur a lancé ExcelID. - Sans
returnUrl, l’application se ferme et l’application ou le navigateur qui était derrière reprend la main.