【PHP】LINE WORKS API 2.0のJWT認証を使用したAccess Tokenの発行方法
※本ページのリンクにはプロモーションが含まれています。
こんにちは、Ryohei(@ityryohei)です!
本記事では、PHPでLINE WORKS API 2.0のJWT認証を使用したAccess Tokenの発行方法をご紹介しています。
PHPでLINE WORKS API 2.0でAccess Tokenを発行するにはどうすればいいんだろう?
上記の疑問にお答えします。
では、解説していきます。筆者検証環境とバージョン情報
本記事では、PHPでLINE WORKS API 2.0のJWT認証を行いAccess Tokenを発行します。JWT認証とHTTPリクエストを行うために2つのパッケージをインストールします。それぞれのバージョン情報は下記の通りです。
| PHP | 8.2.4 |
| PHP-JWT | 6.8.1 |
| Guzzle | 7.8 |
各パッケージは対象プロジェクトにてcomposerでインストールしておきます。
PHP-JWT
$ composer require firebase/php-jwt
Guzzle
$ composer require guzzlehttp/guzzle
JWT認証を行いアクセストークンを発行する
LINE WORKS API 2.0でJWT認証を行いAccess tokenを発行します。Access Tokenを発行するには、下記リクエストURLに指定された値をPOST送信します。
Request URL
https://auth.worksmobile.com/oauth2/v2.0/token
Request Body
| パラメータ | タイプ | 説明 |
|---|---|---|
| assertion | String | JWT値 |
| grant_type | String | urn:ietf:params:oauth:grant-type:jwt-bearer |
| client_id | String | Client ID |
| client_secret | String | Client Secret |
| scope | String | Scope(権限範囲) 参考:Scopeリスト |
下記はPHPでAccess Tokenを取得するサンプルです。必要なパラメータについてはLINE WORKSの管理者画面(Admin)とDeveloper Consoleから取得してください。
(取得方法については後日投稿にまとめる予定です。)
PHP
<?php
require_once "vendor/autoload.php";
use Firebase\JWT\JWT;
use GuzzleHttp\Client;
$result = "";
$auth_url = "https://auth.worksmobile.com/oauth2/v2.0/token";
$client_id = "CLIENT_ID";
$client_secret = "CLIENT_SECRET";
$service_account_id = "example@example";
$private_key = file_get_contents("private_2023xxxxxxxxxx.key");
$jwt_params = [
"iss" => $client_id,
"sub" => $service_account_id,
"iat" => time(),
"exp" => time() + 3600
];
$token = JWT::encode($jwt_params , $private_key, "RS256");
$headers = [
"Content-Type" => "application/x-www-form-urlencoded"
];
$params = [
"assertion" => $token,
"grant_type" => "urn:ietf:params:oauth:grant-type:jwt-bearer",
"client_id" => $client_id,
"client_secret" => $client_secret,
"scope" => "bot",
];
try {
$client = new \GuzzleHttp\Client;
$response = $client->post($auth_url, [$headers, "form_params" => $params]);
$status_code = $response->getStatusCode();
if($status_code == 200) {
$result = json_decode($response->getBody());
}
} catch (Exception $e) {
$result = $e;
}
リクエストが成功すると下記のような値が取得できます。
object(stdClass)#33 (5) {
["access_token"]=>
string(418) "jp1AAABEqfga5faFusPJZpw5CEz8EY......"
["refresh_token"]=>
string(226) "jp1AAAAg79O5ya1W+1dZD/dxoYX8hk......"
["scope"]=>
string(3) "bot"
["token_type"]=>
string(6) "Bearer"
["expires_in"]=>
string(5) "86400"
}
内容は下記の通りです。
Response Body
| パラメータ | タイプ | 説明 |
|---|---|---|
| access_token | String | Access Token |
| refresh_token | String | Refresh Token |
| token_type | String | "Bearer" |
| expires_in | String | Tokenの有効期限(24時間) |
| scope | String | Scope(権限範囲) 参考:Scopeリスト |
上記で取得したAccess TokenをLINE WORKSのAPIで使用します。
$result->access_token;
最後に
本記事では、PHPにてLINE WORKS API 2.0のJWT認証からAccess Tokenを発行するまでの流れを解説しました。Access Tokenが発行し、Scope(権限範囲)を設定することで、適切にLINE WORKSのAPIを使用することができます。LINE WORKSは魅力的なAPIを数多く公開していますので、LINE WORKSと外部サイト等を連携して使用したい場合は、ぜひ試してみてくださいね。
以上、PHPでLINE WORKS API 2.0のJWT認証を使用したAccess Tokenの発行方法のご紹介でした!