Authentication 如何使Google登录令牌的有效期超过1小时?

Authentication 如何使Google登录令牌的有效期超过1小时?,authentication,oauth,google-oauth,access-token,google-signin,Authentication,Oauth,Google Oauth,Access Token,Google Signin,我已经成功实现了谷歌登录 我能够对用户进行身份验证,并作为响应接收令牌。但是,令牌将在1小时后过期 expires\u in:“3600” 我尝试在文档中搜索,但找不到延长令牌寿命的参数 我到底想做什么? 用户成功登录后,使用HTTPS将用户的ID令牌发送到服务器 我正在将每个请求的令牌发送到服务器: endpoint/get?access_token=“+access_token 然后在服务器上调用https://www.googleapis.com/oauth2/v3/tokeninf

我已经成功实现了谷歌登录

我能够对用户进行身份验证,并作为响应接收令牌。但是,令牌将在1小时后过期

expires\u in:“3600”

我尝试在文档中搜索,但找不到延长令牌寿命的参数


我到底想做什么?

用户成功登录后,使用HTTPS将用户的ID令牌发送到服务器

我正在将每个请求的令牌发送到服务器:

endpoint/get?access_token=“+access_token

然后在服务器上调用
https://www.googleapis.com/oauth2/v3/tokeninfo

因此,我有一个令牌,每个请求都经过身份验证,但在工作1小时后,
tokeninfo
方法返回false,我需要重新验证用户

在我的代码中,我通过存储所有历史
access\u令牌
规避了这一问题,如果客户端使用旧令牌,我会根据历史数据进行检查,并使用
refresh\u令牌
手动发布新令牌(我的权限之一是授予脱机访问权)


是的,我很想知道:

  • 如何延长
    访问\u令牌的寿命

  • 鉴于有限的生命周期,如何确保请求在后端进行身份验证

访问令牌的寿命很短,只能持续一小时,您无法扩展

您需要做的是获取刷新令牌并获取新的访问令牌

示例:

您获取从初始请求中获得的刷新令牌,并通过HTTP将其发送到:注意:grant\u type=refresh\u-token


client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&refresh_token=1/ffymfi0sjr54ft9oupubljhd1hzs5twqcyavnecca&grant_type=refresh_token

响应

{
"access_token" : "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ",
"token_type" : "Bearer",
"expires_in" : 3600
}

正如@DaImTo所指出的,你不能延长访问令牌的寿命。你可以使用刷新令牌来获得一个新的令牌,但通常如果你试图在客户端使用一个服务器,你应该重新考虑你的方法

听起来好像有两种“身份验证”“你在这里做的是——客户端对服务器进行身份验证,服务器对谷歌服务进行身份验证。现在,服务器应该保留刷新令牌,这样它就可以随时对Google重新进行身份验证。听起来您正在绞尽脑汁研究如何在auth_令牌超时后针对服务器对客户端进行身份验证

通常,客户端不应该向服务器发送访问令牌,也不应该发送刷新令牌。它所做的是在第一次登录时,客户端获得一个一次性代码(来自谷歌),并将其交给服务器。服务器使用它与Google对话,获取access_令牌和refresh_令牌,确认用户已经对自己进行了身份验证,然后向客户端发送一些信息(通常是cookie),说“好的,我已经对您进行了身份验证。下面是您在接下来的对话中如何对自己进行身份验证。”

后面的操作非常标准,与oauth本身无关。然后,客户端和服务器像往常一样进行通信——根本不交换oauth内容,您依靠cookie(或等效物)来保持客户端-服务器身份验证。服务器继续使用auth令牌和refresh令牌与Google对话

我认为这是目前最好的指南。或者至少这是目前我能找到的最好的。至少它有一个很好的图表


关键的一点是,您正在与服务器交换名为“代码”的代码(我称之为“一次性代码”)。完成后,服务器会通过Google对您进行身份验证,然后它拥有访问/刷新令牌,您无需通过这些令牌即可与服务器通信。

“我检查历史数据,并使用
刷新令牌手动发布新令牌。”-这似乎是我已经在使用的东西-我不确定这是否是正确的方法,因为:1)它需要我存储过时的令牌2)任何具有历史令牌的人都会自动刷新到新令牌。。。好的-至少现在我知道令牌是短期的,无法扩展,所以我应该问一个更好的问题-服务器端如何知道何时
refresh\u token
?它要求您存储“refresh token”,该“refresh token”不是过时的,因为只要用户不撤销您的访问权,它就会工作。没有理由存储访问令牌,只要在需要时获取一个新的即可。您只需要记住在访问令牌过期之前刷新它。服务器端可能不知道何时需要刷新,这取决于开发人员向代码中添加的内容,也就是刷新的时间。您使用的是哪种语言?我存储
刷新\u令牌
。我使用
node.js
Firebase
,这是我的代码验证代码:••••“没有理由存储
access\u令牌
”-我为什么要存储
access\u令牌
?假设服务器收到一个请求,并且
访问\u令牌
无效(TTL过期)。现在我不知道该怎么办。通过检查
access\u令牌
以前是否有效,我可以刷新它。。。一定有更好的方法,这就是为什么我首先问这个问题:)“假设服务器收到一个请求,并且访问令牌无效(TTL过期)。此时我不知道该怎么办。”使用刷新令牌请求一个新的访问令牌?希望我们能聊天我想你让事情变得更难了。希望我们能聊天:)反正我在工作,我的笔记本电脑在家。。。我将(稍后)进行一些实验。。。我的问题出现在一张图片中:•••我知道我可以使用
刷新\u令牌
请求
访问\u令牌
-但是s呢