—— JSON Web Tokens 官网

JWT 是一种用于双方之间传递安全信息的简洁的、URL 安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 Json 对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT 可以使用 HMAC 算法或者是 RSA 的公私秘钥对进行签名。

开源类库

文档

示例代码

基于PHP开源类库 lcobucci/jwt 的实现

<?php

use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\ValidationData;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Upfor\UpforPHP\Library\Math;

/**
 * JWT(JSON Web Tokens)
 */
class JwtHelper {

    /**
     * iss claim
     */
    const ISS = 'ISS-CLAIM-NAME';

    /**
     * exp claim
     */
    const EXP = 7200;

    /**
     * Build token
     *
     * @param  string  $secret
     * @param  string  $subject
     * @param  array   $contents
     * @param  integer $expire
     * @return \Lcobucci\JWT\Token
     */
    public static function buildToken($secret, $subject, array $contents = array(), $expire = null) {
        $builder = new Builder();

        // Configures the issuer (iss claim)
        $builder->setIssuer(self::ISS);

        // Configures the time that the token was issue (iat claim)
        $builder->setIssuedAt(time());

        // Configures the expiration time of the token (exp claim)
        if (!Math::isInt($expire) || $expire <= 0) {
            $expire = self::EXP;
        }
        $builder->setExpiration(time() + $expire);

        $builder->setSubject($subject);

        foreach ($contents as $key => $value) {
            $builder->set($key, $value);
        }

        // creates a signature using $secret as key
        $builder->sign(new Sha256(), $secret);

        return $builder->getToken();
    }

    public static function validateToken($token) {
        $data = new ValidationData();
        $data->setIssuer(self::ISS);
        $data->setCurrentTime(time());

        $token = (new Parser())->parse((string) $token);
        if (!$token->validate($data)) {
            return false;
        }

        return $token->getClaims();
    }

}