Я использую AWS Amplify в своем приложении реакции для вызова моего API, размещенного в API Gateway с авторизацией AWS_IAM. Когда я устанавливаю авторизацию на NONE, все отлично работает в моем приложении реакции.
Однако, когда я устанавливаю авторизацию на AWS_IAM и запускаю свой API, используя API.get () из Amplify, как показано ниже:
const notes = await API.get('notes', '/notes', init);
Я получаю сообщение об ошибке вроде:
{
"message": "Missing Authentication Token",
"err": "missing auth"
}
Поэтому я попытался использовать aws-api-gateway-cli-test для проверки моего шлюза API. Благодаря сценарию я смог получить действительные учетные данные, получить аутентифицированный и правильный ответ. Я также попробовал POSTMAN с моими учетными данными администратора, и это также сработало.
Проведя некоторое исследование, я увидел, что люди связывают это с проблемой CORS. Я дважды проверил настройки своего шлюза API и подтвердил, что я включил CORS. Та же проблема сохраняется.
Благодаря функции отладки aws-ampify я смог увидеть процесс подписания в моем инспекторе Chrome. Процесс подписания был выполнен правильно с некоторыми accessKey и secretKey. Я вытащил эти ключи из инспектора в свой POSTMAN и попытался их получить. Эти учетные данные недействительны, и я получил следующее сообщение об ошибке:
{
"message": "The security token included in the request is invalid.",
"err:": "default"
}
Обновление: Я забыл скопировать токен сеанса в POSTMAN. Теперь со всеми учетными данными, сгенерированными моим приложением, я могу получить правильный результат из своего API в POSTMAN. Просто нет в моем приложении.
На данный момент для меня совершенно очевидно, что это проблема с аутентификацией. Тем не менее, я использовал aws-усиление для входа и получения процесса. Уверен, что процесс подписания осуществляется за кулисами.
Я потратил 3 дня на эту проблему и в основном все перепробовал ... Есть идеи, почему это не работает?
P.S. Многие люди предполагают, что опечатки в URL-адресе вызова могут привести к этой проблеме. Я дважды проверил, и нет опечатки. Ниже приведен мой расширенный код настройки:
``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
},
Storage: {
region: config.s3.REGION,
bucket: config.s3.BUCKET,
identityPoolId: config.cognito.IDENTITY_POOL_ID
},
API: {
endpoints: [
{
name: "notes",
endpoint: config.apiGateway.URL,
region: config.apiGateway.REGION
}
]
}
});``