🔒

LINE BotでNode.jsを使うときに署名検証する

に公開

LINE Botを作成するときは、LINEサーバーから送信されたことを確認するため署名検証が推奨されています。
この記事ではNode.js環境でSDKを用いて署名検証する方法を解説します。

https://developers.line.biz/ja/docs/messaging-api/verify-webhook-signature/

SDKインストール

Node.jsでLINE Botを作成する際はSDK(LINE Messaging API SDK for nodejs)を利用すると便利です。次の方法でインストールできます。

yarn add @line/bot-sdk

署名検証

expressでBotサーバーを起動する最低限のコードは次のとおりです。

index.ts
import express, { Request, Response } from "express";
import { middleware } from "@line/bot-sdk";
import dotenv from "dotenv";
dotenv.config();

const app = express();

// (1) LINE APIシークレット
const config = {
  channelSecret: process.env.LINE_API_SECRET || "",
};

// (2) Webhook
app.post("/webhook", middleware(config), (req: Request, res: Response) => {
  res.status(200).send("Hello, World!");
});

const port = process.env.PORT || 3000;
app
  .listen(port, () => {
    console.log("Server is running on port", port);
  })
  .on("error", (err: Error) => {
    throw new Error(`Server failed to start: ${err.message}`);
  });

(1) LINE APIシークレット

署名検証するためには「チャネルシークレット」が必要です。
LINE Consoleで取得しておきます。

.env
LINE_API_SECRET=your_api_secret

(2) Webhook

WebhookリクエストがLINEサーバーから送信されたことを確認するため、署名検証を行います。
SDKのmiddleware()を用いると簡単に検証できます。

app.post("/webhook", middleware(config), // ....
    // 署名検証成功
});

テスト

正しく署名検証されているかは、LNE ConsoleからWebhookの検証を行うことで確認できます。

Botサーバーを公開する

ngrokを用いるとローカルのBotサーバーを簡単に外部に公開できます。

# Botサーバーを起動
tsx src/inde.ts

# サーバーを外部公開
ngrok http 3000

Webhook検証

LINE Consoleの当該チャンネルの「Messaging API設定」タブの「Webhook設定」で「Webhook URL」にngrokで公開したサーバーのURLを設定します。

# サーバーURLの例
https://hogehoge.ngrok-free.app/webhook

「検証」ボタンを押下して「成功」と表示されればOKです。

まとめ

LINE BotではLINEからWebhookリクエストが送信されたことを確認するため、署名検証が推奨されています。Node.jsではSDKのmiddleware()を用いると簡単に検証できます。

Discussion