php-solution / jwt-bundle
Symfony 扩展包,用于JWT操作。
v0.3.3
2019-06-24 10:38 UTC
Requires
- php: >=7.1
- lcobucci/jwt: ^4.0
- symfony/config: >=3.0
- symfony/dependency-injection: >=3.0
- symfony/http-kernel: >=3.0
This package is auto-updated.
Last update: 2024-09-25 06:39:33 UTC
README
此扩展包允许开发者使用 "lcobucci/jwt" 库进行JWT操作。
配置JWT配置
jwt: default_configuration: 'default' configurations: default: # name asymmetric: true signer: class: 'Lcobucci\JWT\Signer\Rsa\Sha512' signing_key: content: 'file://%kernel.project_dir%/etc/jwt/keys/private.pem' pass: 'test' verification_key: content: 'file://%kernel.project_dir%/etc/jwt/keys/public.pub'
如果您想使用签名者、签名密钥、验证密钥作为DI服务,请使用以下示例
jwt: default_configuration: 'default' configurations: default: # name signer: service_id: 'jwt_signer_service_id' signing_key: 'jwt_signing_key_service_id' verification_key: 'jwt_verification_key_service_id'
生成JWT密钥
$ mkdir -p config/jwt $ openssl genrsa -out config/jwt/private.pem -aes256 4096 $ openssl rsa -pubout -in config/jwt/private.pem -out var/jwt/public.pem
在config.yaml中配置JWT类型
您可以在基本的config.yaml中指定JWT类型。如果配置为null,系统将使用默认配置
jwt: types: authorization: #name of type configuration: 'default' exr: 0 issued_at: 0 used_after: 0 claimes: [] headers: [] issuer: '' id: '' audience: '' subject: ''
在控制器中使用
<?php /** * Class UserConfirm */ class UserConfirmController extends Controller { public function sendLinkAction(): Response { /* @var $token \Lcobucci\JWT\Token\Plain */ $token = $this->get('jwt.manager')->create('authorization', ['claim' => 'value']); $jwtStr = $token->__toString(); } public function confirmAction(string $token): Response { /* @var $token \Lcobucci\JWT\Token\Plain */ $token = $this->get('jwt.manager')->parse($token, 'authorization'); $userId = $token->claims()->get('user_id'); } }
将服务指定为JWT类型
<?php namespace App\Services\JwtType; use Lcobucci\Clock\SystemClock; use Lcobucci\JWT\Builder as BuilderInterface; use Lcobucci\JWT\Configuration; use Lcobucci\JWT\Validation\Constraint; use PhpSolution\JwtBundle\Jwt\Type\TypeInterface; /** * Class UserConfirm */ class UserConfirm implements TypeInterface { private const EXP_TIME = 3600; public const NAME = 'user_confirm_registration'; public function getName(): string { return self::NAME; } public function configureBuilder(BuilderInterface $builder): void { $builder->expiresAt(new \DateTimeImmutable('+' . self::EXP_TIME . 'second')); } public function getConstraints(Configuration $config):? iterable { yield new Constraint\SignedWith($config->getSigner(), $config->getVerificationKey()); yield new Constraint\ValidAt(new SystemClock()); } }
在service.yaml中
services: jwt.type.user_confirm_registration: class: 'App\Services\JwtType\UserConfirmReg' tags: [{name: 'jwt.token_type'}]
在控制器中使用
<?php use App\Services\JwtType\UserConfirm; /** * Class UserConfirm */ class UserConfirmController extends Controller { public function sendLinkAction(): Response { /* @var $token \Lcobucci\JWT\Token\Plain */ $token = $this->get('jwt.manager')->create(UserConfirm::NAME, ['user_id' => $userId]); $jwtStr = $token->__toString(); } public function confirmAction(string $token): Response { /* @var $token \Lcobucci\JWT\Token\Plain */ $token = $this->get('jwt.manager')->parse($token, UserConfirm::NAME); $userId = $token->claims()->get('user_id'); } }
完整默认配置
jwt: default_configuration: 'default' configurations: default: asymmetric: true signer: service_id: ~ class: 'Lcobucci\JWT\Signer\Rsa\Sha512' signing_key: service_id: ~ content: ~ pass: ~ verification_key: service_id: ~ content: ~ types: authorization: configuration: 'default' exr: ~ issued_at: ~ used_after: ~ claimes: [] headers: [] issuer: ~ id: ~ audience: ~ subject: ~