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?
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:
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