This是让我提出这个问题的评论。
我使用googleapis软件包获得了服务器端Node.js应用。用户使用他们的Google帐户登录,并在会话中存储令牌。我得到的凭证如下
{ access_token: '<AN ACCESS TOKEN>',
token_type: 'Bearer',
id_token: '<A LONG ID TOKEN>',
expiry_date: <A TIMESTAMP> } // why do some places say there's an expires_in instead of this
没有refresh_token
,因为用户已经第一次登录并点击了接受,而我没有存储刷新令牌(看起来我应该这样做)
因此,当达到expiry_date
时,如果用户尝试向我们请求将某些内容保存到他们的google驱动器,我会收到一条错误消息:
{ [Error: invalid_request] code: 400 } // ...no further details
我的两部分问题:
我假设我收到了该错误消息,因为我的OAuth客户端对象中的access_token已过期(因为在令牌过期之前调用正常)。它是否正确?为什么错误消息不再详细?
在顶部的链接答案中,解决方案是再次强制接受提示,获取刷新令牌并永久存储,并在其到期时使用它来获取新的访问令牌。为什么这是一个更好的选择,而不仅仅是检查令牌是否已过期,以及当我们想要调用API时让用户重新进行身份验证?哪个是&#34;正确&#34;确保我的登录用户始终可以调用驱动器API来保存文档的方法吗?
答案 0 :(得分:3)
是的,400
响应是因为过期的访问令牌。我不确定为什么Google没有提供更多详细信息,但使用400
状态代码来指示某种凭据问题的服务很常见。状态代码的definition表示它是客户问题。
这两种方法都有效,各有优缺点。您建议的客户端重新身份验证方法具有使实现更简单的优势,因为您不必存储刷新令牌,也不必实施刷新过程。缺点是迫使用户每小时重新进行身份验证对用户不太友好。至少他们将被重定向到您的应用程序,他们可能必须明确登录或重新授权。您只需要考虑权衡并选择最适合您用例的内容。