[google chrome 28]
我在打包的应用程序中使用chrome.experimental.identity
API并且getAuthToken工作正常 - 获取用于获取用户信息等的令牌。
我知道身份API正在从实验转移到主干,因此从chrome 29我将能够使用chrome.identity
并从我的清单中删除"experimental"
权限。
问:如果我想制作一个退出按钮是removeCachedAuthToken
的方法吗?我试图在experimental.identity中使用它,但它没有做任何事情。
答案 0 :(得分:4)
没有。这不是可行的方法。
removeCachedAuthToken
是一个从内部令牌缓存中删除使用getAuthToken
获取的令牌的函数。但是,它不会撤消令牌。这意味着应用程序将无法再访问当前会话中的用户资源,直到它再次调用getAuthToken
。当发生这种情况时,它将能够再次获得令牌而无需用户授予访问权限。
因此,此功能并不意味着与注销相关的例程。当您意识到应用程序正在使用的访问令牌是陈旧的或以任何其他方式无效时,它更像是一种恢复机制。当您使用访问令牌发出请求并且HTTP响应状态为401 Unauthorized时,会发生这种情况。在这种情况下,您可以废弃令牌,然后使用getAuthToken
请求新令牌。要模拟该行为,您可以使用Google Accounts page撤消相关授权或构成诊断UI:chrome:// identity-internals(目前它列出了所有缓存的令牌)。
请参阅chrome app samples了解GDoc和身份。 (如果您在接下来的几天内执行此操作,则请求GDocs请求114和身份识别请求115.)
答案 1 :(得分:2)
要撤消令牌,请使用google示例应用中的此功能。
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.');
}
});
}
答案 2 :(得分:0)
我也很挣扎,但我最终发现这个解决方案埋藏在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?token= ' + current_token);
试试这个:
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.');
}
});
}