web-dev-qa-db-fra.com

Créer une API pour la connexion unique avec un site tiers

Mon site doit s'intégrer à un logiciel tiers, qui vivra dans son propre sous-domaine, hébergé par l'éditeur de logiciel. Je dois fournir aux développeurs tiers un point de terminaison qu'ils peuvent utiliser pour passer des appels d'API (sur mon site wordpress) afin de permettre aux utilisateurs de mon site d'accéder au sous-domaine.

L'autre site doit authentifier les utilisateurs de mon site via une sorte d'API.

Je ne sais pas par où commencer, mais j’ai le sentiment que cela a été compris par des gens plus intelligents que moi. Merci d'avance!

12
emersonthis

Problèmes de script intersite

Vous ne pouvez pas transférer WP cookies d'authentification entre domaines. Vous ne souhaitez pas non plus stocker les mots de passe en texte clair pour la connexion à une autre installation WP par programme. Les utilisateurs doivent donc se connecter à WordPress, puis accéder à leur statut de connexion via un point de terminaison API à partir du site tiers. Cela permet à WordPress de gérer toute l’authentification. C'est assez sécurisé, car un utilisateur devra se connecter physiquement au côté WP pour que le point de terminaison de l'API transmette les données à un tiers.

Créer un point de terminaison API

Découvrez cet article que je viens d'écrire ici: http://coderrr.com/create-an-api-endpoint-in-wordpress/

En outre, vous pouvez voir la démonstration du code ici: https://Gist.github.com/2982319

Vous devrez comprendre la logique pour les besoins de votre propre application, mais cela vous permettra de créer un point de terminaison où vous pourrez diffuser tout ce que vous voulez du côté de WordPress.

Puisque vous utilisez WordPress comme site d'authentification, vous pouvez utiliser une vérification telle que is_user_logged_in (). S'ils sont connectés, renvoyez un objet utilisateur au tiers avec les informations nécessaires.

Se connecter depuis la tierce partie

Depuis un tiers, ils peuvent créer un lien vers votre page de connexion pour une expérience transparente à l'aide de la variable redirect_to query. Une fois connecté, il sera renvoyé au site tiers.

http://sub.yourdomain.com/wp-login.php?redirect_to=http%3A%2F%2Fwww.third-party-domain.com

Connexions distantes

Si vous devez connecter des utilisateurs à WordPress à partir d'un site tiers, vous pouvez utiliser quelques fonctions simples WP répertoriées sur ce site: http://kuttler.eu/code/log-in-a -wordpress-user-programatiquement/

Vous aurez certainement besoin d'utiliser un secret partagé et de créer des hachages basés sur le temps pour assurer la sécurité. En gros, voici à quoi cela ressemblerait:

Le tiers envoie une demande avec un horodatage et un jeton généré par un secret partagé:

$shared_secret = 'foobar'; //do not send this to the API endpoint
$timestamp = time();
$token = md5($shared_secret.$time_stamp);

L'installation de WordPress reçoit la demande:

$shared_secret = 'foobar';
$timestamp = esc_attr($_GET['timestamp']);

if((time() - $timestamp) > 30) # Threshold is 30 seconds
    //do something here - TOKEN expired!

$token = md5($share_secret.$timestamp);
$token_to_check = esc_attr($_GET);

if($token == $token_to_check)
    //authenticated!
16
Brian Fegter