API iFrame : Avoir la possibilité de faire un login-with-token
Description du besoin
Suite a l'issue #466 (closed) pour générer un token d'authentification, le besoin est maintenant de pouvoir s'appuyer sur ce token pour authentifier automatiquement l'utilisateur qui lance une application qui ouvre la pastille.
Pour cela, il existe la méthode Meteor Meteor.loginWithToken(token);
qui permet d'authentifier n'importe quel utilisateur a partir de son token. Mais Meteor n'est accessible que depuis la boite, pas depuis l'application qui ouvre la pastille.
Mise en place
En s'inspirant une nouvelle fois de ce que propose Rocket.Chat, avec les API Iframe, il faudrait mettre en place une mécanique basée sur postMessage pour pouvoir s'authentifier via loginWithToken depuis l'application.
Pour cela, l'application doit pouvoir appeler en javascript quelque chose du genre :
<script>
window.postMessage({
event: 'login-with-token',
loginToken: 'your-token'
}, 'http://laboite.url');
</script>
Description technique
On peut s'inspirer de ce fichier : https://github.com/RocketChat/Rocket.Chat/blob/develop/apps/meteor/client/startup/iframeCommands.ts
Il faudrait donc avoir un fichier js client dans le startup afin qu'il soit tout le temps chargé au lancement de laboite. Ce fichier déclarerai alors le window.addEventListener('message' ...
Sécurisation de l'API
Une sécurisation par origin d'url au niveau des settings sera également à prévoir, du style :
"loginWithTokenUrls": "http://url1,http://url2"
Avec un check au moment du eventListener du genre
const origins = settings.get<string>('loginWithTokenUrls');
if (origins !== '*' && origins.split(',').indexOf(e.origin) === -1) {
console.error('Origin not allowed', e.origin);
return;
}