Single sign-on de flux à l'aide de JWT pour les croix, l'authentification de domaine
Il y a beaucoup d'informations sur le web sur l'utilisation de JWT (Json Web Token
) pour l'authentification. Mais je n'ai toujours pas trouver une explication claire de ce que le débit doit être lors de l'utilisation de JWT jetons pour une solution d'authentification unique dans plusieurs domaines de l'environnement.
Je travaille pour une société qui a beaucoup de sites sur des hôtes différents. Nous allons utiliser 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 lui aussi être authentifié sur example2.com, automatiquement.
À l'aide de la OpenId Connect flux, je comprends que l'utilisateur qui veut s'authentifier sur example1.com va d'abord être redirigé vers le serveur d'authentification (ou OP
: "OpenId Fournisseur"). L'utilisateur s'authentifie sur le serveur qui redirige ensuite de retour à l'original example1.com site de signé, JWT jeton. (Je comprends, il y a un autre flux qui retourne un intermédiaire jeton que lui-même peut être échangé pour le réel JWT jeton plus tard, mais je ne pense pas que cela est nécessaire pour nous)...
Alors maintenant, l'utilisateur est de retour sur example1.com et est authentifié! Il peut faire des demandes, en passant le JWT jeton dans une Authentication
en-tête et le serveur est en mesure de vérifier la signature de JWT et est donc en mesure d'identifier l'utilisateur. Nice!
Première question :
Comment le JWT jeton être stocké sur le client? Il est, encore une fois, beaucoup d'informations à ce sujet, et les gens semblent d'accord pour dire que l'utilisation de Web Storage
est le chemin à parcourir plutôt que le bon vieux cookies
. Nous voulons que le JWT être persistant entre le redémarrage du navigateur donc, nous allons utiliser Local Storage
, pas Session Storage
...
L'utilisateur peut maintenant redémarrer son navigateur et il sera toujours authentifié sur example1.com, aussi longtemps que le JWT jeton n'est pas expiré!
Aussi, si example1.com besoin de faire une requête Ajax à un autre de nos domaines, je comprends la configuration De la SCRO permettrait que. Mais notre principal cas d'utilisation n'est pas des requêtes inter-domaine, c'est d'avoir un solution d'authentification unique!
Par conséquent, la principale question :
Maintenant, quel doit être le débit, si l'utilisateur passe à example2.com et nous voulons qu'il soit authentifié, à l'aide de la JWT jeton qu'il a déjà? Local Storage
ne semble pas permettre l'accès à d'autres domaines, de sorte à ce point, le navigateur ne peut pas lire le JWT jeton de faire des demandes de example2.com!
Doit :
- L'utilisateur est redirigé vers la serveur d'authentification de nouveau? Lorsque l'utilisateur est authentifié pour example1.com, l'
serveur d'authentification peut enregistrer un cookie sur l'utilisateur, de sorte que cette nouvelle demande d'authentification pour example2.com pourrait utiliser le cookie de voir que l'utilisateur est déjà authentifié et redirige immédiatement à son retour de
example2.com avec la même JWT jeton? - Ou peut le navigateur, sur example2.com, l'accès à l'JWT jeton sans avoir à aller à la serveur d'authentification de nouveau? Je vois que croix-des solutions de stockage, mais sont celles qui sont généralement utilisées? Sont-ils la solution proposée pour une croix de domaine de l'environnement SSO?
Nous ne voulons pas quelque chose de compliqué, nous serons très heureux avec la plupart du temps utilisé la solution!
- Puis-je utiliser l'authentification unique + open ID dans les formulaires web? je vous disposer d'un modèle de travail ou de l'article pour comprendre ce sur webforms, car jamais où je trouve MVC et .net de base
Vous devez vous connecter pour publier un commentaire.
L'utilisateur doit être redirigé vers le serveur d'authentification à nouveau et obtenir un nouveau jeton (JWT), qui est spécifiquement ciblée pour example2.com. C'est de cette façon OpenID Connect et tous les autres de la croix-domaine fédéré protocole d'authentification unique fonctionne.
Rediriger l'utilisateur vers la centrale d'authentification de service lorsque l'utilisateur n'est pas connecté à la demande d'informations d'identification et de délivrer un nouveau jeton d'authentification est le scénario courant dans l'authentification Unique Sur les systèmes utilisant bien connu des protocoles comme oauth2 ou OpenIdConnect
Toutefois, lorsque ce schéma est utilisé parmi les domaines les principal inconvénient est que l'utilisateur va être authentifié à chaque fois qu'il accède à d'autres domaine en raison même de la politique d'origine: le jeton de session ne peuvent pas être partagées entre les domaines, de sorte que le SSO permettra de traiter utilisateur non authentifié.
example2.com
ne peut pas accéder aux données deexample1.com
mais il y a une tecnique pour partager des données entre les domaines à l'aide du navigateur localStorage/cookies et une iframe pointant vers un intermédiaire de domainesso.example.com
Pour authentifier l'utilisateur dans
example1.com
, de rediriger lui pour le serveur d'authentification danssso.example.com
, numéro un JWT l'issue de l'authentification et de le stocker dans le localStorage de ce domaine. Après cela, rediriger l'utilisateur à l'origine de domaine example1.comCréer une iframe dans
example2.com
pointant verssso.example.com
. L'iframe dans sso.example.com lit le JWT jeton et envoie un message à la page parentLa page parent reçoit le message et obtient le joint jeton de continuer avec le SSO flux
Il n'y a pas de problème avec la politique de l'origine, car
sso.example.com
a accès à son localStorage et la communication entre l'iframe et la page parent est autorisé si l'origine et de destination se reconnaissent mutuellement (voir http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage)Pour simplifier le développement, nous avons publié récemment un croix domaine de l'authentification unique avec JWT à https://github.com/Aralink/ssojwt
Cette méthode est parfaitement compatible avec les flux de SSO. C'est juste une façon de partager le jeton d'authentification sans les redirections et d'éviter d'inutiles log-ins lorsque les domaines sont fédérés
Ne sais pas si cela répond à votre question, mais si votre objectif principal est de single sign-on, je pense qu'un simple proxy inverse permettrait de résoudre votre problème (au moins de la croix-domaine du stockage de l'un).
Donc
example1.com
example2.com
deviendrait quelque chose comme
example.com/example1
example.com/example2
(Et d'un côté utilisateur, c'est généralement plus propre)
Si ce n'est pas une option, vous pourriez avoir à configurer de sorte que lorsqu'un utilisateur s'authentifie en 1 nom de domaine, il utilise AJAX/caché des iframes pour créer une authentification avec les autres domaines (l'envoi d'un 1 jeton via l'url si vous devez).
et si ce n'EST pas une option, vous pourriez avoir à recourir à nom d'utilisateur+pin, comme les navigateurs sont plus élevées sur les interactions entre les domaines.