У меня есть приложение Next JS, библиотека следующей аутентификации и aws cognito для хранения информации о пользователях. Я создал общедоступный клиент в своем пуле пользователей Cognito и, используя этот идентификатор пула пользователей и идентификатор клиента, сначала успешно подключил свое приложение к Cognito. Тогда я не использовал next-auth.
Теперь я решил использовать next-auth и взять все это на серверную сторону. Я все еще использую старый клиент Cognito. Он правильно перенаправляет меня в пользовательский интерфейс входа в Cognito, но после успешного входа в систему следующая ошибка вызывает следующую аутентификацию
https://next-auth.js.org/errors#oauth_callback_error invalid_client {
error: OPError: invalid_client ...
Затем появляется след ошибки, за которой следует
name: 'OAuthCallbackError',
code: undefined
},
providerId: 'cognito',
message: 'invalid_client'
}
Почему я получаю эту ошибку?
В следующей ссылке JS указано, что «OAUTH_CALLBACK_ERROR» означает
This can occur during the handling of the callback if the code_verifier cookie was not found or an invalid state was returned from the OAuth provider.
Я не уверен, что это за файл cookie «code_verifier», поскольку я не пытался сделать что-либо дополнительно с помощью следующей аутентификации и не менял никаких конфигураций, которые могли бы вызвать это.
next-auth
запустит его на стороне сервера, поэтому вам понадобится Confidential client
вместо Public client
.
Вот как AWS Cognito описал разные типы клиентов:
Публичный клиент: Нативное приложение для браузера или мобильного устройства. Запросы Cognito API выполняются из пользовательских систем, которым не доверен секрет клиента.
Конфиденциальный клиент Серверное приложение, которое может безопасно хранить секрет клиента. Запросы Cognito API выполняются с центрального сервера.
Вот почему, хотя ваш предыдущий общедоступный клиент работал не на стороне сервера, этот клиент «недопустим» для использования в поставщике функций на стороне сервера, таком как next-auth
.
Создайте Confidential client
и используйте секрет клиента.