使用 Cognito 授权方从 API 网关返回 401 - 无论传入什么

401 returned from API gateway using Cognito authorizer - no matter what is passed in

我让用户能够登录、注销、注册、重置密码 - 所有这些都在我的 React.js 代码中使用 AWS amplify。

他们登录后,我想获取我的 API 网关,即使用 Authorization: UserCognito,然后转到一个 lambda 函数,我希望能够在其中提取数据从 dynamoDB 传递到我的 API 和 return 他们的信息以及他们的个人资料信息(例如姓名、照片、电子邮件)。

当我获取 API 时,我得到 {"message":"Unauthorized"}

我这样调用 api:



     getProfileInfo(user.signInUserSession.idToken.jwtToken).then(user => {
                console.log(user);
              });

甚至尝试过这个:

```

let token = await Auth.currentCredentials();
      console.log(token);
      const options = {
        method: "POST",
        headers: {
          "content-type": "application/json",

          Authorization: token.sessionToken
        }
      };

      let res = GetProfileInfo(token.sessionToken);
      API.post("XXURL", "", options);

````

getProfileInfo 看起来像:


      const getProfileInfo = async user => {
      let url = XXXXXXXX
      console.log(user);
      const data = await fetch(url, {
        method: "POST",
        headers: {
          "content-type": "application/json",
          Authorization: user
        },
        mode: "cors"
      })
        .then(response => {
          console.log(response);
          return response.json();
        })
        .then(data => {
          return data;
        })
        .catch(error => {
          return error;
        });
      return data;

那么 - 我如何将我的用户信息从 AWS-amplify 传递到我的 API, 在反应前端 - 这样它就可以授权他们,然后 运行 我的 lambda 函数,我在其中获取他们的用户信息并在我的 DynamoDB 中查找他们的个人资料?

我的 API 网关在设置我的授权方时将令牌分配给 Authorization 的值。

此外,我为我的 API 设置了模板映射,如下所示:

```
    {
    "context" : {
        "sub" : "$context.authorizer.claims.sub",
        "email" : "$context.authorizer.claims.email"
    }
    }
```

但仍然 return 编辑了未授权。那我做错了什么?

如果您在 getProfileInfo() 中的 user 中确实有一个有效的 JWT,那么请尝试使用

headers: {
  ...
  Authorization: 'Bearer ' + user    
}

也许您还想验证您在 jwt.io

等网站上是否拥有有效令牌