如何在使用AWS JavaScript SDK时刷新Google Plus持票人令牌

时间:2014-11-15 13:44:30

标签: amazon-web-services oauth-2.0 aws-sdk

我正在尝试使用AWS“浏览器SDK”来执行对某些AWS服务的直接调用,并使用Google Plus执行用户身份验证。

初始身份验证正常运行,在我设置了AWS内部从Google Plus收到的承载令牌后,我可以在浏览器中执行直接的S3调用。我的问题来自长用户会话,初始承载令牌到期,我对S3的调用开始抛出错误(错误是我使用过期的访问令牌)。

我怀疑AWS没有为刷新令牌调用Google Plus端点,它仍然使用我设置的初始端口。

那么有没有办法强制Google API为我提供一个可以在AWS中设置的完全新的不记名令牌?如果我打电话:

var clientId = "<my client id>",
    scope = "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email";

gapi.auth.authorize({
    client_id: clientId,
    scope: scope,
    immediate: true
}, function(r) { console.log(r.id_token) });

我总是获得相同的持票人令牌,即使它已过期。但是如果我刷新页面,那么我的确会得到一个全新的。那么有没有办法强迫GAPI给我一个新的持票人令牌,我可以在AWS中设置。或者我需要调用AWS SDK上的方法以确保它使用刷新令牌吗?

更新:如果我这样致电auth.signIn而不是auth.authorize

gapi.auth.signIn({
    clientid: clientId,
    scope: scope,
    cookiepolicy : 'single_host_origin',
    response_type: 'id_token token gsession',
    callback: loginToGoogle,
    immediate: true
})

然后我得到一个新的id_token,但它会在关闭之前显示恼人的登录弹出窗口几毫秒。有没有其他方法在客户端上获取新的持票人令牌而不显示弹出窗口?

1 个答案:

答案 0 :(得分:0)

我很惊讶在这种情况下gapi.auth.authorize无法正常工作。 你可以添加

吗?

cookiepolicy : 'single_host_origin', response_type: 'id_token token gsession',

到gapi.auth.authorize params?

你什么时候开始出错?是令牌到期时(您可以通过检查响应中的.expires_at属性来确定)吗?当令牌过期时,您是否获得相同的access_token?

离线访问流程是另一种选择:https://developers.google.com/accounts/docs/OAuth2WebServer