Попробуйте получить access_token с помощью google oauth api, но перенаправить на `o/oauth2/authentication`
Сейчас я пытаюсь использовать google oauth api, чтобы позволить пользователю Google войти в мое приложение. И я следовал всем вместе с документацией Google OAuth2Login.
Я использовал это, чтобы получить код, и он работал просто отлично.
var u = 'https://accounts.google.com/o/oauth2/auth?'
+ '&response_type=code'
+ '&client_id=' + opts.googleClient
+ '&redirect_uri=' + redirectURI
+ '&scope=' + opts.scope
+ '&approval_prompt=force&access_type=offline';
Но пока я пытаюсь получить access_token с /o/oauth2/token
API, как показано ниже:
var u = 'https://accounts.google.com/o/oauth2/token?'
+ 'code=' + code
+ '&client_id=' + opts.googleClient
+ '&client_secret=' + opts.googleSecret
+ '&scope='
+ '&redirect_uri=' + redirectURI
+ '&grant_type=' + 'authorization_code';
request.post({url: u, json: true}, fn);
Это вернуло меня
{
error: "invalid_request"
}
Я проверил это с помощью инструментов разработчика Chrome на панели "Сеть", которые указывают, что URL-адрес запроса https://accounts.google.com/o/oauth2/approval?as=-5013c18c497345fc&hl=en&pageId=none&xsrfsign=APsBz4gAAAAAUcwS1TxlojrAPVNCj7ntTlz1H4xQgysC
вместо того, что я отправляю.
Я могу убедиться, что мой пост URL и данные выглядят точно так же, как в https://developers.google.com/oauthplayground/. Но результат совершенно другой.
Я сделал что-то не так? Пожалуйста помоги.
1 ответ
Данные, которые вы отправляете, выглядят корректно, но похоже, что в формировании запроса есть две ошибки.
Во-первых, когда вы создаете часть данных формы в сообщении, убедитесь, что ваш URL кодирует все значения, например, если значение redirect_uri содержит символ &, это вызовет проблемы, если он не закодирован в формате URL.
Во-вторых, хотя вы правильно делаете POST вместо GET, вы по-прежнему отправляете параметры в строке запроса, а не в теле запроса. Переместите их в тело, установите тип контента на "application/x-www-form-urlencoded", и вы должны быть установлены.
(похоже на JavaScript, но я не уверен, какие библиотеки вы используете, поэтому я не предоставил пример кода)