Chinaunix首页 | 论坛 | 博客
  • 博客访问: 578769
  • 博文数量: 79
  • 博客积分: 2513
  • 博客等级: 少校
  • 技术积分: 806
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-04 18:46
文章分类

全部博文(79)

文章存档

2014年(1)

2010年(5)

2009年(8)

2008年(11)

2007年(41)

2006年(13)

我的朋友

分类:

2009-05-31 19:58:37

一同学想从 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) |
给主人留下些什么吧!~~