[小ネタ]LINE Messaging API の 長期間有効なチャネルアクセストークンが廃止されます

この記事はLINE Developers ニュースにて、報告があった「長期間有効なチャネルアクセストークンが廃止について」です。 現時点の代替策である短期間有効なチャネルアクセストークンを発行するエンドポイントを使ってアクセストークンを取得方法を紹介します。
2018.08.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

LINE Developers ニュースにて、報告があったように長期間有効なチャネルアクセストークンが廃止されます。 尚廃止は、2018年11月に行われる予定とのことです。
今回は現時点で代替策の一つを紹介します。短期間有効なチャネルアクセストークンを発行するエンドポイントを使って取得しましょう。

アクセストークン取得する

webhookのバックエンドは、 Lambda(ランタイム: nodejs8.10)の想定です。
必要なモジュールは、request モジュールです。npmもしくはyarnでインストールしておいてください。

$ yarn add request

最大で30件のトークンを発行できます。上限を超過した場合は、発行順に既存のチャネルアクセストークンが取り消されます。

エンドポイント
POST https://api.line.me/v2/oauth/accessToken

リクエストヘッダー

ヘッダー名 説明
Content-Type application/x-www-form-urlencoded

リクエストボディ

フィールド タイプ 説明
grant_type String client_credentials
client_id String チャネルID
client_secret String チャネルシークレット

レスポンス

プロパティ タイプ 説明
error String エラーの概要
error_description String エラーの内容。特定の状況では返されません。

サンプルコード

const request = require('request');

function getToken() {
    return new Promise((resolve, reject) =>{
        let option = {
            "url": "https://api.line.me/v2/oauth/accessToken",
            "method": "POST",
            "headers": {
                "Content-Type": "application/x-www-form-urlencoded"
            },
            "form": {
                "grant_type": "client_credentials",
                "client_id": "YOUR_CHANNEL_ID",
                "client_secret": "YOUR_CHANNEL_SECRET"
            }
        };
        request(option, function(error, response, body){
            if (!error) {
                resolve(JSON.parse(body));
            } else {
                console.log('Error: ' + error);
                reject();
            }
        });
    });
}

exports.handler = async function(event) {
    let result = await getToken();
    console.log(result);
    //expect output
    //{"access_token":"xxxxxxxxxxxxxxxxxx","expires_in":2592000,"token_type":"Bearer"}
}

アクセストークンの発行ができました。 しかし都度 API にアクセスしてトークンを再発行する必要はないので、DynamoDB等で管理し洗い替えを行いましょう。

まとめ

いかがでしたでしょうか。
簡単なチャットボットは長期間利用可能なチャネルアクセストークンで済ませていましたが、今後はトークン管理が実装に追加されます。 作成を検討されている方は2018年11月までですので、先に実装を済ませておくといいかもしれません。