#amazon-web-services #oauth-2.0 #google-oauth #amazon-cognito
#amazon-web-services #oauth-2.0 #google-oauth #amazon-cognito
Вопрос:
Я настроил поток предоставления кода авторизации для Google с помощью Amazon Cognito. Я могу получить код авторизации, вызвав /login
endpoint и обменяв его на access_token
, refresh_token
и id_token
используя /token
конечную точку, поэтому я предполагаю, что она настроена более или менее правильно.
К сожалению, когда я пытаюсь обменять a refresh_token
на новые токены /token
, также используя endpoint, я получаю только access_token
и id_token
без new refresh_token
. Я пытался понять, почему это происходит, но в документации Amazon лишь кратко упоминается, что refresh_token
возвращается только для кода авторизации. Что еще интереснее, в документации auth0 говорится, что /token
конечная точка должна вести себя совсем по-другому — она должна возвращать не новые токены напрямую, а новый код авторизации.
И теперь я довольно смущен тем, что там происходит. Это Amazon изменил процесс авторизации пользователя с использованием кода авторизации? Или, что более вероятно, я этого не понимаю и сделал что-то не так?
Ответ №1:
refresh_token генерируется сразу после авторизации кода, мы можем повторно использовать его для создания новых access_token и id_token. В моем подходе я вызываю метод initiateAuth для создания новых access_token и id_token :
refreshToken() {
let params = {
AuthFlow: "REFRESH_TOKEN_AUTH",
ClientId: this.clientId,
AuthParameters: {
"REFRESH_TOKEN": [refresh_token_property],
"DEVICE_KEY": null
}
};
return this.cognitoIdp.initiateAuth(params).promise().then(data => {
console.log(data.AuthenticationResult);
}).catch(e => {
console.log(e)
})
}
Комментарии:
1. Спасибо @Mahdi. Теперь мне интересно, возможно ли получить новый refresh_token, не прося пользователя снова пройти через экран согласия авторизации Google? Или, может быть, после обмена refresh_token мы не сможем получить новый токен без повторной авторизации?
2. Ну, я бы сказал так: — Код авторизации можно использовать только один раз. Повторное использование существующего кода вернет ошибку invalid_grant, см. Ответы на эту ошибку docs.aws.amazon.com/cognito/latest/developerguide / … — refresh_token можно использовать повторно, он нам понадобится для генерации новых обоих токенов (access amp; id) — Чтобы получить новый refresh_token, нам нужно повторно войти в систему для генерации кода авторизации и повторной авторизации кода для генерации новых токенов (обновление, доступ, идентификатор) наконец
3. Хорошо, это то, чего я боялся. Спасибо!