AWS Cognitoでクライアントシークレットを生成しないアプリクライアントを作成しようとしたが、クライアントシークレットを生成しないオプションを指定する方法が分からずに時間を浪費した話を紹介します。

何が起こったか

アプリクライアントを作成して認証しようとすると、以下のようなエラーが返される。

Client (アプリケーションID) is configured with secret but SECRET_HASH was not received

対処方法

CLIで呼び出す場合や、SDKで呼び出す場合において、「SECRET_HASH」のオプションをつける必要があるのだが、今回はクライアントシークレットを生成しない方法で対応することにした。

Cognito API ハンズオンに記載のある旧マネージメントコンソールでは、「クライアントシークレットを生成」はチェックボックスで切り替えられているのだが、現在のマネージメントコンソールでは該当項目がない。

Image description

結論としては、上記画面のアプリケーションタイプにて「従来のウェブアプリケーション」を選択すると「クライアントシークレットを生成する」こととなり、「シングルページアプリケーション (SPA)」を選択すると「クライアントシークレットを生成しない」こととなる。

「従来のウェブアプリケーション」で作成した場合
従来のウェブアプリケーション

「シングルページアプリケーション (SPA)」で作成した場合
シングルページアプリケーション (SPA)
※クライアントシークレットが「-」となっていることが分かる。

ちなみに、ディベロッパーガイドを参照すると注記に以下の表現がある。

アプリケーションタイプの従来のウェブアプリケーションとMachine-to-machineアプリケーションオプションを選択すると、クライアントシークレットを持つアプリケーションクライアントを作成します。

同じ問題で時間を浪費することがないよう、この投稿が活用されることを期待しています。