我已经成功实现了谷歌登录。
我能够对用户进行身份验证,并作为响应收到令牌。然而,令牌将在 1 小时后过期。
expires_in: "3600"
我尝试在文档中搜索 -https://developers.google.com/identity/sign-in/web/reference https://developers.google.com/identity/sign-in/web/reference- 但找不到延长令牌寿命的参数。
我实际上想做什么?
https://developers.google.com/identity/sign-in/web/backend-auth https://developers.google.com/identity/sign-in/web/backend-auth
用户成功登录后,使用 HTTPS 将用户的 ID 令牌发送到您的服务器
我将令牌与每个请求一起发送到服务器:
endpoint/get?access_token=" + access_token
然后在我调用的服务器上https://www.googleapis.com/oauth2/v3/tokeninfo
所以我有一个令牌,每个请求都经过身份验证,但在工作 1 小时后tokeninfo
方法返回false我需要重新验证用户身份。
在我的代码中,我通过存储所有历史记录来规避这一点access_tokens
如果客户端使用旧令牌,我会检查历史数据并使用手动颁发新令牌refresh_token
(我的权限之一是授予离线访问权限)
所以是的,我很想知道:
OR
正如 @DaImTo 指出的,您无法延长 access_token 的寿命。您可以使用刷新令牌获取新令牌,但通常如果您尝试执行此客户端操作并拥有服务器,则应该重新考虑您的方法。
听起来您在这里执行了两个“身份验证” - 客户端针对服务器进行身份验证,服务器针对 Google 服务进行身份验证。现在,服务器应该保留刷新令牌 - 因此它始终可以针对 Google 重新进行身份验证。听起来您正在努力解决 auth_token 超时后如何针对服务器对客户端进行身份验证。
一般来说,客户端不应将 access_token 发送到服务器,也不应向服务器发送刷新令牌。它的作用是在第一次登录期间,客户端获得一个一次性代码(来自 Google)并将其交给服务器。服务器使用它与 Google 通信并获取 access_token 和 refresh_token,确认用户已对自己进行身份验证,然后将某些内容(通常是 cookie)发送回客户端,说“好吧,我已经对您进行了身份验证。以下是您如何保持在我们接下来的对话中验证你自己的身份。”
后面的操作非常标准,与 oauth 本身无关。然后,客户端和服务器像往常一样进行通信 - 根本不交换 oauth 内容,您依靠 cookie(或等效项)来保持客户端-服务器身份验证。服务器继续使用身份验证令牌和刷新令牌与 Google 通信。
https://developers.google.com/identity/sign-in/web/server-side-flow https://developers.google.com/identity/sign-in/web/server-side-flow我认为这是目前最好的指南。或者至少这是我目前能找到的最好的。至少它有一个很好的图表。
关键点是您正在与服务器交换名称精美的“代码”(我称之为“一次性代码”)。完成此操作后,服务器会通过 Google 对您进行身份验证 - 然后它会获得访问/刷新令牌,您无需传递这些令牌即可与服务器进行通信。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)