Токен доступа Google OAuth 2 с использованием чистого Javascript или JQuery - PullRequest
0 голосов
/ 09 ноября 2019

Я тестирую Google OAuth 2.0. У меня есть мой идентификатор клиента, секрет клиента и код авторизации. Теперь я хочу получить доступ и обновить токен.

Однако я могу сделать это из PHP. Но при использовании Invalid Grant ошибка при использовании Javascript.

    <!DOCTYPE html>
    
    
        
    

    
         Get your Access Token 
         
функция getAccessToken () {$ .ajax ({тип: 'POST', URL: "https://accounts.google.com/o/oauth2/token", contentType: 'application/ x-www-form-urlencoded ', dataType:' json ', data: {client_id:' MY CLIENT ID ', client_secret:' MY SECRET ', код:' MY AUTH CODE ', redirect_uri:' http://localhost:8888/google-api.html', grant_type:'authorization_code'}, success: function (data) {$ ('# response'). html (data);}, error: function (e) {$ ('# response'). html (e.responseText);}});}

В основном я пытаюсь преобразовать приведенный ниже PHP-запрос Curl POST в Ajax

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,"https://accounts.google.com/o/oauth2/token");
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/x-www-form-urlencoded']);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
        'code'          => $code,
        'client_id'     => $client_id,
        'client_secret' => $client_secret,
        'redirect_uri'  => $redirect_uri,
        'grant_type'    => 'authorization_code',
    ]));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    curl_close ($ch);

Примечание. Подобный типвопросы о переполнении стека имеют много точек зрения, но остаются без ответа. Гениальные разработчики любезно предоставят ваш вклад. Я также застрял в течение 3 дней.

1 Ответ

0 голосов
/ 10 ноября 2019

Благодаря @Tankaike. Этот вопрос задавался 3-4 раза в StackOverflow, и никто не ответил на него внимательно.

Начинающие !!! Следует отметить один момент: код авторизации работает только один раз :) Для получения нового токена доступа используйте токен обновления, полученный при первом ответе

        $.ajax({
            type: 'POST',
            url: "https://accounts.google.com/o/oauth2/token",
            contentType: 'application/x-www-form-urlencoded; charset=utf-8',
            crossDomain:true,
            cache : true, 
            dataType: 'json',
            data: {
                client_id: client_id,
                client_secret: client_secret,
                code: code,
                redirect_uri: redirect_uri,
                grant_type: grant_type,
            },

            success: function (data) {
                $('#response').html(JSON.stringify(data, null, " "));;
            },
            error: function (e) {
                $('#response').html(e.responseText);
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...