>백엔드 개발 >PHP 튜토리얼 >JWT를 사용하여 PHP에서 토큰을 생성하는 예제에 대한 자세한 설명

JWT를 사용하여 PHP에서 토큰을 생성하는 예제에 대한 자세한 설명

coldplay.xixi
coldplay.xixi앞으로
2020-06-09 10:12:045516검색


JWT를 사용하여 PHP에서 토큰을 생성하는 예제에 대한 자세한 설명

PHP

Dependency

로 토큰을 생성하기 위해 JWT를 사용하는 간단한 예: php 5.5 이상 + OpenSSL 확장

lcobucci/JWT

설치 가능 Composer

composer 사용하기 lcobucci/jwt

필요

GitHub 주소: https://github.com/lcobucci/jwt

매개변수 설명

iss ( issuer)issuer sub(제목)aud (청중)exp (만료)tokennbf (이전 아님)iat(발행 위치)tokenjti(JWT ID)인스턴스 이전 준비


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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 liqingbo.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제