Хобрук: Ваш путь к мастерству в программировании

Токен обновления Google OAuth2 с JavaScript

Я прочитал документацию по токенам обновления, но мне трудно применить их к моему коду.

Я думаю, что правильный подход заключается в том, что php генерирует токен обновления, отправляет его клиенту, затем клиент перестает использовать id_token и делает запросы только с токеном обновления? Но похоже, что это просто побеждает цель истечения срока действия токена.

Как мне справиться с истечением срока действия токена и использовать токен обновления в этом сценарии:

Я использую https://apis.google.com/js/platform.js для аутентификации учетных записей Google с помощью:

<div class="g-signin2" data-onsuccess="onSignIn"></div>

Затем с помощью onSignIn, используя ajax для получения некоторых данных с сервера после входа в систему с проверкой id_token на внутреннем сервере с помощью php:

function onSignIn(googleUser) {
    var profile = googleUser.getBasicProfile();
    id_token = googleUser.getAuthResponse().id_token;
    angular.element(document.getElementById('data_controller')).scope().get_data(); 
};

Соответствующий Angular JavaScript:

angular.module('myApp', ['ngDialog']);
angular.module('myApp').controller('data_controller', function($scope, $q, $http, ngDialog) {
    $scope.get_data = function() {
        $http({
            headers: { "Content-Type": "application/x-www-form-urlencoded", "id_token": id_token },
            url: "http://myserver/api/application.php",
            method: "POST",
            data: {}
        })
        .then(function successCallback(response) {
            $scope.my_data = response.data.results;
            $scope.token_used = id_token;
            console.log(response.data);
        });
    }
});

Это работает нормально, но как только срок действия id_token истечет через час, ajax завершится ошибкой.

На http://myserver/api/application.php я проверяю токен, указанный в заголовке запрос с:

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=" . $id_token;

Если клиент перезагружает страницу, все работает нормально, поскольку Google автоматически извлекает новый id_token.


Ответы:


1

Я неправильно использовал токен.

Я изменил:

headers: { "Content-Type": "application/x-www-form-urlencoded", "id_token": id_token },

To:

headers: { "Content-Type": "application/x-www-form-urlencoded", "id_token": gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token },

Таким образом он отправляет текущий токен. Я не осознавал, что токен автоматически обновляется в фоновом режиме. Я каждый раз отправлял исходный токен, поэтому по истечении срока его действия приложение отказывалось.

04.01.2017
Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..