jwt 实例

    function urlsafeB64Encode($data) {
        return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
    }
    function urlsafeB64Decode($data) {
        return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
    }

    public static function signature(string $input, string $key, string $alg)
    {
        return hash_hmac($alg, $input, $key);
    }

    public static function encode(array $payload, string $key, string $alg = 'SHA256'){
        $key = md5($key);
        $jwt = self::urlsafeB64Encode(json_encode(['type' => 'JWT', 'alg' => $alg])) . '.' . self::urlsafeB64Encode(json_encode($payload));
        return $jwt . '.' . self::signature($jwt, $key, $alg);
    }
    public static function decode(string $jwt, string $key) {
        $tokens = explode('.', $jwt);
        $key    = md5($key);
        if (count($tokens) != 3)
            return false;
        list($header64, $payload64, $sign) = $tokens;
        $header = json_decode(self::urlsafeB64Decode($header64), JSON_OBJECT_AS_ARRAY); 
        if (empty($header['alg']))
            return false; 
        if (self::signature($header64 . '.' . $payload64, $key, $header['alg']) !== $sign) 
            return false; 
        $payload = json_decode(self::urlsafeB64Decode($payload64),JSON_OBJECT_AS_ARRAY); 
        $time = $_SERVER['REQUEST_TIME']; 
        if (isset($payload['iat']) && $payload['iat'] > $time)
            return false; 
        if (isset($payload['exp']) && $payload['exp'] < $time)
            return false; 
        return $payload; 
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值