Вход в Google для серверных приложений: замена действительного кода авторизации на токен — ошибка неверного запроса (ошибка: redirect_uri_mismatch)

Я пытаюсь реализовать вход через Google (https://developers.google.com/identity/sign-in/web/server-side-flow) для моего приложения. Мне удалось успешно получить код авторизации, но когда я пытаюсь обменять его на токен, я получаю следующий ответ.

Ответ об ошибке:

{
    "error": "redirect_uri_mismatch",
    "error_description": "Bad Request"
}

Я уже пытался добавить несколько URL-адресов перенаправления в консоль Google, но эта проблема все еще сохраняется. См. URL-адреса перенаправления ниже.

http://localhost:49188/oauthcallback.aspx
https://localhost:49188/oauthcallback.aspx
https://localhost:49188/oauthcallback.aspx
http://localhost/oauthcallback.aspx
https://localhost/oauthcallback.aspx
http://localhost/oauthcallback.aspx
https://localhost/oauthcallback.aspx

Я пробовал несколько запросов с использованием разных конечных точек токена, но это не решает эту проблему.

1-я конечная точка:

POST URI: www.googleapis.com/oauth2/v4/token 
Content-Type: application/x-www-form-urlencoded

code={code}&
client_id={xxx}.apps.googleusercontent.com&
client_secret={client_secret}&
redirect_uri=https://localhost:49188/oauthcallback.aspx&
grant_type=authorization_code

2-я конечная точка:

POST URI: https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded

code={code}&
client_id={xxx}.apps.googleusercontent.com&
client_secret={client_secret}&
redirect_uri=https://localhost:49188/oauthcallback.aspx&
grant_type=authorization_code

Я ожидаю получить правильный ответ токена, но ссылаюсь на JSON ниже, так как это ответ, который я получаю.

Ожидаемый ответ:

{
  "access_token":"1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in":3920,
  "token_type":"Bearer",
  "refresh_token":"1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

Ответ об ошибке

{
    "error": "redirect_uri_mismatch",
    "error_description": "Bad Request"
}

person Hashan JXT    schedule 08.04.2019    source источник
comment
На какой URL-адрес авторизации вы отправляете пользователей, чтобы получить этот код авторизации? Полный запрос на авторизацию пользователя должен содержать redirect_uri, который должен совпадать с тем, который вы представляете при вызове обмена токенами.   -  person user2705223    schedule 09.04.2019


Ответы (1)


@user2705223 user2705223 Вы подчеркнули хороший момент. Итак, если вы используете ux_mode="popup" или default, кажется, что JS SDK добавляет хост домена в качестве URL-адреса перенаправления по умолчанию вместо URL-адреса, указанного при инициализации, что довольно странно.

person Hashan JXT    schedule 15.04.2019