Momento Token Vending Machineのご紹介

組み込みコンポーネントまたはスタンドアロンコンポーネントを使用して、Momento のきめ細かなアクセストークンを生成する方法について説明します。

Momentoを搭載したWebアプリケーションをいじっていると、突然、アプリがMomentoサービスと通信するためにアクセストークンを必要としていることに気づきます!

この記事では、Momento Web SDK を介してパブ/サブ機能を提供する Momento Topics を使用して構築された、ブラウザベースのチャット・アプリケーションの 2 つの例を説明します。それぞれのアプリケーションは、Momento Fine-grained Access Controlled (FGAC) トークンを取得し、ブラウザからトピックへのアクセスを制限するメカニズムを持っています。

これら 2 つのアプローチは、それぞれ組み込みまたはスタンドアロンのトークン・ベンディング・マシーン(TVM) を利用するものと考えることができます。TVM は、アプリケーションが Momento サービスと対話するために使用できる新しい FGAC トークンを生成する、アプリケーションのコンポーネントです。

最初の方法は、NextJSチャットアプリの例のように、サーバーサイドのコンポーネントを持つウェブアプリに最適です。このアプリは“/api/momento/token “認証エンドポイントを設定し、アプリのクライアントコンポーネントがGETリクエストを行うことができます。この認証エンドポイントは、Momento JavaScript SDK を使用して新しい FGAC トークンをベンダし、これらのトークンのスコープを設定して、特定の Momento キャッシュやトピックへのアクセスを許可することができます。

2番目の方法は、静的なウェブサイトや、私たちのVite静的JavaScriptチャットアプリの例のような、サーバー側のコンポーネントを持たないその他のアプリケーションに最適です。FGAC トークンを取得するために、私たちの Vite アプリは、AWS API Gateway、AWS Lambda、および AWS CDK を使用して構築されたシンプルなアプリケーションである Momento Token Vending Machine のデプロイされたインスタンスによって提供される外部 HTTP エンドポイントにリクエストを行います。

どちらの場合も、TVM コンポーネントが新しいアクセストークンをベンダするために、Momento コンソールから生成されたアクセストークンを提供する必要があります。

Momento TVM は AWS Lambda 関数として実装され、Momento JavaScript SDK を使用して API Gateway エンドポイント経由でトークンを売り出します。まず、以下のコードサンプルのように、売りたい FGAC トークンの権限スコープを設定します。このコード例では、”default-cache” という名前のキャッシュに存在するすべてのトピックへのアクセスを許可するパーミッションスコープを作成しています。TVM はこの権限スコープを使用するトークンを生成します。

export const tokenPermissions: TokenScope = TokenScopes.topicPublishSubscribe("default-cache", AllTopics);

定義済みの AWS CDK スタックを使用して TVM Lambda 関数をデプロイすると、ターミナルに API Gateway エンドポイントが表示されます。これで誰でもあなたのエンドポイントにリクエストを行い、Momento アクセストークンを受け取ることができます。

完全にオープンな TVM エンドポイントは好ましくないかもしれません。その場合は、好みの API Gateway オーソライザを設定できます。ハードコードされたユーザー名/パスワード認証情報を使用する Lambda 認証機能AWS Cognito ユーザープール認証機能の基本的な例を提供します。TVM 設定ファイルでこのオプションをオンにし、追加の環境変数を指定するだけで、アプリケーションのみがエンドポイントにアクセスできるようになります。

export enum AuthenticationMethod {
	Open,             // no authentication
	LambdaAuthorizer, // use Lambda Authorizer attached to API Gateway
	AmazonCognito,    // use Cognito user pool authorizer attached to API Gateway
}
export const authenticationMethod: AuthenticationMethod = AuthenticationMethod.AmazonCognito;

さらに、Cognitoオーソライザーオプションを使用する場合、ユーザーを異なるユーザーグループに割り当てるようにTVMを設定することができ、各グループは異なるFGACトークンのパーミッションスコープに関連付けられ、異なる層のアクセスを可能にします(例えば、管理者はReadOnlyパーミッションではなくReadWriteパーミッションを持つことになります)。この動作を実際に見るには、”cognito “認証メソッドを選択したViteチャットアプリを試してみてください。

このチュートリアルで、Momentoトークン自動販売機を導入する場所と方法について、いくつかの指針を得ることができたと思います!さらに詳しい情報は、Momento認証トークンMomento Auth APIに関するドキュメントをご覧ください。また、Momento CacheとMomento Topicsを利用したセキュアなWebアプリケーションの作成については、私たちのdiscordにご参加ください。