実現したいこと
JWT認証送信時の署名エラーを解決したいです。
発生している問題・分からないこと
PHPで開発中です。
JWT送信時の
<ヘッダを Base64 URL Encode>.<ペイロードを Base64 URL Encode>.<署名を Base64 URL Encode>
このトークンの記述方法は理解しております。
署名の方法として、以下の説明があります。
ーーーーーーーーーーーーーーーーーー
<ヘッダを Base64 URL Encode>.<ペイロードを Base64 URL Encode>」をバイト配列に変換後(エンコードは UTF-8)、HS256 のアルゴリズム、JWT の署名用の鍵で署名した結果(バイト配列)を Base64 URL Encode する。
ーーーーーーーーーーーーーーーーーー
別途JWTの署名用の鍵(Base64エンコード)があります。
この場合の
1.「<ヘッダを Base64 URL Encode>.<ペイロードを Base64 URL Encode>」をバイト配列に変換」
2.上記のバイト配列に署名
という箇所のプログラムの書き方が不明です。
ご教授よろしくお願いいたします。
該当のソースコード
PHP
1function generateJwtHS256($payload, $jwt_key){ 2 3 //$jwt_keyは提供されたJWTの署名用の鍵(Base64エンコード) 4 $dec_jwt_key = base64_decode($jwt_key);//署名用の鍵をデコードした場合のテスト用 5 6 $header = [ 7 'alg' => 'HS256', 8 'typ' => 'JWT' 9 ]; 10 11 $header = encodeBase64Url(json_encode($header)); 12 $payload = encodeBase64Url(json_encode($payload)); 13 $data = $header.".".$payload; 14 15 $signature = hash_hmac('sha256',$data,$jwt_key,true); 16 //$signature = hash_hmac('sha256',$data,$dec_jwt_key,true);//署名用の鍵をデコードした場合のテスト 17 18 $signature = encodeBase64Url($signature); 19 20 return "{$header}.{$payload}.{$signature}"; 21}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
https://jwt.io/ でのチェックでは署名鍵を指定してクリアしております。
しかしながら該当のAPIへの送信の場合は署名エラーとなっています。
補足
特になし

あなたの回答
tips
プレビュー