PHP
Dependency
로 토큰을 생성하기 위해 JWT를 사용하는 간단한 예: php 5.5 이상 + OpenSSL 확장
lcobucci/JWT
설치 가능 Composer
composer 사용하기 lcobucci/jwt
필요GitHub 주소: https://github.com/lcobucci/jwt
매개변수 설명
Request 엔터티는 요청을 시작한 사용자 또는 jwt | |
이메일을 보낼 때 제목과 유사하게 제목을 설정하세요 | |
jwt One party 받기 | |
만료 기간 | |
현재 시간은 nbf 설정 시간 이전이므로 토큰을 사용할 수 없습니다. Used | |
Creation time | |
현재 토큰의 고유 식별자 설정 |
주요 종속성 참조는 다음과 같습니다. 아래에 기록되어 있습니다:
define('DS', DIRECTORY_SEPARATOR); define('JWTPath', dirname(__FILE__) . DS); include_once JWTPath . 'Builder.php'; include_once JWTPath . 'Signer.php'; include_once JWTPath . 'Signer' . DS . 'Keychain.php'; include_once JWTPath . 'Signer' . DS . 'Rsa.php'; include_once JWTPath . 'Signer' . DS . 'Rsa' . DS . 'Sha256.php';
물론 더 많은 참조가 필요합니다. 직접 추가할 수도 있습니다. 디버깅할 때 나타나는 오류 메시지에 따라 하나씩 추가하면 됩니다.
Example[lcobucci/JWT]를 사용하여 토큰을 생성하는 방법은 두 가지가 있는데 여기서는 두 번째 방법만 테스트했습니다.
첫 번째 유형: 비밀 키 서명을 사용하여 토큰 생성
use Lcobucci\JWT\Builder; use Lcobucci\JWT\Signer\Hmac\Sha256; $builder = new Builder(); $signer = new Sha256(); // 设置发行人 $builder->setIssuer('http://example.com'); // 设置接收人 $builder->setAudience('http://example.org'); // 设置id $builder->setId('4f1g23a12aa', true); // 设置生成token的时间 $builder->setIssuedAt(time()); // 设置在60秒内该token无法使用 $builder->setNotBefore(time() + 60); // 设置过期时间 $builder->setExpiration(time() + 3600); // 给token设置一个id $builder->set('uid', 1); // 对上面的信息使用sha256算法签名 $builder->sign($signer, '签名key'); // 获取生成的token $token = $builder->getToken();
Verify Token
use Lcobucci\JWT\Signer\Hmac\Sha256; $parse = (new Parser())->parse($token); $signer = new Sha256(); $parse->verify($signer,'签名key');// 验证成功返回true 失败false두 번째 유형: RSA 및 ECDSA 서명 사용
RSA 및 ECDSA 서명은 공개 키와 개인 키를 기반으로 합니다. 따라서
use Lcobucci\JWT\Signer\Keychain; // 注意这里使用的sha256 use Lcobucci\JWT\Signer\Rsa\Sha256; $signer = new Sha256(); $keychain = new Keychain(); $builder = new Builder(); $builder->setIssuer('http://example.com'); $builder->setAudience('http://example.org'); $builder->setId('4f1g23a12aa', true); $builder->setIssuedAt(time()); $builder->setNotBefore(time() + 60); $builder->setExpiration(time() + 3600); $builder->set('uid', 1); // 与上面不同的是这里使用的是你的私钥,并提供私钥的地址 $builder->sign($signer, $keychain->getPrivateKey('file://{私钥地址}')); $toekn = $builder->getToken();
를 사용하여 생성하고 검증하려면 개인 키를 사용해야 합니다. 마지막으로 강제 변환을 통해 원하는 순수 문자열 토큰을 얻을 수도 있습니다
$toekn = (string) $builder->getToken();
프런트 엔드와의 상호 작용은 반환된 JSON 형식의 매개 변수를 통해 수행되거나 Authorization 헤더에 저장될 수 있습니다.
Verify Token
$signer = new \Lcobucci\JWT\Signer\Rsa\Sha256(); $keychain = new \Lcobucci\JWT\Signer\Keychain(); $parse = new \Lcobucci\JWT\Parser(); $parse->parse((string)$token); var_dump($token->verify($signer, $keychain->getPublicKey(self::$dir . '/public.key'))); ))
Get data
데이터 부분은 복호화 없이 바로 얻을 수 있기 때문이죠. 따라서 토큰이 합법적인지 확인한 후 바로 읽을 수 있습니다. 이는 민감한 정보를 이동통신사에 저장해서는 안 되는 이유이기도 합니다.
$parse = (new Parser())->parse($token); // 获取全部信息,返回一个数组, var_dump($parse->getClaims()); // 获取单条信息 var_dump($parse->getClaim('aud'));
추천 튜토리얼: "
PHP 비디오 튜토리얼위 내용은 JWT를 사용하여 PHP에서 토큰을 생성하는 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!