Я на самом деле использую гем ruby ("yt"), чтобы получить от пользователя разрешение на доступ к его учетной записи YouTube. Пока все хорошо, как указано здесь https://developers.google.com/youtube/v3/guides/auth/server-side-web-apps?hl=es я без проблем перехожу к шагу 3 и получаю код, похожий на 4 / adsfaisdofjaosifjosdifjsdoajifsado (вы понимаете, много случайных символов).
В документации говорится, что мне нужно сделать POST-запрос, подобный следующему, чтобы использовать этот код для получения фактического токена доступа:
POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded
code=4/ux5gNj-_mIu4DOD_gNZdjX9EtOFf&
client_id=1084945748469-eg34imk572gdhu83gj5p0an9fut6urp5.apps.googleusercontent.com&
client_secret=hDBmMRhz7eJRsM9Z2q1oFBSe&
redirect_uri=http://localhost/oauth2callback&
grant_type=authorization_code
Итак, я делаю. Я пытался сделать это как с помощью curl -d в консоли, так и с помощью fetch с javascript, передавая всю запрашиваемую информацию. Мой код javascript выглядит следующим образом:
fetch("https://accounts.google.com/o/oauth2/token", {
method: "POST",
headers: {
'Host': 'accounts.google.com',
"Content-Type": "application/x-www-form-urlencoded"},
body: {
"code": '4/2asdasdasdasd',
"client_id": 'myclientid.apps.googleusercontent.com',
"client_secret": 'myclientsecret',
"grant_type": "authorization_code",
"redirect_uri": 'https://myuri'
}
})
.then((response) => response.json())
.then((data) => console.log(data))
Я получаю сообщение POST https://accounts.google.com/o/oauth2/token 400, и JSON возвращает следующее:
{error: "unsupported_grant_type", error_description: "Invalid grant_type: "}
Кто-нибудь имеет представление о том, что происходит?