Jwt.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Vendor;
  3. /**
  4. * PHP实现jwt
  5. */
  6. class Jwt {
  7. /**
  8. * 验证token是否有效,默认验证exp,nbf,iat时间
  9. * @param string $Token 需要验证的token
  10. * @return bool|string
  11. */
  12. public static function verifyToken(string $Token)
  13. {
  14. $tokens = explode('.', $Token);
  15. if (count($tokens) != 3)
  16. return false;
  17. list($base64header, $base64payload, $sign) = $tokens;
  18. //获取jwt算法
  19. $base64decodeheader = json_decode(self::base64UrlDecode($base64header), JSON_OBJECT_AS_ARRAY);
  20. if (empty($base64decodeheader['alg']))
  21. return false;
  22. //签名验证
  23. if (self::signature($base64header . '.' . $base64payload, self::$key, $base64decodeheader['alg']) !== $sign)
  24. return false;
  25. $payload = json_decode(self::base64UrlDecode($base64payload), JSON_OBJECT_AS_ARRAY);
  26. //签发时间大于当前服务器时间验证失败
  27. if (isset($payload['iat']) && $payload['iat'] > time())
  28. return false;
  29. //过期时间小宇当前服务器时间验证失败
  30. if (isset($payload['exp']) && $payload['exp'] < time())
  31. return false;
  32. //该nbf时间之前不接收处理该Token
  33. /*if (isset($payload['nbf']) && $payload['nbf'] > time())
  34. return false;*/
  35. return $payload;
  36. }
  37. }