6 votes

Jeton JWT pour l'authentification interdomaine

J'essaie de créer un système SSO simple en PHP pour deux domaines qui sont thématiquement liés.

Je me demandais donc s'il était possible de stocker un jeton JWT signé contenant le nom d'utilisateur du domaine A dans le stockage local. Et ensuite de vérifier le JWT en utilisant la même clé secrète d'un domaine B, ce qui conduirait à une authentification réussie.

J'ai cherché des réponses sur Google et j'en ai trouvé quelques-unes contenant un domaine d'authentification intermédiaire, qui prendrait en charge l'authentification. Mais je voudrais simplement relier les deux domaines que j'ai.

Merci.

2voto

pedrofb Points 19206

L'accès au stockage de données à l'origine croisée du domaine B au domaine A n'est pas autorisé par politique d'origine commune

L'accès aux données stockées dans le navigateur, comme localStorage et IndexedDB, est séparé par l'origine. Chaque origine a son propre stockage séparé et JavaScript dans une origine ne peut pas lire ou écrire dans le stockage appartenant à une autre origine.

La solution habituelle est d'avoir un domaine central pour l'authentification (qui pourrait être A ou B) et de travailler avec redirections entre les domaines qui envoient le JWT ou le s Réunir le jeton d'authentification sur plusieurs domaines en utilisant un iframe. Voir les détails aquí

Les protocoles OpenId, OAuth et SAML fonctionnent avec des redirections, et par exemple la suite web de Google a ses applications connectées à travers des iframes (de plus google est un fournisseur de connexion openid).

0voto

edcs Points 738

Il n'y a aucune raison pour que vous ne puissiez pas le faire. Un JWT n'a rien de spécial, il s'agit simplement d'un jeton semblable à un jeton d'identification de session. La différence entre un JWT et tout autre jeton est qu'il peut contenir une charge utile de données.

Ce que vous décrivez est essentiellement l'octroi de mot de passe de OAuth 2.0. Votre système SSO est le serveur d'autorisation qui peut authentifier les utilisateurs et leur fournir un jeton d'accès. Dans ce cas également, le jeton d'accès peut être un JWT. Les utilisateurs (oners de ressources) peuvent ensuite utiliser leurs jetons d'accès pour accéder aux serveurs de ressources (vos autres domaines connexes), ces serveurs de ressources peuvent vérifier que le jeton d'accès est valide et autoriser ou refuser les demandes.

J'utilise la bibliothèque suivante pour implémenter OAuth 2.0 en PHP : https://oauth2.thephpleague.com/ - Il y a aussi de bonnes informations dans la documentation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X