Claris ID Tokenの有効期限をJWTのペイロードで確認する方法

公開日: 更新日:

以前の投稿で、Claris ID Tokenが有効かどうかを検証する方法について記事にしました。

Claris ID Tokenが有効か無効か確認する方法 | 株式会社フルーデンス

前回の記事では AWS JWT Verify ライブラリを使用しましたが、今回の要件はトークンの署名検証ではなく、単純にClaris ID Tokenの有効期限を知ることです。

そのため、外部ライブラリには依存せず、FileMaker単体でJWTのペイロードを確認する方法を採用しました。

JWTについて

JWT(JSON Web Token)の仕様や詳細については、jwt.io を参照してください。

What is JSON Web Token?
JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object.
This information can be verified and trusted because it is digitally signed.
JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA.

JSONウェブトークンとは何ですか?
JSON Web Token (JWT) は、関係者間で情報を JSON オブジェクトとして安全に送信するためのコンパクトで自己完結型の方法を定義するオープン スタンダード (RFC 7519) です。
この情報はデジタル署名されているため、検証および信頼できます。
JWT は、シークレット (HMAC アルゴリズムを使用)、または RSA または ECDSA を使用した公開/秘密キーのペアを使用して署名できます。

JSON Web Token Introduction - jwt.io

有効期限をFileMakerで確認する方法

Claris ID Tokenの有効期限をFileMakerで算出するためのスクリプトは以下の通りです。

Claris ID Tokenの有効期限をJWTのペイロードで確認するスクリプト
FileMaker スクリプトワークスペースでの実装イメージ
# Claris ID Tokenの有効期限をJWTのペイロードで確認する方法 in file blank (6t2s.frudens.jp)

#
テキストを挿入 [ 選択 ; ターゲット: $clarisIdToken ; 「eyJraWQ...」 ]
#
# --- Base64Url を Base64 に変換(記号の置換)
変数を設定 [ $clarisIdTokenSafe ; 値: Substitute (   $clarisIdToken ;   [ "-" ; "+" ] ;   [ "_" ; "/" ] ) ]
#
# --- ペイロード部分(2番目の要素)を取得
変数を設定 [ $payloadBase64 ; 値: GetValue ( Substitute ( $clarisIdTokenSafe ; "." ; ¶ ) ; 2 ) ]
#
# --- パディング(=)の補完処理
変数を設定 [ $remainder ; 値: Mod ( Length ( $payloadBase64 ) ; 4 ) ]
変数を設定 [ $padding ; 値: If ( $remainder > 0 ; Left ( "====" ; 4 - $remainder ) ; "" ) ]
#
# --- デコード
変数を設定 [ $payload ; 値: Base64Decode ( $payloadBase64 & $padding ) ]
// # {
    "aud" : "111xvl1mv1es2eep1qe11cautn",
    "auth_time" : 1712298737,
    "cognito:username" : "a1b1a51f-a91a-111a-1d11-1a111b1ac1fc",
    "custom:country" : "JP",
    "custom:mag.userId" : "1234",
    "custom:managedby" : "1",
    "custom:privacy" : "1",
    "email" : "hoge@domein.hogehoge",
    "email_verified" : true,
    "event_id" : "1234b2fe-1234-4fd2-be88-e6da8ebffc8a",
    "exp" : 1712302337,
    "family_name" : "Komaki",
    "given_name" : "Teruhiro",
    "iat" : 1712298737,
    "iss" : "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_NqkuZcXQY",
    "jti" : "1cb111cb-111e-11e1-11e1-e1c1f1f111ce",
    "locale" : "ja-JP",
    "origin_jti" : "2fc2a2aa-ff2b-2222-bcef-2ae22ff2222f",
    "phone_number_verified" : false,
    "sub" : "a1b1a51f-a91a-111a-1d11-1a111b1ac1fc",
    "token_use" : "id"
}
#
変数を設定 [ $unixTime_有効期限日時 ; 値: JSONGetElement ( $payload ; "exp" ) ]
// # 1712302337
#
# --- UnixTimeをタイムスタンプに変換(+9時間でJSTへ変換)
変数を設定 [ $有効期限日時 ; 値: GetAsTimestamp ( GetAsNumber ( Timestamp ( Date ( 1 ; 1 ; 1970 ) ; Time ( 0 ; 0 ; 0 ) ) ) + ( $unixTime_有効期限日時 ) + ( 60 * 60 * 9 ) ) ]
// # 2024/04/05 16:32:17
#
// # Get ( タイムスタンプ ) or Get ( ホストのタイムスタンプ )
# NOTE: 比較対象の有効期限日時をJSTに変換しているため、クライアントもJSTであることを前提とします。
変数を設定 [ $現在日時 ; 値: Get ( タイムスタンプ ) ]
#
If [ $有効期限日時 < $現在日時 ]
    変数を設定 [ $flag_有効期限切れ ; 値: True ]
Else
    変数を設定 [ $flag_有効期限切れ ; 値: False ]
End If
#
# --- Claris ID Refresh Tokenを用いて、Claris ID Tokenを更新するスクリプトを実行する。
#
現在のスクリプト終了 [ テキスト結果:    ]
#
JWTのペイロードから有効期限(exp)を取得するFileMakerスクリプト

サンプルファイルについて

本記事で紹介したサンプルファイルをご希望の方は、無料相談フォームよりお気軽にお問い合わせください。

小巻旭洋のプロフィール写真

小巻 旭洋

2014年からフリーランスとして活動し、2016年に株式会社フルーデンスを設立する。FileMaker開発歴は約10年。多数の企業システム構築を手がけ、特にデータベース設計と、JavaScript連携、Web連携、パフォーマンス最適化を専門としています。2025年から、Web業務システム・アプリ開発をメインに開発をしています。