2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Cognito 備忘録:「NotAuthorizedException: Access Token does not have required scopes」エラーについて

Last updated at Posted at 2025-02-13

はじめに

AWS Cognito を使用したアプリケーションで、GetUser API を呼び出した際に NotAuthorizedException: Access Token does not have required scopes というエラーが発生しました。

このエラーは、アクセストークンに必要なスコープが含まれていないために起こります。

今回は、このエラーの原因を調査し、適切な解決策を見つけるまでの流れをまとめました。同じ問題に直面した方の参考になれば幸いです。

書こうと思ったきっかけ

Cognito を使った認証処理を実装していた際に、アクセストークンのスコープに関するエラーに遭遇しました。

公式ドキュメントを確認しながら調査しましたが、必要なスコープの設定ミスが原因だと特定するのに時間がかかりました。

この問題を解決するために試したことや、最終的な対応方法を整理しておくことで、今後の自分の備忘録としても役立つと考えました。

困っていたエラー

Failed to get user info from Cognito: operation error Cognito Identity Provider: GetUser, https response error StatusCode: 400, RequestID: xxx, NotAuthorizedException: Access Token does not have required scopes

このエラーは、AWS Cognito で GetUser API を呼び出した際に、アクセストークンに必要なスコープが含まれていないために発生しています。

エラーの詳細

  • NotAuthorizedException: Access Token does not have required scopes
    → アクセストークンに必要なスコープ(権限)が不足しているため、GetUser の呼び出しが失敗している。

考えられる原因

1. Cognito ユーザープールでの OAuth スコープ設定が不十分

  • GetUser を実行するには、アクセストークンに aws.cognito.signin.user.admin スコープが必要。
  • クライアントアプリケーションに、適切なスコープ (openid, profile, email など) が付与されていない可能性。

2. アクセストークンが authorization_code フローで取得されていない

  • Cognito のトークンを取得する際に、authorization_code フロー(OAuth2)ではなく implicit フローを使っている場合、必要なスコープが含まれないことがある。

3. アクセストークンが既に期限切れ

  • Cognito のアクセストークンはデフォルトで 1時間 有効。
  • 期限切れのトークンを使用している場合も、アクセス権限エラーが発生する。

4. クライアントアプリ(App Client)に正しいスコープが割り当てられていない

  • Cognito コンソールで、OAuth 設定の「許可されたスコープ」に aws.cognito.signin.user.admin が含まれているか確認。

今回の解決策について

今回の NotAuthorizedException: Access Token does not have required scopes エラーの原因は、アクセストークンに必要なスコープが含まれていなかったことでした。

OAuth スコープの修正

環境変数 VITE_COGNITO_SCOPEaws.cognito.signin.user.admin を追加。

修正前:

VITE_COGNITO_SCOPE="openid profile email"

修正後:

VITE_COGNITO_SCOPE="email openid phone profile aws.cognito.signin.user.admin"

Cognito の OAuth スコープ設定を確認

AWS コンソール → Cognito → ユーザープール → アプリクライアントの設定 で
aws.cognito.signin.user.admin が許可されているか確認。

アクセストークンを取得し直す

curl で scope を指定して新しいトークンを取得

以下の curl コマンドを使用して、新しいアクセストークンを取得します。

curl -X POST "https://your-cognito-domain.auth.ap-northeast-1.amazoncognito.com/oauth2/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=authorization_code&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&code=YOUR_AUTHORIZATION_CODE&redirect_uri=YOUR_REDIRECT_URI&scope=email openid phone profile aws.cognito.signin.user.admin"

アクセストークンの内容を確認

取得したアクセストークンが正しいスコープを持っているかを確認するため、JWT のデコードサイトを使用します。

  1. JWT デコードサイト(例: jwt.io) にアクセス
  2. 取得したアクセストークンを "Encoded" 欄に貼り付ける
  3. "Decoded" 欄の scope フィールドに aws.cognito.signin.user.admin が含まれていることを確認

まとめ

VITE_COGNITO_SCOPEaws.cognito.signin.user.admin を追加することで、Cognito の GetUser API 実行時に必要なスコープが含まれるようになり、NotAuthorizedException: Access Token does not have required scopes エラーが解決しました。

この内容が誰かの技術の支えになれば幸いです!

こちらも参考にしてみてください

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?