2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LINE WORKSAdvent Calendar 2021

Day 10

Bot 送信用 token 取得の Server List(固定IPタイプ) で FileMaker から送信する cURL オプション

Last updated at Posted at 2021-12-09

#タイトルにそって解説
本題に入る前にまずは長いタイトルについて順に説明します。
本記事で使用する 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 をつかます。
##token 取得 Server API Consumer Key を使いますが、 token 取得するにはさらに2つのどちらかを選択する必要があります。
Server List(固定IPタイプ)
利用サーバーの IP を用いた認証形式。 これは本来固定 IP のサーバーを想定しているんでしょうが、 変動するIP環境であっても送信する方法をこのあと書きます。
Server List(ID登録タイプ)
認証キー等を使って、 JWT(RS256) を作成し、token を取得します。 こちらの方法でも FileMaker は CryptGenerateSignature 関数を使用して作成可能ではありますが、今回無理はしません。
##FileMaker Apple の子会社 Claris が開発している ローコードツール。 古くはデータベースとして有名だったが、最近では ローコードツール としていろいろ Leader を受賞しています。

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 記法の不慣れによるお見苦しい点はご容赦ください。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?