Claris ID Tokenが有効か無効か確認する方法

公開日: 更新日:

----- 追記 ここから -----

更新日時:2024-04-10 13:41:40

本記事では、JWTを検証するためにライブラリを検討しましたが、有効期限の日時を確認する目的であれば、以下の記事に記載した方法で確認できます。

Claris ID Tokenの有効期限をJWTのペイロードで確認する方法 | 株式会社フルーデンス

----- 追記 ここまで -----

Claris ID Tokenの投稿が多く、申し訳ありません。

Claris ID Tokenを使って色々と開発をしていると、Claris ID Tokenが有効なのか、無効なのかを確認する必要があります。

もし、1時間経過し無効な状態であれば、FileMaker Data APIのログインメソッドに失敗するためです。

ログインメソッドが失敗すれば、該当の Claris ID Token は無効である。としても良いのですが…

Claris ID Tokenや一般的なAccess Tokenと呼ばれるトークンには、有効期限が含まれていますし、AWSのSDKなどで有効か無効かの確認をするライブラリがないか確認しました。

AWS JWT Verifyを使って確認する

以下の記事が見つかりました。

How can I decode and verify the signature of an Amazon Cognito JSON Web Token?

I want to use an Amazon Cognito user pool as the authentication method for my application.

What is a secure way to verify the ID and access tokens sent by clients to my application?

Short description

When clients authenticate to your application with a user pool, Amazon Cognito sends an ID token. You can manually verify the ID token in scenarios similar to the following:

  • You created a web application and want to use an Amazon Cognito user pool for authentication.
  • You use an Amazon Cognito user pool for authentication and an Amazon Cognito identity pool to retrieve AWS Security Token Service (AWS STS) temporary credentials.
    AWS Lambda is invoked with those credentials, but Lambda doesn't have information about who originally authenticated with the user pool.

To get Amazon Cognito user details contained in an Amazon Cognito JSON Web Token (JWT), you can decode the token and then verify the signature.

Amazon Cognito JSON ウェブトークンの署名をデコードして検証するにはどうすればよいですか?

アプリケーションの認証方法として Amazon Cognito ユーザープールを使用したいと考えています。

クライアントからアプリケーションに送信された ID とアクセス トークンを検証する安全な方法は何ですか?

簡単な説明

クライアントがユーザープールを使用してアプリケーションを認証すると、Amazon Cognito が ID トークンを送信します。次のようなシナリオで ID トークンを手動で検証できます。

  • ウェブアプリケーションを作成し、認証に Amazon Cognito ユーザープールを使用したいと考えています。
  • 認証には Amazon Cognito ユーザー プールを使用し、AWS Security Token Service (AWS STS) の一時認証情報を取得するには Amazon Cognito ID プールを使用します。
    AWS Lambda はこれらの認証情報を使用して呼び出されますが、Lambda には最初にユーザープールで認証したのが誰であるかに関する情報がありません。

Amazon Cognito JSON ウェブトークン (JWT) に含まれる Amazon Cognito ユーザーの詳細を取得するには、トークンをデコードして署名を検証します。

Decode and verify the signature of a Cognito JSON Web Token | AWS re:Post

awslabs/aws-jwt-verify: JS library for verifying JWTs signed by Amazon Cognito, and any OIDC-compatible IDP that signs JWTs with RS256, RS384, and RS512

サンプルコードで確認する

以下のコードで確認する前に、Claris ID Tokenの準備が必要なので、以下のアプリから、Claris ID Tokenを生成します。

Generating a Claris ID Token with FileMaker Cloud | frudens Inc.

アプリには Claris ID TokenAccess Tokenがあるので、どちらのトークンでも確認できますが、Claris ID Tokenを指定するほうが良いと思います。

mkdir test
cd test
npm init -y
npm install aws-jwt-verify
touch verify.mjs
プロジェクトの初期化と aws-jwt-verify ライブラリのインストール
// verify.mjs
import {CognitoJwtVerifier} from 'aws-jwt-verify';

// Verifier that expects valid access tokens:
const verifier = CognitoJwtVerifier.create({
  userPoolId: 'us-west-2_NqkuZcXQY',
  tokenUse: 'id', // Claris ID Tokenを検証する場合
  // tokenUse: 'access', // Access Tokenを引数にする場合は、こちらをセット
  clientId: '4l9rvl4mv5es1eep1qe97cautn',
});

try {
  const clarisIdToken = `eyJraW...`; // ここに `Claris ID Token` を貼り付ける
  const payload = await verifier.verify(clarisIdToken);
  console.log('Token is valid. Payload:', payload);
} catch (err) {
  console.error('Token not valid!', err.message);
}
aws-jwt-verify を使用して Claris ID Token を検証するコード (verify.mjs)
Token is valid. Payload: {
  'custom:country': 'JP',
  sub: 'a1a1a11a-a01a-111a-1d11-1a111a1ac1ac',
  email_verified: true,
  iss: 'https://cognito-idp.us-west-2.amazonaws.com/us-west-2_NqkuZcXQY',
  phone_number_verified: false,
  'custom:privacy': '1',
  'cognito:username': 'a1a1a11a-a01a-111a-1d11-1a111a1ac1ac',
  given_name: 'Teruhiro',
  locale: 'ja-JP',
  'custom:mag.userId': '1234',
  origin_jti: '2b222aa2-b222-22b2-22aa-2bb2dbee2c2d',
  aud: '333ccl3mv3cc3eep3ce33cautn',
  'custom:managedby': '1',
  event_id: 'eeee4444-e4be-4e4e-4444-4f444b444444',
  token_use: 'id',
  auth_time: 1712247195,
  exp: 1712250795,
  iat: 1712247195,
  family_name: 'Komaki',
  jti: 'f5555f55-5f5f-5555-f555-e55ff5c5ff55',
  email: 'mail@hogeho.hogeho'
}
実行結果:検証に成功し、デコードされたペイロードが表示されている様子

しかし、今回の方法だと、実行環境としてNode.jsが必要になってしまいます。

できれば、FileMakerやcurlコマンドで気軽に確認したいのですが、長くなってしまうため、今回はここまでにしておきたいと思います。

お知らせ

ブログなどにコードを埋め込む際に、<code>タグを使うことが多いと思いますが、その際に、記号やタグなどの文字列をエスケープする必要があります。

そんなときに、簡単にエスケープするためのミニアプリを作りました。

興味があれば、使ってみてください。

Code Escape for <code> tag

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

小巻 旭洋

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