如何获取虚拟的Google访问令牌以测试OAuth Google API

63

有没有办法生成访问令牌来测试使用Gmail登录的oauth?

我已经创建了一个Google应用程序,并获取了客户端和秘密ID。

我知道Facebook允许您从此网址https://developers.facebook.com/tools/accesstoken/进行操作。

是否有类似Google的方法?

5个回答

36

使用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文档


74
在我看来这并没有帮助,因为你仍然无法编写程序生成代码。现在问题变成了“如何获得虚拟的Google授权码...”。Facebook提供创建测试用户的功能,并通过调用https://graph.facebook.com/v2.4/{app-id}/accounts/test-users使用您的应用令牌立即获取该用户的访问令牌。 - joelittlejohn
4
我会为 @joelittlejohn 的回答投赞成票。游乐场仍需要用户交互。 - Andrevinsky
2
最终,我通过保存浏览器 cookie 并将其附加到我的测试授权请求中来实现了这一点。它们可以持续很长时间。 - joelittlejohn
@joelittlejohn,你能在这里解释一下你的解决方案吗?https://stackoverflow.com/q/51962057/1356559 - Amr Lotfy
@joelittlejohn 你好 - user123456
我已经添加了一个阐述“cookie”的方法的答案。 - joelittlejohn

7
目前最好的解决方法是登录Google账户,捕获此会话的Google cookies,然后在测试中使用这些相同的cookies获取授权码。每次运行测试时,它都可以创建一个授权码并将其交换为访问令牌。我发现这些cookie可以持续6个月或更长时间。
我使用Chrome实现了以下操作:
  1. 打开Chrome的私人浏览会话
  2. 打开https://myaccount.google.com并使用您选择的Google凭据登录
  3. 打开Chrome Dev Tools(Ctrl-Shift-I),选择“Network”选项卡,并选择“保留日志”
  4. 进行OAuth登录流程以使用Google登录
  5. 在Chrome Dev Tools“Network”选项卡中,您将看到发送到https://accounts.google.com/o/oauth2/auth...的请求。复制此完整URL
  6. 选择此请求并选择Cookies选项卡。复制所有cookie。您应该有ACCOUNT_CHOOSERAPISIDCONSENTGAPS等cookie。
现在,在您的测试期间,您可以对上面捕获的URL进行HTTP GET请求,并在请求中包含上面捕获的cookies。您应该会收到一个302响应,在Location头中显示的URL中包含code=...
最后,在您的测试中,您可以使用POST交换此code以获取访问和刷新令牌,使用https://www.googleapis.com/oauth2/v4/token
Google OAuth playground在这里无法帮助我们,因为您仍然需要一些手动操作来生成授权代码(playground不是“自动化”的)。

1
不要忘记,您应该能够模拟Google OAuth。 换句话说,在大多数测试情况下(除了监控和某些类型的负载测试),应该可以模拟成功连接到Google OAuth和相应的回调。为了做到这一点,您可能只需要使用测试工具中已经存在的方法。
即使这个答案没有直接回答问题,我认为有必要在这里写下它,以便让一些人考虑这个解决方法,适用于大多数自动化测试情况。

1

你需要刷新令牌来编程获取访问令牌刷新令牌几乎不会过期:https://developers.google.com/identity/protocols/oauth2#5.-refresh-the-access-token,-if-necessary

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


刷新令牌何时过期?

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

  • 用户已删除您的Google应用程序。
  • 刷新令牌未使用超过六个月。
  • 用户更改了密码,而刷新令牌包含Gmail范围。 这意味着仅当他先前已授予管理其Gmail的权限,然后稍后更改了密码时,刷新令牌才会失效。 对于其他Google服务(如Youtube、日历等),更改密码不会使刷新令牌失效。
  • 应用程序为用户生成了50次以上的新刷新令牌。

如何获取刷新令牌 - 参见我的回答: https://dev59.com/nGMm5IYBdhLWcg3wX-LT#68844709


0

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

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

同样地,您可以像给普通测试用户一样为服务账户授予权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接