3

[google chrome 28]chrome.experimental.identity在打包的应用程序中使用 API,getAuthToken 工作正常 - 获取令牌,我可以使用它获取用户信息等。我了解身份 API 正在从实验性迁移到主干,因此从 chrome 29我将能够使用chrome.identity和删除"experimental"清单中的权限。

问:如果我想制作一个注销按钮是removeCachedAuthToken怎么回事?我试图在experimental.identity 中使用它,但它什么也没做。

4

3 回答 3

5

不,这不是要走的路。

removeCachedAuthTokengetAuthToken是一个从内部令牌缓存中删除使用获取的令牌的函数。但是,它不会撤销令牌。这意味着应用程序将不再能够访问当前会话中的用户资源,直到它getAuthToken再次调用。发生这种情况时,它将能够再次获得令牌,而无需用户授予访问权限。

因此,此功能并不意味着是与注销相关的例程。当您意识到您的应用程序正在使用的访问令牌已过时或以任何其他方式无效时,它更像是一种恢复机制。当您使用访问令牌发出请求并且 HTTP 响应状态为 401 Unauthorized 时,就会发生这种情况。在这种情况下,您可以废弃令牌,然后使用getAuthToken. 要模拟这种行为,您可以使用Google 帐户页面或形成诊断 UI撤销相关授权:chrome://identity-internals(目前它列出了所有缓存的令牌)。

请参阅 GDocs 和 Identity 的chrome 应用示例。(如果您在接下来的几天内这样做,请为 GDocs 请求 114 和为 Identity 请求 115。)

于 2013-07-01T22:48:40.253 回答
5

要撤销令牌,请使用谷歌示例应用程序中的此功能。

function revokeToken() {
    user_info_div.innerHTML="";
    chrome.identity.getAuthToken({ 'interactive': false },
      function(current_token) {
        if (!chrome.runtime.lastError) {

          // @corecode_begin removeAndRevokeAuthToken
          // @corecode_begin removeCachedAuthToken
          // Remove the local cached token
          chrome.identity.removeCachedAuthToken({ token: current_token },
            function() {});
          // @corecode_end removeCachedAuthToken

          // Make a request to revoke token in the server
          var xhr = new XMLHttpRequest();
          xhr.open('GET', 'https://accounts.google.com/o/oauth2/revoke?token=' +
                   current_token);
          xhr.send();
          // @corecode_end removeAndRevokeAuthToken

          // Update the user interface accordingly
          changeState(STATE_START);
          sampleSupport.log('Token revoked and removed from cache. '+
            'Check chrome://identity-internals to confirm.');
        }
    });
  }
于 2014-02-07T11:24:45.293 回答
1

我也为此苦苦挣扎,但最终我发现这个解决方案隐藏在 Chrome App Samples 中。https://github.com/GoogleChrome/chrome-app-samples/blob/master/gapi-chrome-apps-lib/gapi-chrome-apps.js

removeCachedAuthToken 在本地删除它,但要从 Google 服务器撤销令牌,您需要发送请求,因此第二部分:xhr.open('GET', ' https://accounts.google.com/o/oauth2/revoke?令牌= '+当前令牌);

尝试这个:

function revokeToken() {

  chrome.identity.getAuthToken({ 'interactive': false },
  function(current_token) {
    if (!chrome.runtime.lastError) {

      // @corecode_begin removeAndRevokeAuthToken
      // @corecode_begin removeCachedAuthToken
      // Remove the local cached token
      chrome.identity.removeCachedAuthToken({ token: current_token },
        function() {});
      // @corecode_end removeCachedAuthToken

      // Make a request to revoke token in the server
      var xhr = new XMLHttpRequest();
      xhr.open('GET', 'https://accounts.google.com/o/oauth2/revoke?token=' +
               current_token);
      xhr.send();
      // @corecode_end removeAndRevokeAuthToken

      // Update the user interface accordingly

      $('#revoke').get(0).disabled = true; 
      console.log('Token revoked and removed from cache. '+
        'Check chrome://identity-internals to confirm.');
    }
  });
}
于 2014-05-06T00:05:14.680 回答