JWT描述
- JWT 全程(json web token)
- JWT 就是一个字符串,经过加密处理与校对处理的字符串
- JWT 由header(头部),payload(主体),signature(签名)三部分组成
- JWT 组成形式 base64UrlHeader.base64UrlPayload.base64Url(hash(base64UrlHeader.base64UrlPayload))
- 生成样式:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
header组成
{
"typ":"JWT",
"alg":"HS256"
}
payload组成(内容自定义)
{
'alg' => 'sha256',
'iat' => $dataTime,
'exp' => $dataTime + 6,
'username' =>'admin',
}
signature组成
base64Url(hash(base64UrlHeader.base64UrlPayload))
JWT流程
- 初次登录:用户初次登录,输入用户名密码
- 密码验证:服务器从数据库取出用户名和密码进行验证
- 生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT
- 还JWT:服务器的HTTP RESPONSE中将JWT返还
- 带JWT的请求:以后客户端发起请求,HTTP REQUEST HEADER中的Authorizatio字段都要有值,为JWT
JWT代码实现:获取token,验证token
class JwtByPhp
{
private static $secret = '!@#$%^&';
private static $header = [
'alg' => 'sha256',
'typ' => 'JWT'
];
public static function getToken(array $payload)
{
if(is_array($payload)){
$jsonHeader = json_encode(self::$header,JSON_UNESCAPED_UNICODE);
$jsonPayload = json_encode($payload,JSON_UNESCAPED_UNICODE);
$base64UrlHeader