【发布时间】:2014-10-28 17:07:57
【问题描述】:
有没有什么方法可以生成访问令牌来测试 oauth 以使用 gmail 登录?
我创建了一个谷歌应用程序,并获得了客户端和秘密 ID。
我知道 facebook 会允许你通过这个 url https://developers.facebook.com/tools/accesstoken/ 这样做
谷歌有这样的方法吗?
【问题讨论】:
标签: oauth google-api
有没有什么方法可以生成访问令牌来测试 oauth 以使用 gmail 登录?
我创建了一个谷歌应用程序,并获得了客户端和秘密 ID。
我知道 facebook 会允许你通过这个 url https://developers.facebook.com/tools/accesstoken/ 这样做
谷歌有这样的方法吗?
【问题讨论】:
标签: oauth google-api
您需要刷新令牌以编程方式获取访问令牌,刷新令牌几乎不会过期:@ 987654321@.
有关刷新令牌限制的更多信息 (https://usefulangle.com/post/51/google-refresh-token-common-questions):
刷新令牌不会过期,除非有一些特殊情况:
如何获得刷新令牌 - 看我的回答:https://stackoverflow.com/a/68844709/1046909
【讨论】:
如果您只想使用问题标题中所述的任何 oauth 令牌测试 API(不一定是从测试用户登录流程中获得的),那么您可以使用服务帐户和 oauth2l 实用程序进行 curl 调用在此处的 GCP 文档中进行了概述:
https://cloud.google.com/service-usage/docs/getting-started
同样,您可以向服务帐号授予与普通测试用户相同的权限。
【讨论】:
不要忘记您应该能够模拟 google OAuth。 换句话说,在大多数测试情况下(除了监控和某些类型的负载测试),应该可以模拟成功连接到 Google OAuth 和相应的回调。为此,您可能只需要使用您正在使用的测试工具中已经存在的方法。
即使这个答案没有直接回答主题,我认为有必要在这里写出来让一些人考虑这个变通方法,适应大多数自动化测试情况。
【讨论】:
目前解决此问题的最佳方法是登录 Google 帐户,捕获此会话的 Google cookie,然后使用这些相同的 cookie 在以后的测试中获取授权代码。每次测试运行时,它都可以创建一个授权代码并将其交换为访问令牌。我发现这些 cookie 可以保存 6 个月或更长时间。
我使用 Chrome 完成了以下操作:
https://accounts.google.com/o/oauth2/auth... 的请求。 复制此完整网址。ACCOUNT_CHOOSER、APISID、CONSENT、GAPS、...的cookies。现在,在您的测试期间,您可以对上面捕获的 URL 发出 HTTP GET 请求,并且在请求中您应该包含上面捕获的 cookie。您应该在 Location 标头中显示的 URL 中收到带有 code=... 的 302 响应。
最后,在您的测试中,您可以使用 POST 到 https://www.googleapis.com/oauth2/v4/token 将这个 code 交换为访问和刷新令牌。
Google OAuth 游乐场在这方面对我们没有帮助,因为您仍然需要一些手动交互来生成授权代码(游乐场不是“自动”的)。
【讨论】:
请求:
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
【讨论】: