ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
要发布新令牌,您必须创建一个新令牌(使用[配置](%E9%85%8D%E7%BD%AE.md)时更容易),自定义它,并要求它构建令牌: ~~~php use Lcobucci\JWT\Configuration; $config = $container->get(Configuration::class); assert($config instanceof Configuration); $now = new DateTimeImmutable(); $token = $config->builder() // 配置颁发者(iss声明) ->issuedBy('http://example.com') // 配置访问群体(aud声明) ->permittedFor('http://example.org') // 配置id(jti声明) ->identifiedBy('4f1g23a12aa') // 配置令牌发出的时间(iat声明) ->issuedAt($now) // 配置可使用令牌的时间(nbf声明) ->canOnlyBeUsedAfter($now->modify('+1 minute')) // 配置令牌的过期时间(exp声明) ->expiresAt($now->modify('+1 hour')) // 配置名为“username”的新声明 ->withClaim('username', "admin") // 配置名为“foo”的新请求头 ->withHeader('foo', 'bar') // 构建一个新令牌 ->getToken($config->signer(), $config->signingKey()); ~~~ 创建令牌后,您就可以检索其数据并将其转换为字符串表示形式: ~~~php use Lcobucci\JWT\Configuration; $config = $container->get(Configuration::class); assert($config instanceof Configuration); $token = $config->builder() ->issuedBy('http://example.com') ->withClaim('uid', 1) ->withHeader('foo', 'bar') ->getToken($config->signer(), $config->signingKey()); $token->headers(); // /检索 headers $token->claims(); // /检索声明 echo $token->headers()->get('foo'); // will print "bar" echo $token->claims()->get('iss'); // will print "http://example.com" echo $token->claims()->get('uid'); // will print "1" echo $token->toString(); // 字符串表示形式JWT字符串 ~~~ # 实例 ~~~ <?php require 'vendor/autoload.php'; use Lcobucci\JWT\Configuration; use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\Signer\Key\InMemory; $config = Configuration::forSymmetricSigner( //您可以使用任何HMAC变体(256、384和512) new Sha256(), // 用您自己的密钥替换下面的值! InMemory::base64Encoded('mBC5v1sOKVvbdEitdSBenu59nfNfhwkedkJVNabosTw=') // 您还可以通过在此处提供额外参数来覆盖JOSE编码器/解码器 ); assert($config instanceof Configuration); $now = new DateTimeImmutable(); $token = $config->builder() // 配置颁发者(iss声明) ->issuedBy('http://example.com') // 配置访问群体(aud声明) ->permittedFor('http://example.org') // 配置id(jti声明) ->identifiedBy('4f1g23a12aa') // 配置令牌发出的时间(iat声明) ->issuedAt($now) // 配置可使用令牌的时间(nbf声明) ->canOnlyBeUsedAfter($now->modify('+1 minute')) // 配置令牌的过期时间(exp声明) ->expiresAt($now->modify('+1 hour')) // 配置名为“username”的新声明 ->withClaim('username', "admin") // 配置名为“foo”的新请求头 ->withHeader('foo', 'bar') // 构建一个新令牌 ->getToken($config->signer(), $config->signingKey()); var_dump($token->toString()); // string(319) "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImZvbyI6ImJhciJ9.eyJpc3MiOiJodHRwOi8vZXhhbXBsZS5jb20iLCJhdWQiOiJodHRwOi8vZXhhbXBsZS5vcmciLCJqdGkiOiI0ZjFnMjNhMTJhYSIsImlhdCI6MTYyODczNTUxOC4wMjczODYsIm5iZiI6MTYyODczNTU3OC4wMjczODYsImV4cCI6MTYyODczOTExOC4wMjczODYsInVzZXJuYW1lIjoiYWRtaW4ifQ.JiRuboBISaDDEW7d3TPpeZ-pjeJTJM3AcScfrcFX\_do" ~~~