intégration d'authentification unique / SSO avec un 'service d'annuaire' externe

11

Je suis sur le point de commencer à travailler sur un prototype pour un client - et l'une des fonctionnalités requises est l'intégration avec un système d'authentification / d'enregistrement d'utilisateur interne.

Ce système agira comme une base de données d'utilisateurs faisant autorité et fournira une interface RESTful pour créer de nouveaux utilisateurs et authentifier les utilisateurs valides.

  1. Je dois pouvoir créer de nouveaux utilisateurs dans WP et, dans le cadre de ce processus, appeler l'API d'authentification externe pour créer / valider cet utilisateur.

  2. Une personne qui est un utilisateur valide mais non connu de WP devrait pouvoir se connecter pour commenter, sans avoir besoin de s'inscrire sur le site de WP.

  3. Une personne connectée à l'ensemble du site Web doit également être automatiquement connectée à WordPress.

  

Je pense que ce qui suit est la voie à suivre.

     
  • Pour (1) - y a-t-il un hook d'enregistrement que je peux utiliser?

  •   
  • Pour (2) - je suppose que je raccorde le filtre d'authentification - c'est-à-dire que lorsque quelqu'un essaie de se connecter, je le piège, passe un appel au système externe, puis traite l'identifiant de WP ou le redirige au processus d’enregistrement où (1) prend l’ordre.

  •   
  • Pour (3) - lisez le cookie de connexion défini par le site principal et poursuivez avec (2)?

  •   

Je suppose que je devrai également insérer un enregistrement dans la table users et usermeta.

Alors, ce qui précède a-t-il un sens - n'ai-je pas pensé à quelque chose? N'importe qui a de bonnes ressources pour aider avec ça (@hakre - j'ai vu que vous aviez fait du travail là-dessus !!).

Mettre à jour

Donc, je cogne encore un peu la tête contre ce problème. Essentiellement, j'essaie de me connecter au filtre d'authentification et de l'utiliser pour:

  1. vérifie si un cookie de connexion pour le site 'maître' est défini, et si c'est le cas, revalidez-le par rapport à son API d'authentification et, s'il est valide, forcez une connexion WP avec wp_signon() , en utilisant les informations contenues dans le cookie de site principal. (email et mot de passe haché) comme identifiants pour WP
  2. si le cookie n'est pas défini, redirigez-le vers la page de connexion du site principal et obtenez un identifiant / une connexion, puis revenez à l'étape 1
  3. s'il n'y a pas d'utilisateur WP lorsqu'il existe un utilisateur de site maître authentifié, créez-le puis un code d'accès "transparent" (afin que l'utilisateur ne voie pas le formulaire de connexion WP)

En gros, je souhaite masquer entièrement le formulaire de connexion WP pour les utilisateurs qui vont simplement commenter, puis trouver un moyen d'autoriser les auteurs et l'administrateur à y accéder directement.

Cela va assez lentement, voici ce que je pourrais utiliser avec de l'aide:

  • le filtre d'authentification est-il le bon? Il ne semble pas être appelé dans toutes les situations auxquelles je m'attendais - par exemple, le méta-widget affiche les liens de connexion / déconnexion sans le déclenchement de hook authentifié

  • Je peux obtenir que wp_signon() renvoie un objet WP_User (indiquant le succès), mais cela n'affecte pas le statut de connexion. En d'autres termes, le méta-widget afficherait toujours "Connexion" même après l'actualisation.

Toute aide reçue avec gratitude:)

    
posée anu 08.02.2011 - 18:26

3 réponses

10

OK, l'approche qui fonctionne pour moi est la suivante:

  1. Supposons que la base de données d'utilisateurs du site principal fait autorité. Le cookie de connexion au site principal contient un identifiant et un hachage du mot de passe du site.

  2. Récupérez le cookie du site principal et revalidez-le par rapport à l'API d'authentification du site principal

  3. Si valide, utilisez l'adresse électronique de la valeur de retour en tant que valeur 'user_login' pour WP et le mot de passe de site haché en tant que mot de passe WP.

  4. Teste si cet utilisateur existe dans WP en utilisant wp_authenticate('user_login', 'user_pass') . Cela renvoie un objet WP_User en cas de succès ou un objet WP_Error en cas d'échec.

  5. Si WP_Error/is_wp_error() , utilisez ensuite wp_update_user() pour créer un utilisateur (ou mettre à jour un utilisateur avec un mot de passe modifié).

  6. Connexion par wp_set_current_user() , wp_set_auth_cookie() et do_action('wp_login, id)

(Tout cela est contenu dans une fonction attachée à l'action 'init' )

Cela semble fonctionner - des utilisateurs de site valides inconnus de WP sont automatiquement créés. Les modifications de mot de passe sont prises en compte. Si le cookie du site est défini et que l'utilisateur WP existe, la connexion unique est automatique et relativement transparente.

    
réponse donnée anu 08.03.2011 - 14:35
3

L'ensemble du système d'authentification est enfichable. Je suggère de regarder les plugins existants pour avoir une idée de la façon de remplacer le système. Peut-être en consultant des plugins LDAP ?

    
réponse donnée Dougal Campbell 04.03.2011 - 18:48
1

Plusieurs fonctions liées à l'utilisateur sont définies conditionnellement sur !function_exists() dans wp-includes/pluggable.php et sont faciles à remplacer par vos propres versions.

    
réponse donnée Rarst 08.02.2011 - 19:51

Lire d'autres questions sur les étiquettes