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 ユーザーの詳細を取得するには、トークンをデコードして署名を検証します。
サンプルコードで確認する
以下のコードで確認する前に、Claris ID Tokenの準備が必要なので、以下のアプリから、Claris ID Tokenを生成します。
Generating a Claris ID Token with FileMaker Cloud | frudens Inc.
アプリには Claris ID TokenとAccess Tokenがあるので、どちらのトークンでも確認できますが、Claris ID Tokenを指定するほうが良いと思います。
mkdir test
cd test
npm init -y
npm install aws-jwt-verify
touch verify.mjs
// 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);
}
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>タグを使うことが多いと思いますが、その際に、記号やタグなどの文字列をエスケープする必要があります。
そんなときに、簡単にエスケープするためのミニアプリを作りました。
興味があれば、使ってみてください。

