如何使用 Curl CLI 执行 OAuth 2.0?

2024-04-28

我想在 Windows 命令提示符下使用curl 来执行Google OAuth 2.0。我的目标是更好地理解 OAuth 服务器实现的身份验证流程,查看 HTTP 标头等。

如何在 Windows 命令提示符下使用curl.exe 来完成此操作?


如何使用 Curl CLI 执行 OAuth 2.0?

这个答案适用于 Windows 命令提示符用户,但也应该可以轻松适应 Linux 和 Mac。

你需要你的谷歌Client ID and Client Secret。这些可以从 Google Console 下获取APIs & Services -> Credentials.

在以下示例中,范围是cloud-platform。修改以使用您想要测试的范围。以下是您可以测试的一些范围:

"https://www.googleapis.com/auth/cloud-platform"
"https://www.googleapis.com/auth/cloud-platform.read-only"
"https://www.googleapis.com/auth/devstorage.full_control"
"https://www.googleapis.com/auth/devstorage.read_write"
"https://www.googleapis.com/auth/devstorage.read_only"
"https://www.googleapis.com/auth/bigquery"
"https://www.googleapis.com/auth/datastore"

Google API 的 OAuth 2.0 范围 https://developers.google.com/identity/protocols/googlescopes

Details:

  • 将以下语句复制到 Windows 批处理文件中。
  • 修改以适应您的环境。
  • 修改您要使用的浏览器的脚本。
  • 运行批处理文件。
  • 将启动浏览器。
  • 浏览器将转到https://accounts.google.com https://accounts.google.com您可以在其中完成 Google OAuth 2.0 身份验证。
  • 完成后,代码将显示在浏览器窗口中。
  • 从浏览器窗口复制此代码 (control-c) 并将其粘贴到命令提示符窗口中 (control-右键单击)。
  • 该脚本将完成 Token 的 OAuth 2.0 代码交换。
  • 令牌将显示在命令提示符中。
  • 返回的Token包含一个Access Token,可以在更多curl命令中使用。

Windows 批处理脚本:

set CLIENT_ID=Replace_with_your_Client_ID
set CLIENT_SECRET=Replace_with_your_Client_Secret
set SCOPE=https://www.googleapis.com/auth/cloud-platform
set ENDPOINT=https://accounts.google.com/o/oauth2/v2/auth

set URL="%ENDPOINT%?client_id=%CLIENT_ID%&response_type=code&scope=%SCOPE%&access_type=offline&redirect_uri=urn:ietf:wg:oauth:2.0:oob"

@REM start iexplore %URL%
@REM start microsoft-edge:%URL%
start chrome %URL%

set /p AUTH_CODE="Enter Code displayed in browser: "

curl ^
--data client_id=%CLIENT_ID% ^
--data client_secret=%CLIENT_SECRET% ^
--data code=%AUTH_CODE% ^
--data redirect_uri=urn:ietf:wg:oauth:2.0:oob ^
--data grant_type=authorization_code ^
https://www.googleapis.com/oauth2/v4/token

最终输出如下所示:

{
  "access_token": "ya29.deleted_for_security_reasons",
  "expires_in": 3600,
  "refresh_token": "1/jk3/deleted_for_security_reasons",
  "scope": "https://www.googleapis.com/auth/cloud-platform",
  "token_type": "Bearer"
}

使用访问令牌的示例curl命令:

set ACCESS_TOKEN=replace_with_your_access_token
set PROJECT=development-123456
set ZONE=us-west-1a
set INSTANCE_NAME=dev-system

@REM - This endpoint will start the instance named INSTANCE_NAME in ZONE
set ENDPOINT=https://www.googleapis.com/compute/v1/projects/%PROJECT%/zones/%ZONE%/instances/%INSTANCE_NAM%/start

curl -H "Authorization: Bearer %ACCESS_TOKEN" "%ENDPOINT%"

提示:将访问令牌保存到文件中

修改批处理脚本的最后一行以使用jq处理输出:

curl ^
--data client_id=%CLIENT_ID% ^
--data client_secret=%CLIENT_SECRET% ^
--data code=%AUTH_CODE% ^
--data redirect_uri=urn:ietf:wg:oauth:2.0:oob ^
--data grant_type=authorization_code ^
https://www.googleapis.com/oauth2/v4/token | jq -r ".access_token > token.save

set /p ACCESS_TOKEN=<token.save
echo %ACCESS_TOKEN%

最后两行显示如何读取保存到文件中的访问令牌,以便在更多脚本中进一步使用。

请记住,令牌在默认值 60 分钟后过期。

我在我的博客上写了一篇文章详细介绍了这一点:

Google OAuth 2.0 – 使用 Curl 进行测试 https://www.jhanley.com/google-oauth-2-0-testing-with-curl/

[2020 年 3 月 18 日更新]

我写了一篇关于如何在 Powershell 中执行 OAuth 的文章。本文介绍如何执行 OAuth、保存和刷新令牌,然后模拟服务帐户。

PowerShell – 模拟 Google 服务帐户 https://www.jhanley.com/powershell-impersonate-google-service-account/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Curl CLI 执行 OAuth 2.0? 的相关文章

  • 为什么 Google Cloud Platform App Engine 上的“上次修改时间”不正确?

    我在 Google Cloud Platform App Engine 上多次部署了我的网络 使用设置如下 app yaml runtime nodejs10 当我在本地主机上测试它时 一切都工作正常 但是当我将它部署到谷歌云平台时 响应头
  • Facebook - Curl 错误 SSL_CACERT SSL 证书

    我正进入 状态 Curl 错误 SSL CACERT SSL 证书问题 无法获取本地颁发者证书 当要求 Facebook刮我的页面 https developers facebook com tools debug sharing 通过 h
  • Google Cloud:X-Cloud-Trace-Context 与应用程序日志traceId 不同

    我有一个部署在谷歌云中的 Spring Boot 应用程序 我面临一个相当奇怪的问题 X Cloud Trace Context 由谷歌设置 我想是负载均衡器 但应用程序级别日志的traceId具有不同的traceId 与我在邮递员的响应标
  • 使用存储的密钥作为环境变量

    我有一个秘密密钥存储在 GCP 的秘密管理器中 我们的想法是使用该密钥通过云功能获取预算列表 现在 我可以从代码中访问该密钥 但我面临的问题是我需要使用该密钥设置一个环境变量 这是我添加密钥的方式 如果您的本地目录中有该文件 但是还有其他方
  • Docker 在 Powershell 中登录 gcr.io

    我正在尝试使用 Windows 10 登录 Google 容器注册表JSON 密钥文件 https cloud google com container registry docs advanced authentication using
  • 通过执行本机操作系统的命令(例如curl)通过MySQL调用HTTP GET请求

    我使用的是在 32 位 Microsoft Windows XP 专业版 2002 Service Pack 3 上运行的 MySQL 5 6 11 我安装了MySQLsys exec https github com mysqludf l
  • 将 google 端点中的路径参数传递到后端不起作用

    我的设置包含 google endpoints 和 google cloud functions 作为我的后端 Google 端点是使用以下 swagger v2 yaml 定义的 swagger 2 0 info description
  • 无法删除 Google 管理的 SSL 证书

    我无法删除 Google 管理的 SSL 证书 当我删除它时 它又会回来 该证书不被任何其他服务使用 我可以删除其他证书 但它们不会再回来 我也有这个问题 我在文档中发现只有在以下情况下才能删除证书 仅当没有其他资源 例如目标 HTTPS
  • 使用 Docker-Compose 运行 Google Firestore 模拟器

    我正在尝试运行我的 Node 项目以及 Firestore 模拟器docker compose在本地开发环境中 我的 Node 项目有一个 Dockerfile 如下所示 WORKDIR app ADD package json RUN n
  • 使用默认的 ASP.Net MVC 设置,如何使用 Microsoft 帐户登录?

    为什么我不断收到 输入参数 redirect uri 提供的值无效 我的网站托管在 Azure 中 我正在尝试通过 Microsoft 登录按钮登录 我并没有对默认的 ASP Net MVC 开箱即用模板进行太多更改 我真正改变的只是取消注
  • 连接超时:Nodejs Google App Engine 到 Cloud MySql

    该代码非常基础 使用 mysql 的简单 Nodejs 应用程序 Error connect ETIMEDOUT当代码尝试连接到 Google App Engine 上的 Google Cloud MySql 服务器 第二代 时收到 但是应
  • 实施帐户链接 - 查询

    当我正在努力在我的 Google Actions 应用程序上实现帐户链接时 我向 Google 开发倡导者寻求帮助 他向我发送了一个我已经阅读过的文档文章的链接 并建议我也咨询 Stackoverflow 我也已经完成了第二个建议 并且努力
  • Google Cloud Functions 中的 Python

    Google Cloud Functions 可以使用 sklearn pandas 等包处理 python 吗 如果是这样 有人可以向我指出如何做到这一点的资源方向 我已经搜索了一段时间 似乎这是不可能的 我找到的只是将基本 python
  • Google Cloud Kubernetes 访问私有 Docker Hub 托管映像

    是否可以将私有镜像从 Docker Hub 拉取到 Google Cloud Kubernetes 集群 是否建议这样做 或者我是否需要将我的私有映像也推送到 Google Cloud 我阅读了文档 但没有发现任何内容可以清楚地解释这一点
  • Azure 应用程序错误地请求管理员同意?

    我希望有人对我在Microsoft的Azure Portal中使用新注册的应用程序遇到的问题有所了解 portal azure com https portal azure com 当我收到以下对话框时 我的登录问题 右下角出现错误代码和消
  • 如何使用 aws-cli 访问 Google Cloud Storage 存储桶

    我可以访问 aws 和 Google Cloud Platform 是否可以执行以下操作 使用 aws cli 列出 Google Cloud Storage 存储桶 使用 aws cli 将 CSV 文件放入 Google Cloud S
  • 获取第三方应用程序的谷歌云正常运行时间历史记录

    我正在尝试将我的应用程序 托管在谷歌云中 的正常运行时间历史记录转移到我自己的页面 谷歌云上有api吗 我只需要获取日期和上涨 下跌百分比或时间 我已经在谷歌控制台上配置了正常运行时间检查 但我需要将其集成到我的应用程序中 是的 您可以 但
  • 如何在 Google Translate Node.js 代码中设置 API KEY

    我正在尝试创建一个使用 Google Translate API 的 Node js 代码 我从以下代码中得到了谷歌文档 https cloud google com translate docs translating text 但是当我
  • AttributeError:模块“boto”没有属性“plugin”

    我正在 Google Cloud Platform 上使用带有 word2vec 模型的 Jupyter 笔记本运行虚拟机 我有以下代码片段 from gensim models import Word2Vec amazon word2ve
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清

随机推荐