速報

X.Orgのクライアントライブラリーで17件を修正!Linux端末と画像処理の利用範囲を点検

CATEGORY

【PHP】LINE WORKS API 2.0のJWT認証を使用したAccess Tokenの発行方法

※本ページのリンクにはプロモーションが含まれています。

【PHP】LINE WORKS API 2.0のJWT認証を使用したAccess Tokenの発行方法

目次

本記事では、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年以上にわたりWeb制作・開発に携わり、これまでに100以上のWordPressサイトの構築・保守を担当してきました。Webサイト制作に加え、アプリ開発やAIを活用した開発にも取り組み、近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
WordPress / PHP / JavaScript / アプリ開発 / Webサイトの運用・セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

スポンサーリンク

関連する記事

おすすめの書籍