HEX
Server: Apache/2.4.59 (Debian)
System: Linux keymana 4.19.0-21-cloud-amd64 #1 SMP Debian 4.19.249-2 (2022-06-30) x86_64
User: lijunjie (1003)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/doco2/wp-content/themes/ormedia/JwtAuthClass.php
<?php


class JwtAuthClass {

    //header
    private static $header=array(
        'alg'=>'HS256',
        'typ'=>'JWT'
    );

    //private key
    private static $key='keylabjwt';


    /**
     * get jwt token
     * @param array $payload
     * [
     *  'iss'=>'jwt_admin',
     *  'iat'=>time(),
     *  'exp'=>time()+30,
     *  'nbf'=>time()+3600,
     *  'sub'=>'http://keylab.cc/admin/',
     *  'jti'=>md5(uniqid('JWT').time())
     * ]
     * @return bool|string
     */
    public static function getToken($payload)
    {
        if(is_array($payload))
        {
            $base64header=self::base64UrlEncode(json_encode(self::$header,JSON_UNESCAPED_UNICODE));
            $base64payload=self::base64UrlEncode(json_encode($payload,JSON_UNESCAPED_UNICODE));
            $token=$base64header.'.'.$base64payload.'.'.self::signature($base64header.'.'.$base64payload,self::$key,self::$header['alg']);
            return $token;
        }else{
            return false;
        }
    }


    /**
     * 验证token是否有效,默认验证exp,nbf,iat时间
     * @param string $Token 
     * 需要验证的token
     * @return bool|int
     * 1:未過期,0:可刷新,-1:已過期, -2: error token
     */
    public static function verifyToken($Token)
    {
        $tokens = explode('.', $Token);
        if (count($tokens) != 3)
            return -2;

        list($base64header, $base64payload, $sign) = $tokens;

        $base64decodeheader = json_decode(self::base64UrlDecode($base64header), JSON_OBJECT_AS_ARRAY);
        if (empty($base64decodeheader['alg']))
            return -1;

        if (self::signature($base64header . '.' . $base64payload, self::$key, $base64decodeheader['alg']) !== $sign)
            return -1;

        $payload = json_decode(self::base64UrlDecode($base64payload), JSON_OBJECT_AS_ARRAY);

        if (isset($payload['iat']) && $payload['iat'] > time())
            return -1;

        if (isset($payload['exp']) && $payload['exp'] < time() && isset($payload['nbf']) && $payload['nbf'] > time())
            return 0;

        if (isset($payload['nbf']) && $payload['nbf'] < time())
            return -1;

        return 1;
    }

    /**
     * 獲取token exp過期时间
     * @param string $Token 
     * 需要獲取的token
     * @return string|int
     * $payload['exp']:時間戳子串, -2: error token
     */
    public static function getTokenExp($Token){
        $tokens = explode('.', $Token);
        if (count($tokens) != 3)
            return -2;
    
        $base64payload = $tokens[1];

        $payload = json_decode(self::base64UrlDecode($base64payload), JSON_OBJECT_AS_ARRAY);
        
        return $payload['exp'];
    }


    /**
     * base64UrlEncode
     * @param string $input
     * @return string
     */
    private static function base64UrlEncode($input)
    {
        return str_replace('=', '', strtr(base64_encode($input), '+/', '-_'));
    }

    /**
     * base64UrlEncode
     * @param string $input
     * @return bool|string
     */
    private static function base64UrlDecode($input)
    {
        $remainder = strlen($input) % 4;
        if ($remainder) {
            $addlen = 4 - $remainder;
            $input .= str_repeat('=', $addlen);
        }
        return base64_decode(strtr($input, '-_', '+/'));
    }

    /**
     * HMACSHA256
     * @param string $input 为base64UrlEncode(header).".".base64UrlEncode(payload)
     * @param string $key
     * @param string $alg   
     * @return mixed
     */
    private static function signature($input, $key, $alg = 'HS256')
    {
        $alg_config=array(
            'HS256'=>'sha256'
        );
        return self::base64UrlEncode(hash_hmac($alg_config[$alg], $input, $key,true));
    }
}