我对在网站中集成Google+ sign-in按钮表示怀疑。
我的问题是,在signinCallback中获得的google访问令牌有效期是多久?这个到期时间是否灵活?我可以多次使用它在到期前从谷歌中提取用户信息吗?
我的另一个问题是,我应该如何在登录期间保持会话?我已经考虑过以下方法,
还有另一种权利和更安全的方式吗?请注意,我的网站是简单的HTML 4.0网站,它几乎执行服务器端的每个操作。几乎没有Javascript,用户i / o由表单执行。所以服务器端技术更受欢迎:)
答案 0 :(得分:5)
在signinCallback中获取的google访问令牌有效期有多长?
3600秒(1小时)
此到期时间是否灵活?
没有。访问令牌将在一小时后过期。但是,您可以使用刷新令牌将过期的访问令牌替换为新令牌。为此,您必须在登录按钮上请求脱机访问,将一次性授权代码发送到您的服务器,并交换授权代码以获取访问令牌和刷新令牌。
我可以多次使用它在到期前从谷歌提取用户信息吗?
除非用户与您的应用断开连接,否则您将能够获得新的访问权限并进行API调用。
登录时如何维护会话?
使用您自己的网站会话来维护您网站的用户状态。听起来您已经在您的网站上有会话,如果会话存在且包含您的网站所需的任何授权密钥,则应该授权用户。
使用Google访问令牌作为会话密钥:
请不要这样做,您需要保护用户的访问权限。您可以做的一件事是稍微安全一点,就是从登录回调中传递访问令牌,然后验证它对应于服务器上的会话缓存用户。
这真的是你应该做的。使用登录按钮回调确定用户未登录,并在用户未登录时使其无效。将回拨中的ID令牌或一次性授权码传递给您的服务器,以验证您的用户身份。以下代码显示了带有错误条件的平均登录回调:
function onSignInCallback(authResult) {
if (authResult['access_token']) {
// User is signed in.
} else if (authResult['error']) {
// There was an error, which means the user is not signed in.
// As an example, you can handle by writing to the console:
console.log('not signed in, invalidating session');
}
console.log('authResult', authResult);
}
如您所知,authResult对象包含成员access_token和id_token。将这些令牌发送到OAuth.v2.verifytoken端点将检查令牌证书是否有效且令牌是否已过期。 Verifytoken还将为您返回一个唯一的标识符,您可以使用该标识符来验证用户未使用错误的会话。
Google+ PHP Quickstart向您展示了如何将授权码发送到您的服务器,接受并exchange the code, verify the token, and so on in PHP。
所以,你应该做的是:
答案 1 :(得分:0)
现在使用侦听器或gapi.auth2.getAuthInstance()。currentUser.get()。reloadAuthResponse()与登录按钮请求离线访问的整个过程,将一次性授权代码发送给您服务器,并为访问令牌和刷新令牌交换auth代码。
请参阅https://developers.google.com/identity/sign-in/web/listeners和https://developers.google.com/identity/sign-in/web/reference#googleuserreloadauthresponse。