ホームページ >バックエンド開発 >PHPチュートリアル >PHPでJWTを利用してトークンを作成する例を詳しく解説

PHPでJWTを利用してトークンを作成する例を詳しく解説

coldplay.xixi
coldplay.xixi転載
2020-06-09 10:12:045533ブラウズ


PHPでJWTを利用してトークンを作成する例を詳しく解説

#PHP は JWT を使用してトークンの簡単な例を作成します

依存関係

環境: php 5.5 以降 OpenSSL 拡張機能

lcobucci/JWT

composer を使用してインストール可能

composer require lcobucci/jwt

GitHub のダウンロードに直接アクセスすることもできます。

#GitHub アドレス: https://github.com/lcobucci/jwt

#パラメータの説明

要求エンティティは、リクエストを開始したユーザー、または jwt の発行者が、電子メール送信時の件名と同様の件名を設定しますjwt を受け取る側期限切れ期間現在時刻が nbf 設定時刻より前であるため、トークンは使用できません作成時間 現在のトークンの一意の識別子を設定します主要な依存関係参照は以下に記録されています:
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';


iss (発行者)issuer
sub (件名)
aud (audence)
exp (expire)token
nbf (not before)
iat (発行済み) at)token
jti (JWT ID)
##インスタンス前の準備
もちろん、そこには自分で追加する必要がある参照がさらにあります。デバッグ時にエラー プロンプトに従ってそれらを 1 つずつ入力します。ここには多くはありません。

[lcobucci/JWT] を使用してトークンを生成するには 2 つの方法があります。ここでは 2 番目の方法のみをテストしました。

1 つ目: 秘密鍵の署名を使用してトークンを生成する

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();

トークンの検証

use Lcobucci\JWT\Signer\Hmac\Sha256;
$parse = (new Parser())->parse($token);
$signer = new Sha256();
$parse->verify($signer,'签名key');// 验证成功返回true 失败false

2 つ目: 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 に保存することもできます。

Verification 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 ビデオ チュートリアル

以上がPHPでJWTを利用してトークンを作成する例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はliqingbo.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。