目的
- php-jwt で使用できる鍵ペアの作成
- php-jwt で公開鍵認証
環境
- php 7.3
- composer
- firebase/php-jwt
秘密鍵の作成、公開鍵の作成
$ openssl genrsa -out id_rsa_jwt.pem 2048
$ openssl rsa -in id_rsa_jwt.pem -pubout > id_rsa_jwt.pub
openssl genrsa の説明(秘密鍵を作成する)
ワード | 意味 |
---|---|
openssl genrsa | RSA秘密鍵を作成 |
-out {file} | 出力ファイルの指定 |
2048 | 暗号鍵の大きさを2048ビットに指定 |
openssl rsa の説明(秘密鍵から公開鍵を作成する)
ワード | 意味 |
---|---|
openssl rsa | RSAキー管理 |
-in {file} | 入力ファイルの指定 |
-pubout | 公開鍵を出力 |
> {file} | リダイレクト |
実際の使用例(暗号化と復号)
事前に composer require firebase/php-jwt
で php-jwt
をインストールしておくこと。
index.php
<?php
require_once('vendor/autoload.php');
use \Firebase\JWT\JWT;
$now = time();
$payload = [
"iss" => "http://example.org",
"aud" => "http://example.com",
"iat" => $now, // issued at
"nbf" => $now, // not before
"exp" => ($now + (60 * 60 * 2)), // expire, 2時間
];
// 事前に作成した秘密鍵・公開鍵を読込
// テストなので同じ階層に鍵を置いているがもっとセキュアな場所に置くべき
$pte_key = file_get_contents('id_rsa_jwt.pem');
$pub_key = file_get_contents('id_rsa_jwt.pub');
// 暗号化
$jwt = JWT::encode($payload, $pte_key, 'RS256');
echo '<h1>encode pass!</h1>';
// 復号化
$decoded = JWT::decode($jwt, $pub_key, ['RS256']);
echo '<h1>decode pass!</h1>';
公開鍵を別のサーバーにコピーすれば、そのサーバーでも使用できるようになる想定。