jwt
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息
JWT就是一个字符串,经过加密处理与校验处理的字符串,由三个部分组成( header.payload.signature),是基于token的身份验证可以替代传统的cookie+session身份验证方法;
header部分组成(计算规则)
{
"typ":"JWT",
"alg":"HS256"
}
payload 部分组成(计算的相关数据)
$token = [
#非必须。issuer 请求实体,可以是发起请求的用户的信息,也可是jwt的签发者。
"iss" => "http://example.org",
#非必须。issued at。 token创建时间,unix时间戳格式
"iat" => $_SERVER['REQUEST_TIME'],
#非必须。expire 指定token的生命周期。unix时间戳格式
"exp" => $_SERVER['REQUEST_TIME'] + 7200,
#非必须。接收该JWT的一方。
"aud" => "http://example.com",
#非必须。该JWT所面向的用户
"sub" => "jrocket@example.com",
# 非必须。not before。如果当前时间在nbf里的时间之前,则Token不被接受;一般都会留一些余地,比如几分钟。
"nbf" => 1357000000,
# 非必须。JWT ID。针对当前token的唯一标识
"jti" => '222we',
# 自定义字段
"GivenName" => "Jonny",
# 自定义字段
"name" => "Rocket",
# 自定义字段
"Email" => "jrocket@example.com",
];
signature组成部分(签名)
//双方自定义用于加解密
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
例子
$id = $row[0]->id;
$array = array(
'id' => $id, //该JWT的签发者,用于后面的解密操作
'iat' => time(), //创建时间
'exp' => time() + 60, //什么时候过期
);
$key = 'v2ILfnbsxgULEWBdAACa';
$data = JWT::encode($array, $key);
解码: $decoded = JWT::decode($data, $key, array('HS256'));
哈希
password_hash加密
password_verify解密
例子:
$psword = password_hash($password, PASSWORD_DEFAULT);
$a = password_verify($password, $psword);
网友评论