はじめに
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_SCOPE
に aws.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 のデコードサイトを使用します。
- JWT デコードサイト(例: jwt.io) にアクセス
- 取得したアクセストークンを "Encoded" 欄に貼り付ける
-
"Decoded" 欄の
scope
フィールドにaws.cognito.signin.user.admin
が含まれていることを確認
まとめ
VITE_COGNITO_SCOPE
に aws.cognito.signin.user.admin
を追加することで、Cognito の GetUser
API 実行時に必要なスコープが含まれるようになり、NotAuthorizedException: Access Token does not have required scopes
エラーが解決しました。
この内容が誰かの技術の支えになれば幸いです!
こちらも参考にしてみてください