0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cognitoの新UIで「アプリケーションを作成」すると意図せずシークレット必須になる

0
Posted at

背景

Cognito + API Gateway + Lambdaで認証付きAPIをコンソールで構築する際、2026年時点の新UIで最も詰まりやすいポイントが、クライアントシークレットの自動付与でした。

1. 新UIの「アプリケーションを作成」はUser PoolとClientを同時生成する

旧UI: User Pool作成 → App Client作成(別々)
新UI: 「アプリケーションを作成」の1ウィザードで両方同時に作成

旧UIの「ユーザープールを作成」ボタンは廃止され、User PoolとApp Clientをまとめて作る設計に変わっています。ただしこの一体化が、次のハマりどころを生みます。

2. 「従来のウェブアプリケーション」を選ぶとシークレットが自動付与される

アプリケーションタイプ: 従来のウェブアプリケーション
→ クライアントシークレットが自動で付与される

シークレットありのクライアントでCLIからinitiate-authを実行すると、以下のエラーになります。

SECRET_HASH was not received

対処: シークレットが必要ないテスト用途では、アプリケーションタイプに「シングルページアプリケーション (SPA)」を選びます。この選択肢だとシークレットなしでクライアントが作成され、CLIから直接ユーザー名・パスワードで認証するテストフローが組めます。

3. Cognito Authorizerを設定すればLambda側は認証コード不要

claims = (
    event.get("requestContext", {})
    .get("authorizer", {})
    .get("claims", {})
)
return {
    "email": claims.get("email"),
    "sub": claims.get("sub"),
    "token_use": claims.get("token_use"),
}

API Gatewayに Cognito Authorizer を設定すると、JWTの検証はAPI Gateway側で完結し、Lambdaが呼ばれた時点で認証済みであることが保証されます。Lambda側はrequestContext.authorizer.claimsから検証済みの情報を取り出すだけでよく、JWT検証ロジックを自前で書く必要がありません。

4. Authorizerの「トークンのソース」はデフォルト空欄

トークンのソース: Authorization (デフォルトは空欄・必ず入力する)

新UIのCognito Authorizer作成画面では、トークンをどのヘッダーから受け取るかの設定が初期状態で空欄になっています。これを入力し忘れると、全リクエストが問答無用で401になり、原因の特定に時間がかかります。

5. Lambdaに渡すのは IdToken、AccessToken ではない

IdToken:      ユーザー認証用(email/subなどのユーザー情報を含む)← これを使う
AccessToken:  Cognito API アクセス用(sub/scopeなどを含む)

initiate-authのレスポンスには複数のトークンが含まれますが、API GatewayのCognito Authorizerに渡すべきはIdTokenです。AccessTokenを渡すと403エラーになります。また、AuthorizationヘッダーにはBearerプレフィックスを付けず、raw JWTをそのまま指定する点も見落としがちです。

まとめ

新UIの「アプリケーションを作成」フローはクライアントシークレットの扱いに要注意で、CLIテスト用途ではSPAタイプでの別クライアント作成が実質必須でした。Authorizerのトークンソース設定と合わせて、この2点が新UI特有のハマりどころです。FORCE_CHANGE_PASSWORD状態からの永続パスワード設定手順は元記事にまとめています。

→ AWSコンソールだけでCognito認証付きAPIを構築する手順(ブログ)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?