FileMaker Server で簡易端末認証

FileMaker Server にホストしているファイルに対して、あらかじめ登録したクライアントのみがアクセスできるようにしてみた。

これを実現するには、クライアント端末固有の Persistent ID を使えばいい。

環境:macOS Catalina Version 10.15.6(英語環境)、FileMaker Pro 18 Advanced

(1)まずは FileMaker Server 上に Persistent ID を管理するための以下のようなカスタム App を別個に用意する(PersistentIDManager というアプリ名とする)。

端末名及び Persistent ID を格納するテキストフィールド(フィールド名はそれぞれ Machine、PersistentID としよう)を作成する。

クライアントはこのカスタム App にアクセスすることで自身の Persistent ID を登録する。クライアントの端末名と合わせて Persistent ID を記録していくわけだ。

Persistent ID ようのフィールドには Get ( PersistentID ) で取得した値を格納すればいい。

(2)FileMaker Server 上に置くカスタム App(CustomApp と名付けよう)に、特に何も配置しないレイアウトを用意する(Empty というレイアウト名としよう)。クライアントからアクセスがあった際に、一旦このレイアウトに誘導し、認証が通った端末だけがデータが置かれたレイアウトへ行くようにするためだ。

(3)再び1のカスタム App へ戻り、以下のような認証用スクリプトを作成する。やっていることは、クライアントの Persistent ID を探すことだ。


Loop
	# 認証が通った場合
	If [ Get ( ScriptParameter )  = Table::PersistentID ] 
		# クライアント側にこの PersistentIDManager アプリも開いているので閉じる
		Close File [ Current File ]
		# スクリプトをここで終了
		Halt Script
	Else
		# 認証が通らな方場合
		Go to Record/Request/Page [ Next ; Exit after last: On ]
	End If
End Loop

Show Custom Dialog [ "あなたは許可されていません!" ] 

# クライアントファイルを閉じる
Close File [ CustomApp ]

# クライアント側にこの PersistentIDManager アプリも開いているので閉じる
Close File [ Current File ]

(4)再び CustomApp アプリに戻る。以下のようなスクリプトを作成する。

Go to Layout [ “Empty” ; Animation: None ]

# 3のスクリプトにクライアントの Persistent ID をスクリプト引数として渡す。
Perform Script [ Specified: From list ; “[3のスクリプト]” from file: “PersistentIDManager” ; Parameter: Get ( PersistentID ) ]

# 認証が通った場合に、本番のレイアウト(Table というレイアウト名だとする)へ移動する。
Go to Layout [ “Table” ; Animation: None ]

# 以下のダイアログは3のアプリ上のスクリプトに書くと、レイアウトが二重表示されてしまう現象が生じる(バグかな?)。なので、クライアント側でダイアログを表示させる。
Show Custom Dialog [ "端末が認証されました!" ]

(5)4のスクリプトを「File>File Options>Script Triggers>OnFirstWindowOpen」に割り当てる。

***

以上の設定をすることで、1で端末登録をした端末のみがカスタム App にアクセスができ、登録していない端末ではファイルが閉じるような仕組みができた。

あまり美しい方法ではないが、簡易な端末認証を実装できた。