一同学想从 WordPress MU 系统登录,然后直接跳转到第二个站点(子站),以此实现单点登录的效果。因为第二站是子站,所以可以直接看到 WordPress 系统的 Cookie。只要能在子站里识别保存用户登录信息的 Cookie,那就可以支持单点登录。
WordPress MU(2.6、2.7.1) 的登录信息保存在一个 wordpress_logged_in_ 的 Cookie 中。此字段由三段值构成,分别是用户名、有效期和 HMAC(HMAC 是签名)。这里用户名是固定的;但是有效期是 UNIX 时间,其值满足两天时间,是变化的;HMAC 则是由前两者生成的签名,用作校验。
搜索 wordpress_logged_in_ 可以发现 LOGGED_IN_COOKIE,继而可以发现 wp_validate_auth_cookie() 就是验证的函数。此函数会分解 cookie,然后以用户名与有效期生成 verify hmac,再与 cookie hmac 比较。
生成 verify hmac 的过程,其实比较简单。首先是利用 LOGGED_IN_KEY 与 LOGGED_IN_SALT 联合生成一个密串,此密串再与用户名、有效期一起生成第一次的 key hmac,再用 key hmac 与用户名、有效期生成 verify hmac。
示意如下:
$username;
$expiration;
$hmac;
$data = $username . '|' . $expiration;
$salt = apply_filters('salt', LOGGED_IN_KEY . LOGGED_IN_SALT); // 默认其实就是 LOGGED_IN_KEY . LOGGED_IN_SALT
$key = hash_hmac('md5', $data, $salt);
$hash = hash_hmac('md5', $data, $key);
return $hash == $hmac;
|
阅读(3285) | 评论(0) | 转发(0) |