如何获取虚拟谷歌访问令牌来测试 oauth google api

Posted

技术标签:

【中文标题】如何获取虚拟谷歌访问令牌来测试 oauth google api【英文标题】:How to get dummy google access token to test oauth google api 【发布时间】:2014-10-28 17:07:57 【问题描述】:

有没有什么方法可以生成访问令牌来测试 oauth 以使用 gmail 登录?

我创建了一个谷歌应用程序,并获得了客户端和秘密 ID。

我知道 facebook 会允许你通过这个 url https://developers.facebook.com/tools/accesstoken/ 这样做

谷歌有这样的方法吗?

【问题讨论】:

【参考方案1】:

您需要刷新令牌以编程方式获取访问令牌刷新令牌几乎不会过期:@ 987654321@.

有关刷新令牌限制的更多信息 (https://usefulangle.com/post/51/google-refresh-token-common-questions):


刷新令牌何时过期?

刷新令牌不会过期,除非有一些特殊情况:

用户已删除您的 Google 应用程序。 刷新令牌已有六个月未使用。 用户更改了密码并且刷新令牌包含 Gmail 范围。 这意味着刷新令牌只有在他之前授予管理他的 Gmail 的权限,然后后来更改了他的密码时才会失效。 对于 Youtube、Calendar 等其他 Google 服务,更改密码不会使刷新令牌失效。 应用为用户生成新的刷新令牌超过 50 次。

如何获得刷新令牌 - 看我的回答:https://***.com/a/68844709/1046909

【讨论】:

【参考方案2】:

如果您只想使用问题标题中所述的任何 oauth 令牌测试 API(不一定是从测试用户登录流程中获得的),那么您可以使用服务帐户和 oauth2l 实用程序进行 curl 调用在此处的 GCP 文档中进行了概述:

https://cloud.google.com/service-usage/docs/getting-started

同样,您可以向服务帐号授予与普通测试用户相同的权限。

【讨论】:

【参考方案3】:

不要忘记您应该能够模拟 google OAuth。 换句话说,在大多数测试情况下(除了监控和某些类型的负载测试),应该可以模拟成功连接到 Google OAuth 和相应的回调。为此,您可能只需要使用您正在使用的测试工具中已经存在的方法。

即使这个答案没有直接回答主题,我认为有必要在这里写出来让一些人考虑这个变通方法,适应大多数自动化测试情况。

【讨论】:

【参考方案4】:

目前解决此问题的最佳方法是登录 Google 帐户,捕获此会话的 Google cookie,然后使用这些相同的 cookie 在以后的测试中获取授权代码。每次测试运行时,它都可以创建一个授权代码并将其交换为访问令牌。我发现这些 cookie 可以保存 6 个月或更长时间。

我使用 Chrome 完成了以下操作:

    打开 Chrome 私人浏览会话 打开 https://myaccount.google.com 并使用您选择的 Google 凭据登录 打开 Chrome 开发工具 (Ctrl-Shift-I)、网络选项卡,然后选择“保留日志” 执行 OAuth 登录流程以使用 Google 登录 在 Chrome 开发工具的“网络”选项卡中,您将看到发送至 https://accounts.google.com/o/oauth2/auth... 的请求。 复制此完整网址。 选择此请求并选择 Cookie 选项卡。 复制所有 cookie。你应该有ACCOUNT_CHOOSERAPISIDCONSENTGAPS、...的cookies。

现在,在您的测试期间,您可以对上面捕获的 URL 发出 HTTP GET 请求,并且在请求中您应该包含上面捕获的 cookie。您应该在 Location 标头中显示的 URL 中收到带有 code=... 的 302 响应。

最后,在您的测试中,您可以使用 POST 到 https://www.googleapis.com/oauth2/v4/token 将这个 code 交换为访问和刷新令牌。

Google OAuth 游乐场在这方面对我们没有帮助,因为您仍然需要一些手动交互来生成授权代码(游乐场不是“自动”的)。

【讨论】:

【参考方案5】:

使用Google OAuth playground:

请求:

POST /oauth2/v3/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=8819981768.apps.googleusercontent.com&
client_secret=client_secret&
redirect_uri=https://oauth2-login-demo.appspot.com/code&
grant_type=authorization_code

(成功)响应:


  "access_token":"1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in":3920,
  "token_type":"Bearer"

我也强烈推荐阅读Google OAuth 2.0 documentation

【讨论】:

这对 IMO 没有帮助,您只是遇到了同样的问题,因为您无法以编程方式生成代码。现在问题变成了“如何获得一个虚拟的谷歌授权码......”。 Facebook 提供了创建测试用户的功能,并通过使用您的应用令牌调用 graph.facebook.com/v2.4app-id/accounts/test-users 立即为该用户获取访问令牌。 我只是投票支持@joelittlejohn 的答案。 Playground 仍然需要用户交互。 最后我通过保存浏览器cookie并将它们附加到我的测试中的授权请求来实现这一点。它们会持续很长时间。 @joelittlejohn 你能在这里解释更多关于你的解决方案吗***.com/q/51962057/1356559 @joelittlejohn 嗨

以上是关于如何获取虚拟谷歌访问令牌来测试 oauth google api的主要内容,如果未能解决你的问题,请参考以下文章

如何使用谷歌访问令牌获取用户信息

如何在 Gatling 负载测试中为多个虚拟用户使用单个 OAuth2.0 令牌

如何使用访问令牌获取 Google 日历事件

无法在跨客户端谷歌 oauth2.0 中交换访问令牌和刷新令牌的授权码

如果 oauth 是无状态的,谷歌如何销毁 oauth 令牌?

Google 帐户访问令牌