#タイトルにそって解説
本題に入る前にまずは長いタイトルについて順に説明します。
本記事で使用する cURL オプション はなにも FileMaker 専用ではなく、
使用するパラメータが動作するバージョン以上の curl を使用すれば同様に動作すると思われます。
##Bot 送信用 token
LINE WORKSでは API をリクエストする際に token が必須です。
token の取得は2つの方法のどちらかを選択する必要があります。
- サービス API
- ユーザーのログインが必要なAPI用。 具体的には Service API Consumer Key を使います。
- サーバー API
- ユーザーのログインが不要な API用。 Bot の API はこちらを使用します。 具体的には Server API Consumer Key をつかます。
- Server List(固定IPタイプ)
- 利用サーバーの IP を用いた認証形式。 これは本来固定 IP のサーバーを想定しているんでしょうが、 変動するIP環境であっても送信する方法をこのあと書きます。
- Server List(ID登録タイプ)
- 認証キー等を使って、 JWT(RS256) を作成し、token を取得します。 こちらの方法でも FileMaker は CryptGenerateSignature 関数を使用して作成可能ではありますが、今回無理はしません。
FileMaker はクラウド上はもちろん、オンプレでサーバー設置できたり、
Windows / macOS / iOS 向けにオフラインで動作するアプリケーションが使えたりなど、
自由度が非常に高いうえに、動作環境もさまざまです。
その分常にグローバルの固定 IPからという制限はせっかくの動作環境を限定することになります。
そこで本投稿がお役立ちできれば幸いです。
##FileMaker から送信する cURL オプション って
FileMaker は curl アプリケーション libcurl/7.76.0 (2021年11月現在) を内蔵しています。
FileMaker のスクリプトステップ「URL から挿入」を使用し、
「cURL オプション」にパラメータを渡すことで実行可能です。
#本題: cURL オプション
今回は
・サーバー API
の
・Server List(固定IPタイプ)
を選択しています。
"-X POST -S -m 5
-H \"consumerKey:" & $consumerKey & "\"
-H \"Content-Type:application/json;charset=UTF-8\"
-H \"Authorization: Bearer " & $token & "\"
-d @$body "
& " -H \"X-Forwarded-For: x.x.x.x\""
$consumerKey や $token は、LINE WORKS Developer Console からコピーしたものを指定します。
$body には Bot メッセージ送信に必要な JSON を入れます。
そして本投稿のミソが、「X-Forwarded-For ヘッダー」です。
Server List(固定IPタイプ)で token 作成時に登録したグローバルIPを x.x.x.x と仮定した場合の例になります。
固定 IP ではないのに、 Server List(固定IPタイプ) を使うため、
cURL オプションでこちらの IP アドレスを偽装する必要があるためです。
これにより、どこからでも Bot 送信が可能になります!
##セキュリティーについて
「X-Forwarded-For:」で偽装 ! 大丈夫か !? と気になるところですね。
まず自分が使っていた IP アドレスが今後他の方に割り振られて、偽装されたとしても、
API ID、Consumer Key、token の3つが流出しない限りは送信できないので安心かなと。
逆に他の人が利用中の グローバルIP を自分が偽装して指定しても動作すると思われます。
過度な負荷を LINE WORKS API サーバーに掛けて IP アドレス がブラックリスト化(そもそもそんな管理されているか確認したことない)にならないように注意したいとことです。
#最後に
この手法は LINE WORKS が想定している使い方ではないと思われるため、
ある日突然通用しなくなる恐れはあります。
その場合は本当に固定IP環境のサーバーから送信するか、
Server List(ID登録タイプ) で token を取得することになります。
初めて Qiita に投稿したので、文章の流れや markdown 記法の不慣れによるお見苦しい点はご容赦ください。