こんにちは、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つのパッケージをインストールします。それぞれのバージョン情報は下記の通りです。

PHP8.2.4
PHP-JWT6.8.1
Guzzle7.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

パラメータタイプ説明
assertionStringJWT値
grant_typeStringurn:ietf:params:oauth:grant-type:jwt-bearer
client_idStringClient ID
client_secretStringClient Secret
scopeStringScope(権限範囲)
参考: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_tokenStringAccess Token
refresh_tokenStringRefresh Token
token_typeString"Bearer"
expires_inStringTokenの有効期限(24時間)
scopeStringScope(権限範囲)
参考:Scopeリスト

上記で取得したAccess TokenをLINE WORKSのAPIで使用します。

$result->access_token;

参考:https://developers.worksmobile.com/jp/docs/auth-jwt

最後に

本記事では、PHPにてLINE WORKS API 2.0のJWT認証からAccess Tokenを発行するまでの流れを解説しました。Access Tokenが発行し、Scope(権限範囲)を設定することで、適切にLINE WORKSのAPIを使用することができます。LINE WORKSは魅力的なAPIを数多く公開していますので、LINE WORKSと外部サイト等を連携して使用したい場合は、ぜひ試してみてくださいね。

参考:https://developers.worksmobile.com/jp/docs

以上、PHPでLINE WORKS API 2.0のJWT認証を使用したAccess Tokenの発行方法のご紹介でした!

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。