我正在尝试使用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
,但它会在关闭之前显示恼人的登录弹出窗口几毫秒。有没有其他方法在客户端上获取新的持票人令牌而不显示弹出窗口?
答案 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