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