Il existe de nombreuses informations sur le Web sur l'utilisation de JWT ( Json Web Token
) pour l'authentification. Mais je n'ai toujours pas trouvé d'explication claire de ce que devrait être le flux lors de l'utilisation de jetons JWT pour une solution d'authentification unique dans un environnement à plusieurs domaines .
Je travaille pour une entreprise qui a beaucoup de sites sur différents hébergeurs. Utilisons example1.com et example2.com . Nous avons besoin d'une solution d'authentification unique, ce qui signifie que si un utilisateur s'authentifie sur example1.com , nous voulons qu'il soit également authentifié sur example2.com , automatiquement.
En utilisant le flux OpenId Connect , je comprends que l'utilisateur qui souhaite s'authentifier sur example1.com sera d'abord redirigé vers le serveur d'authentification (ou OP
: "OpenId Provider"). L'utilisateur s'authentifie sur ce serveur qui le redirige ensuite vers le site example1.com d' origine avec un jeton JWT signé. (Je comprends qu'il existe un autre flux qui renvoie un jeton intermédiaire qui peut lui-même être échangé contre le jeton JWT réel plus tard, mais je ne pense pas que cela soit nécessaire pour nous) ...
Alors maintenant, l'utilisateur est de retour sur example1.com et est authentifié! Il peut faire des requêtes, en passant le jeton JWT dans un en- Authentication
tête et le serveur est capable de vérifier le JWT signé et est donc capable d'identifier l'utilisateur. Agréable!
Première question :
Comment le jeton JWT doit-il être stocké sur le client? Il y a, encore une fois, beaucoup d'informations à ce sujet, et les gens semblent convenir que l'utilisation Web Storage
est la voie à suivre plutôt que le bon vieux temps cookies
. Nous voulons que le JWT soit persistant entre les redémarrages du navigateur, alors utilisons Local Storage
, non Session Storage
...
Maintenant, l'utilisateur peut redémarrer son navigateur et il sera toujours authentifié sur example1.com , tant que le jeton JWT n'est pas expiré!
De plus, si example1.com a besoin de faire une demande Ajax à un autre de nos domaines, je comprends que la configuration de CORS le permettrait. Mais notre principal cas d'utilisation ne concerne pas les requêtes inter-domaines, c'est d'avoir une solution d'authentification unique !
Par conséquent, la question principale:
Maintenant, quel devrait être le flux, si l'utilisateur accède à example2.com et que nous voulons qu'il soit authentifié, en utilisant le jeton JWT qu'il possède déjà? Local Storage
ne semble pas autoriser l'accès inter-domaines, donc à ce stade, le navigateur ne peut pas lire le jeton JWT pour faire des requêtes à example2.com !
Devrait :
- L'utilisateur est-il redirigé vers le serveur d'authentification ? Lorsque l'utilisateur s'est authentifié par exemple1.com , le serveur d'authentification peut avoir placé un cookie sur l'utilisateur afin que cette nouvelle demande d'authentification pour exemple2.com puisse utiliser ce cookie pour voir que l'utilisateur est déjà authentifié et le redirige immédiatement vers exemple2.com avec le même jeton JWT?
- Ou le navigateur, sur example2.com , peut-il accéder au jeton JWT sans avoir à accéder à nouveau au serveur d'authentification ? Je vois qu'il existe des solutions de stockage croisé , mais sont-elles largement utilisées? Sont-ils la solution suggérée pour un environnement SSO interdomaine?
Nous ne voulons rien d'extraordinaire, nous serions satisfaits de la solution la plus utilisée!