401 возвращается из шлюза API с помощью авторизатора Cognito - независимо от того, что передается в - PullRequest
0 голосов
/ 11 января 2019

У меня есть пользователи, которые могут войти в систему, выйти из системы, зарегистрироваться, сбросить пароль - все это с помощью AWS усиливается в моем коде React.js.

После того, как они вошли в систему, я хочу получить свой API-шлюз, который использует Authorization: UserCognito, , затем перейти к лямбда-функции, где я хочу иметь возможность извлекать данные, переданные в мой API, и возвращать их информация из DynamoDB с информацией об их профиле (например, имя, изображение, адрес электронной почты).

Когда я получаю 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-ampleify в мой API, на стороне переднего плана реакции - чтобы он мог авторизовать их, а затем запустить мою функцию лямбда, где я беру их информацию пользователя и поискать их профиль в моем DynamoDB?

Мой API-шлюз имеет токен, которому присвоено значение Authorization при настройке моего авторизатора.

Кроме того, для моего API настроены сопоставления шаблонов, которые выглядят так:

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

Но все равно ничего, кроме Несанкционированного, не возвращается. Так что я делаю не так?

1 Ответ

0 голосов
/ 12 января 2019

Если у вас есть действительный JWT в user в вашем getProfileInfo(), попробуйте использовать

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

возможно, вы также хотите убедиться, что у вас есть действующий токен на сайте, например jwt.io

...