📝

[小ネタ] Cognito ユーザープールのアプリケーションクライアントでシークレットを生成しない方法

に公開

Application-specific settings with app clients - Amazon Cognito

The Amazon Cognito console creates app clients with client secrets when you select the Traditional web application and Machine-to-machine application options for application type. Choose one of these options to generate a client secret, or create the client programmatically with CreateUserPoolClient and set GenerateSecret to true.

CreateUserPoolClient API の GenerateSecret パラメーターで false を指定しましょう。

コンソールから作成した場合

Cognito ユーザープールをマネジメントコンソールから作成した時に作成されるリソースを確認してみた

generateSecret が true なのでクライアントシークレットも自動的に作成されています。

コンソールから Cognito ユーザープールを作成した場合、アプリケーションクライアントも自動的に作成されます。
この時、シークレットも自動生成されることを上記ブログで確認しました。

また、アプリケーションクライアントを追加する際にはシークレットの生成に関するオプションはありませんでした。

シークレットを生成したくない場合

上述の通り CreateUserPoolClient API からアプリケーションクライアントを作成する必要があります。
例えば、AWS CLI の場合は以下のコマンドを実行することでシークレットを生成せずにクライアントを作成可能です。

$ aws cognito-idp create-user-pool-client \
--user-pool-id your-userpool-id \
--client-name test \
--no-generate-secret \
--explicit-auth-flows "ALLOW_REFRESH_TOKEN_AUTH" "ALLOW_USER_SRP_AUTH" "ALLOW_USER_AUTH" "ALLOW_USER_PASSWORD_AUTH"

create-user-pool-client — AWS CLI 2.28.21 Command Reference

--generate-secret | --no-generate-secret (boolean)
When true , generates a client secret for the app client. Client secrets are used with server-side and machine-to-machine applications. Client secrets are automatically generated; you can’t specify a secret value.

AWS CLI の場合、no-generate-secret というオプションを指定することでシークレットの生成をなしにできます。

まとめ

今回は Cognito ユーザープールのアプリケーションクライアントでシークレットを生成しない方法を紹介しました。
どなたかの参考になれば幸いです。

参考資料

Discussion