JWT(Json Web Token),其实就是一种token设计规范,由头部(Header)、载荷(Payload)、签名(Signatrue)组成。
一:Header
通常由两部分组成:令牌的类型(即JWT)和正在使用的签名算法(如HMAC SHA256)
$header = {
"alg": "HS256",
"typ": "JWT"
}
使用base64_encode编码json,得到的则是JWT的header部分。
二:Payload
$payload = {
"sub": "test", //主题
"iss": "test", //签发人
"iat": 1461888119, //签发时间
"exp": 1464516119, //过期时间
"nbf": 1461888119, //生效时间,在此之前是无效的
"jti": "test", //编号
"aud": "test" //受众
}
此json中的参数并不都是必须的,使用base64_encode编码json,得到的则是JWT的payload部分。
三:Signatrue
$data = base64_encode($header).'.'.base64_encode($payload);
$sign = base64_encode(hash_hmac('sha256', $data,' secret'));
此处获得的$sign则是JWT的签名部分。
将以上三部分用“点”作为分割符拼接起来urlencode,就是我们需要的token了。
$token = urlencode($data.'.'.$sign);