LINE WORKS의 JWT 인증을 PHP로 통과해 본다

5341 단어 PHPLINEWORKSJWT
조금 일로 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으로 인증을 통과하면


이런 식으로 200OK가 돌아와서 성공한다
본래는 도서관에서 할 것입니다만, 그것이 여러가지 이유로 할 수 없는 사람은 이런 느낌으로 인증할 수 있다는 이야기였습니다

좋은 웹페이지 즐겨찾기