0
respostas

401 Unauthorized retorno ao consumir API.get do Amplify

Oi pessoal, fiquei 2 dias tentando resolver o seguinte problema: sempre que consumia a API via front-end, recebia o erro 401 Unauthorized. e via Insomnia não tinha erro. Revisei todo o provisionamento dos recursos da AWS, recriei o projeto do zero e nada resolvia, nem com o download do projeto da aula. Depois de muito tentar, encontrei da documentação do documentãção do Amplify

Amplify.configure({
  API: {
    endpoints: [
      {
        name: "sampleCloudApi",
        endpoint: "https://xyz.execute-api.us-east-1.amazonaws.com/Development",
        custom_header: async () => { 
          return { Authorization : 'token' } 
          // Alternatively, with Cognito User Pools use this:
          // return { Authorization: `Bearer ${(await Auth.currentSession()).getAccessToken().getJwtToken()}` }
          // return { Authorization: `Bearer ${(await Auth.currentSession()).getIdToken().getJwtToken()}` }
        }
      }
    ]
  }
});

Com isso, importei a classe Auth para o arquivo index.js e fiz a seguinte alteração:

import { Amplify, Auth } from "aws-amplify"

Amplify.configure({
  Auth: {
    mandatorySignIn: true,
    region: config.cognito.REGION,
    userPoolId: config.cognito.USER_POOL_ID,
    identityPoolId: config.cognito.IDENTITY_POOL_ID,
    userPoolWebClientId: config.cognito.APP_CLIENT_ID
  },
  API: {
    endpoints: [
      {
        name: "pacientes",
        endpoint: config.apiGateway.URL,
        region: config.apiGateway.REGION,
        custom_header: async () => { 
          return { Authorization: `Bearer ${(await Auth.currentSession()).getIdToken().getJwtToken()}` }
        }
      }
    ]
  }
})

Com isso, as instâncias de API conseguiram consumir corretamente enviado o token. Agora porque na aula funcionava sem isso, é uma mistério pra mim.