You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置AWS Cognito后获取用户邮箱属性提示权限范围错误求助

问题:React结合AWS Amplify获取用户邮箱时提示「Access Token does not have required scopes」

登录成功后调用fetchUserAttributes()获取用户邮箱属性,抛出错误:

"Error fetching user attributes NotAuthorizedException: Access Token does not have required scopes"

已在AWS Amplify配置和Cognito应用客户端侧设置了openid和email权限范围,但问题依旧。

相关代码

React组件代码

import { useState, useEffect } from "react";
import { fetchUserAttributes } from "aws-amplify/auth";
import { useNavigate } from "react-router-dom";

function App(props) {
  const [email, setEmail] = useState("");
  const [userGroups, setUserGroups] = useState([]);
  const navigate = useNavigate();

  useEffect(() => {
    fetchUserAttributes()
      .then((userAttrs) => {
        setEmail(userAttrs.email || "");
      })
      .catch((error) => {
        console.error("Error fetching user attributes", error);
      });
  }, [navigate]);

  return (
    <>
      <p>Hello {email}</p>
      <p>
        You can <button onClick={props.signOut}>logout</button>
      </p>
    </>
  );
}

export default App;

Amplify配置代码

// Configure AWS Amplify
Amplify.configure({
  Auth: {
    Cognito: {
      loginWith: {
        oauth: {
          redirectSignIn: ["http://localhost:5173"],
          redirectSignOut: ["http://localhost:5173"],
          domain: "us-east-domain",
          providers: ["Google"],
          scopes: ["openid", "email"],
          responseType: "code",
        },
      },
      userPoolId: "userpoolid",
      userPoolClientId: "userpoolclientid",
    },
  },
});

解决步骤

  1. 补全Cognito应用客户端的OAuth权限范围
    进入AWS控制台的Cognito用户池,找到对应应用客户端:

    • 确认「允许的OAuth范围」除了openid、email,必须勾选aws.cognito.signin.user.admin——这个权限是调用fetchUserAttributes获取用户属性的核心权限,多数场景下是遗漏此权限导致的报错
    • 确认「OAuth 2.0授权类型」勾选了Authorization code grant(与配置中的responseType: "code"匹配)
  2. 更新Amplify配置的scopes
    在现有scopes数组中添加aws.cognito.signin.user.admin,修改后的配置片段:

    Amplify.configure({
      Auth: {
        Cognito: {
          loginWith: {
            oauth: {
              // 保留其他原有配置
              scopes: ["openid", "email", "aws.cognito.signin.user.admin"],
            },
          },
          // 保留其他原有配置
        },
      },
    });
    
  3. 重置登录会话
    旧的access token是基于旧权限生成的,必须执行以下操作:

    • 调用登出接口清除当前用户会话
    • 清除浏览器本地存储(localStorage/sessionStorage)中Amplify相关的缓存数据
    • 重新登录获取携带新权限的access token
  4. 验证Token权限
    可以在浏览器控制台中执行以下代码,解码access token确认权限范围:

    import { Auth } from "aws-amplify";
    
    Auth.currentSession().then(session => {
      const accessToken = session.getAccessToken();
      console.log("当前Token权限范围:", accessToken.payload.scope);
    });
    

    输出结果需包含email和aws.cognito.signin.user.admin

  5. 确认第三方登录的属性映射
    由于你使用Google作为登录提供商,需在Cognito用户池的「身份提供商」设置中,确认Google的属性映射规则已将Google的email字段正确映射到Cognito用户的email属性

内容的提问来源于stack exchange,提问作者user28587481

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:04:53