【LINE Messaging API】削除されたチャネルでの「ステートレスチャネルアクセストークン」について
こんにちは。st-1985 です。
弊社ではLINE社の Messaging API を使用したサービスを展開しています。
今日はMessaging APIを利用するにあたって、削除されたチャネルでも「ステートレスチャネルアクセストークン」が扱える点について注意が必要だったので、備忘録としてまとめます。
前置き
本記事では、LINE社のMessaging APIをある程度理解している方を対象にしています。
Messaging APIの基本的な使い方やアクセストークンの取得方法については、公式ドキュメントをご参照ください。
また、チャネルアクセストークンには複数の種類がありますが、今回は「ステートレスチャネルアクセストークン」に限定した話になります。
(他のチャネルアクセストークンでも同様の可能性はありますが、未確認の為)
「ステートレスチャネルアクセストークン」は長いので以降は「アクセストークン」と呼びたいと思います。
削除されたチャネルとそのアクセストークンに関する注意点
削除したチャネルでもアクセストークンが発行できる
アクセストークンは、チャネルが削除された後も発行し続けることが可能なようでした。
(少なくとも20時間経過時点では発行可能でした)
以下は削除済みのチャネルの情報でアクセストークンを発行する例です。
export ID=(削除されたチャネルのチャネルID)
export SECRET=(削除されたチャネルのチャネルシークレット)
curl -X POST https://api.line.me/oauth2/v3/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode "client_id=$ID" \
--data-urlencode "client_secret=$SECRET"
# レスポンス
{"token_type":"Bearer","access_token":"****","expires_in":900}
上記の通り、削除されたチャネル情報でトークンの発行が可能となっている為、トークン発行の際にチャネル情報に問題がある事に気づく事が難しくなっています。
実際に発行されたトークンを使用してAPIを実行すると
# 当月のメッセージ送信量を取得するAPIにリクエスト
curl -X GET https://api.line.me/v2/bot/message/quota -H "Authorization: Bearer ****"
# レスポンス
ステータスコード : 403
レスポンスボディ : {"message":"Access to this API is not available for your account"}
のように、APIを利用できない旨※が返ってくる為、この段階でチャネル情報に問題がある事に気づく事ができます。
※ APIによって返却されるメッセージが異なる場合があるので注意が必要です。詳しくは後述します。
チャネル削除直後においてアクセストークンは一時的に使用可能
チャネル削除からそれほど時間が経過していない場合、アクセストークンを用いてのAPIリクエストが成功します。
# 当月のメッセージ利用状況を取得するAPIにリクエスト
curl -X GET https://api.line.me/v2/bot/message/quota/consumption -H "Authorization: Bearer ****"
# レスポンス
ステータスコード : 200
レスポンスボディ : {"totalUsage":0}
数回試した範囲では5分以内に応答が変化するようでした。
# 数分後に再リクエスト
curl -X GET https://api.line.me/v2/bot/message/quota/consumption -H "Authorization: Bearer ****"
# レスポンス
ステータスコード : 403
レスポンスボディ : {"message":"Access to this API is not available for your account"}
この際、アクセストークン自体の有効期限は切れていません。
API によって応答は異なる
前述の通り、チャネル削除により無効となったアクセストークンを使用したリクエストに対するレスポンスは、APIによって異なります。
以下はいくつかのAPIの応答例です。
# 当月のメッセージ利用状況を取得する API
# see: https://developers.line.biz/ja/reference/messaging-api/#get-consumption
ステータスコード : 403
レスポンスボディ : {"message":"Access to this API is not available for your account"}
# オーディエンスを取得する API
# see: https://developers.line.biz/ja/reference/messaging-api/#get-audience-group
ステータスコード : 403
レスポンスボディ : {"message":"Access to this API denied due to authorization error"}
# チャネルのWebhook の設定を取得する API
# see: https://developers.line.biz/ja/reference/messaging-api/#get-webhook-endpoint-information
ステータスコード : 200
レスポンスボディ : {"endpoint":"https://example.com","active":true}
エラー時のレスポンスが違っていたり、APIによっては正常系で応答を返すものあります。
チャネルが削除された場合のレスポンスが統一されていればハンドリングがしやすいのですが、そうはなっていないので、レスポンスを利用した実装には注意が必要そうです。
まとめ
- 削除されたチャネルからアクセストークンが発行可能
- 削除から時間が経過するとアクセストークンが無効になる
- 無効なアクセストークンを使用したリクエストに対するレスポンスはAPIによって異なる
チャネル情報を扱う際には、これらの点にも留意した実装が必要そうです。
Discussion