web-dev-qa-db-fra.com

Vérifiez si l'utilisateur est connecté à WordPress depuis une autre application depuis WordPress 4.0.

J'essaie d'implémenter dans mon application Node.js un moyen de vérifier si le cookie de l'utilisateur est valide. J'ai trouvé des articles sur Internet qui m'expliquent très bien les choses, mais en essayant de les implémenter, avec le module WordPress-auth pour Node.js, j'ai constaté que cela ne fonctionnait pas.

Après quelques recherches, j'ai trouvé WordPress 4.0 pour une raison quelconque:

  • Maintenant, si le nom du cookie enregistré est toujours haché avec MD5 , le mot de passe haché salé est maintenant sha256 (ou sha1 si impossible) crypté , en considérant cette partie du code dans la fonction WordPress wp_generate_auth_cookie():

    // If ext/hash is not present, compat.php's hash_hmac() does not support sha256.
    $algo = function_exists( 'hash' ) ? 'sha256' : 'sha1';
    $hash = hash_hmac( $algo, $user->user_login . '|' . $expiration . '|' . $token, $key );
    
  • Je ne suis pas sûr, mais comme je l'ai trouvé dans le code, depuis WordPress 4.0, le sel connecté n'est plus utilisé, mais l'utilisation du jeton est définie dans WP_Session_Tokens, comme ci-dessous:

    $manager = WP_Session_Tokens::get_instance( $user_id );
    $token   = $manager->create( $expiration );
    

Donc, je veux savoir: Y at-il un moyen de wordpress 4.0 pour vérifier le cookie enregistré dans le cookie?

1
Nicolas Frbezar

Ok j'ai trouvé la solution.

En fait, comme je ne l’ai pas remarqué, , il y a toujours le mdp haché , mais pour l’instant, le cookie log_in est structuré comme suit:

% login% |% timeout% | % sessionId% |% passhached%

au lieu de :

% login% |% timeout% |% passhached%

C'est comme ça depuis wordpress 4.0, et avec l'intégration de wp_session_cookie, la méthode auth est la même qu'avant mais il n'y a que 2 changements:

  • l'identifiant de session est introduit dans le cookie et le calcul de la clé
  • le cryptage des cookies log_in est sha256 ou, si cela n’est pas possible, sha1

Donc, il y a un schéma du processus de cryptage

KEY = md5_HMAC(%login%|%caracter 8-12 of the passhached in database%|%timeout%|%sessionId% , LOGGED_IN_KEY.LOGGED_IN_SALT);

RESULT = sha256_HMAC(%login%|%timeout%|%sessionId% , KEY);
// RESULT = sha1_HMAC(%login%|%timeout%|%sessionId% , KEY); only if sha256 is not supported

Et pour le moment, pour approuver une connexion, le laissez-passer de Log_in_Cookie doit être identique à RESULT

1
Nicolas Frbezar