LoginSignup
2
1

More than 3 years have passed since last update.

LINE WORKSのJWT認証をPHPで通してみる

Posted at

ちょっと仕事でLINE WORKSの認証を通す必要があったのですが、
composerでjwtライブラリを入れて認証するものが多かったのでピュアPHPで入れるとこうなるって
ものを書いてみた

<?php
/**
 * @property strign rsa_key プライベートキー(実際はセキュアな場所におかないとだめ)
 */
$rsa_key = "-----BEGIN PRIVATE KEY-----
[ここは発行されたプライベートキーを入れる]
-----END PRIVATE KEY-----";

/**
 * @property strign server_id サーバーID
 */
$server_id = "[ここも発行されているサーバーIDを入れる]";

//Header作成
$header = '{"alg":"RS256","typ":"JWT"}';
$header = base64_encode($header);
//URLSafeな形で置換
$header = str_replace(array('+', '/', '='), array('-', '_', ''), $header);

//body作成 issはサーバーID
$body = '{"iss":"%s","iat":%s,"exp":%s}';
//生成は現在時刻、満了は30分後に設定
$body = sprintf($body, $server_id, time(), time() + 1800);
$body = base64_encode($body);
$body = str_replace(array('+', '/', '='), array('-', '_', ''), $body);

//headerとbodyをつなげたもの
$sha_hash = $header . "." . $body;

//電子認証を行うアルゴリズムはSHA256にしないといけない
openssl_sign($sha_hash, $encrypted, $rsa_key, OPENSSL_ALGO_SHA256);
$signature = base64_encode($encrypted);
$signature = str_replace(array('+', '/', '='), array('-', '_', ''), $signature);

//JWT生成
echo $header . "." . $body . "." . $signature;

このJWTを使ってPOSTmanで認証通してみると
Postman_と_Qiita.png

こんな感じで200OKが帰ってきて成功する
本来はライブラリでやるんでしょうけど、それが諸々の理由でできない人はこんな感じで認証できるよという話でした

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1