Google OAuth2使用JavaScript刷新令牌

问题描述:

我已阅读有关刷新令牌的文档,但我很难将其应用于我的代码。Google OAuth2使用JavaScript刷新令牌

我认为正确的方法是PHP生成一个刷新令牌,将其发送到客户端,然后客户端停止使用id_token并只使用刷新令牌发出请求?但是这似乎只是挫败了令牌过期的目的。

我如何处理令牌到期,在这种情况下使用刷新令牌:

我使用https://apis.google.com/js/platform.js验证谷歌账号有:

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

然后onSignIn,用ajax得到一些在使用php在后端服务器上检查id_token后,服务器的数据:

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; 

如果客户端重新加载页面,一切正常的谷歌自动获取一个新id_token。

我错误地使用了令牌。

我改变:

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

要:

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

这样,它把当前的令牌。我没有意识到令牌会在后台自动刷新。我每次都发送原始令牌,所以一旦过期,应用程序就会失败。