Я пытаюсь реализовать вход через 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"
}
@user2705223 user2705223 Вы подчеркнули хороший момент. Итак, если вы используете ux_mode="popup" или default, кажется, что JS SDK добавляет хост домена в качестве URL-адреса перенаправления по умолчанию вместо URL-адреса, указанного при инициализации, что довольно странно.
На какой URL-адрес авторизации вы отправляете пользователей, чтобы получить этот код авторизации? Полный запрос на авторизацию пользователя должен содержать redirect_uri, который должен совпадать с тем, который вы представляете при вызове обмена токенами.