0

我正在尝试使用 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 开发工具包上的方法以确保它使用刷新令牌?

更新:如果我打电话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,但它在关闭之前显示烦人的登录弹出窗口几毫秒。有没有其他方法可以在不显示弹出窗口的情况下在客户端获取新的不记名令牌?

4

1 回答 1

0

我很惊讶 gapi.auth.authorize 在这种情况下不能正常工作。你能补充一下吗

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

到 gapi.auth.authorize 参数?

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

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

于 2014-12-18T00:43:50.437 回答