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

2024-01-07

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

我能够对用户进行身份验证,并作为响应收到令牌。然而,令牌将在 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 (我的权限之一是授予离线访问权限)


所以是的,我很想知道:

  • 如何延长使用寿命access_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(使用前将#替换为@)

如何让Google登录令牌的有效期超过1小时? 的相关文章

随机推荐

  • Angular2 如何在 HTML5 模板中显示 localStorage 值?

    我在 localStorage 中存储 2 个密钥 我想在我的模板中显示其中之一 我无法访问这些值 我什至创建了一个接口来存储 localStorage 中的 currentUser 键的值 应该如何实施呢 这是当前的代码 Service
  • stl::list 中的 C++ 接口

    课程界面 class ILesson public virtual void PrintLessonName 0 virtual ILesson STL容器 typedef list
  • MemoryCache.Set 返回删除的缓存项

    我正在使用 NET 4 0MemoryCache http msdn microsoft com en us library dd780634 28v vs 100 29 aspx类 并且我想以线程安全的方式添加或替换缓存中的现有项目 但我
  • golang 在 ubuntu 14.04 LTS 中获取大量读取 tcp ip:port i/o 超时

    我编写了一个 golang 程序 过去几个月在 ubuntu 12 04 LTS 中运行良好 直到我将其升级到 14 04 LTS 我的程序专注于发送 HTTP 请求 每秒发送大约 2 10 个 HTTP 请求 HTTP 请求地址各不相同
  • python 如何关闭已被 gc'ed 的文件?

    我一直认为如果在未关闭的情况下打开文件就会泄漏 但我刚刚验证了如果输入以下代码行 文件将关闭 gt gt gt f open somefile txt gt gt gt del f 纯粹出于好奇 这是如何工作的 我注意到该文件不包含 del
  • jQuery 调整窗口大小

    我有以下 JQuery 代码 document ready function var containerHeight window height if containerHeight lt 818 footer css position s
  • Django:如何更改内联表单集中的字段小部件

    我是 Django 新手 我想我在文档中遗漏了这一点 问题是在内联表单集中我没有声明表单 只是传递两个模型来构造它 我想知道如何使用内联表单集更改单个字段的小部件 从 Django 1 6 开始 https docs djangoproje
  • 更改内容 infowindow 地图 v3

    我试图使更改 DIV 内显示的内容 即信息窗口的内容 成为可能 我已经能够将信息窗口内的内容从 Hello 更改为 YO 问题是当我关闭信息窗口并重新打开它时 更新的内容会恢复为原始内容 下面是我的代码 google maps event
  • Javascript / jQuery:如何动态添加行到表体(使用数组)

    我是 Javascript 新手 希望有人能帮助我解决这个问题 我有一个 HTML 页面 上面有一个表格 我想使用JS动态添加特定内容的行到表体 到目前为止 我有下面的代码 这里被缩短了 实际上有更多的行和列等 这导致了我以下问题 当我运行
  • Django日期查询从最新到最旧

    我正在从头开始构建我的第一个 Django 程序 并且在尝试将项目从最新到最旧打印到屏幕上时遇到了麻烦 我的模型在数据库中填充了一个自动日期时间字段 如下所示 Model from django db import models from
  • 使用 bash 连接两个文件的最简单方法,它们的两个键都出现在结果中

    我有 2 个输入文件 file1 A 0 01 B 0 09 D 0 05 F 0 08 file2 A 0 03 C 0 01 D 0 04 E 0 09 我想要的输出是 A 0 01 0 03 B 0 09 NULL C NULL 0
  • 使用 Android 资源字符串时出现错误的是/否文本

    我正在 Android 的 Mono 中构建一个对话框 如下所示 AlertDialog Builder builder new AlertDialog Builder Context builder SetTitle Context Ge
  • 使用curl登录https站点

    我正在尝试登录一个网站 该网站使用自动提交和随机密钥来提交表单 我尝试了几种方法但无法通过 所以这是我的代码 任何答案将不胜感激 提前致谢 我的假帐户通行证和用户名也可以在代码中提供给那些想要尝试的人 我的网址有点长 include sim
  • 是什么使得 SQL 语句可控制?

    根据定义 至少从我所看到的 可优化意味着查询能够让查询引擎优化查询使用的执行计划 我尝试查找答案 但似乎没有太多关于该主题的内容 所以问题是 什么使 SQL 查询可控制 任何文档将不胜感激 以供参考 Sargable http en wik
  • Python argparse:-o 和 --option 之间的区别

    我正在尝试理解argparse包 我真的找不到这个非常简单的问题的答案 有什么区别 a and argument添加参数时 有时 我发现两者合二为一add argument 像这儿 parser add argument f file he
  • Android 中构建指纹:'samsung/GT-P7500/GT-P7500:3.2/HTJ85B/XWKL1:user/release-keys' 错误

    我正在开发一个棒球应用程序 在 Htc Incredible 三星 7 英寸设备上运行良好 但仅在三星 10 英寸设备上玩 3 次后就崩溃了 我得到的错误是 04 18 11 22 34 610 I DEBUG 237 Build fing
  • 使用 BooleanQuery 还是编写更多索引?

    像这样的类别树 root 1 sub 1 sub 2 to sub 20 每个文档都有一个子类别 例如sub 2 现在我只写了sub 2在lucene索引中 new NumericField category setIntValue sub
  • Rust 中枚举与结构类型名称如何工作?

    我刚刚开始学习 Rust 注意到以下代码有效 即使枚举内的各种选项似乎传播到枚举外部 从而与结构位于同一名称空间中 enum FooBar Foo int Bar uint struct Foo foo int struct Bar bar
  • Spring 无法返回带有 null 键的 JSON 响应

    下面是我写的代码 RequestMapping value getData method RequestMethod GET public ResponseBody Map
  • 如何让Google登录令牌的有效期超过1小时?

    我已经成功实现了谷歌登录 我能够对用户进行身份验证 并作为响应收到令牌 然而 令牌将在 1 小时后过期 expires in 3600 我尝试在文档中搜索 https developers google com identity sign