web-dev-qa-db-fra.com

Autoriser l'utilisateur WordPress connecté à accéder à une tierce partie Laravel API via OAuth

J'ai une situation unique dans laquelle j'aimerais avoir de l'aide si possible:

Mon entreprise gère beaucoup de sites WordPress. Chaque site a son propre ensemble d'utilisateurs (les mêmes utilisateurs sur tous les sites, mais certains n'accèdent qu'à X, d'autres à Y, d'autres à X & Y, etc.). Nous utilisons un plug-in SSO personnalisé pour gérer tout cela, avec des autorisations et autres, qui fonctionnent parfaitement.

J'ai construit une application à Laravel, qui comporte des itinéraires publics et privés. J'utilise Laravel _ Passport/OAuth pour accéder aux routes privées. Tout sur ce front fonctionne parfaitement, aussi.

Cependant, je suis maintenant confronté à la situation dans laquelle les utilisateurs de WordPress doivent accéder à certaines routes protégées de mon API, sans leur demander de se connecter à l'API séparément.

Je sais que l’intérêt suscité par WP/OAuth est fondamentalement à l’opposé de ma situation, où les gens veulent se connecter à WordPress avec un fournisseur de services OAuth (Twitter/Google/LinkedIn/etc.), et non l’inverse.

Les sites API et WordPress sont hébergés sur une architecture complètement différente, sans aucun moyen d'accéder à l'une ou à l'autre base de données.

Ce que je recherche, c’est un moyen simple, pour mes utilisateurs de WordPress, de "s’autoriser" eux-mêmes sur mon API, sans avoir à gérer deux ensembles du même utilisateur. Idéalement, l'utilisateur WordPress ne serait pas nécessairement créé dans l'API, mais j'utilise des journaux d'audit pour suivre qui fait quoi dans l'API, afin de pouvoir déterminer qui a fait quoi, ce qui serait génial.

Toute aide ou expérience de personnes dans un bateau similaire serait géniale!

1
Kingsley

J'ai abordé ce légèrement différent pour ceux qui sont intéressés.

Je voulais garder mon API aussi légère que possible et ne pas la surcharger de versions/versions et d'utilisateurs, et j'ai donc fini par créer une deuxième instance Laravel.

Sur cette 2ème Laravel instance (consumer), nous avons utilisé Laravel Socialite, car nous utilisons déjà Google comme fournisseur SSO. L'utilisateur se connecte, c'est ici qu'il interagit avec mon API. Toutes les actions sont connectées au consommateur, le gardant hors de ma base de données API.

Pour la communication consumer -> API, j’ai installé Laravel Passport sur mon API et utilise le password_client, stocke un jeton de mot de passe sur le consumer et utilise Guzzle dans les coulisses de mon consumer pour parler à mon API.

J'ai créé un plugin WordPress pour ajouter un lien vers l'application consumer dans le menu d'administration de WordPress. J'ai essayé de placer la page de connexion SSO/OAuth de Google dans un iFrame. En raison d'une incompatibilité de domaine, ce n'est pas possible.

Cela fonctionne très bien maintenant! J'aimerais beaucoup convertir l'essentiel en plugin WordPress, mais je ne souhaite pas stocker mes jetons porteur/auth dans le plugin car ils peuvent être édités/visualisés par l'utilisateur.

1
Kingsley