如何使用 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? 的相关文章

  • 无法加载 php_curl

    我已经在WindowsXp上安装了php5 2 13 apache2 2 15 将C php添加到PATH ssystem变量中 我无法启用卷曲扩展 我配置了extension dir并删除了 在 php ini 中形成 php curl
  • Elasticsearch:如何查询连接数?

    如何询问我的 Elasticsearch 服务器现在有多少个连接 这与插座数量相同吗 我也不知道如何获得这些数字 这与客户端的数量不同 对吧 因为每个客户端可能打开多个连接 找不到任何相关信息 但我确实发现您可以在 Elasticsearc
  • 从 Dataflow 中的 BigQuery 读取时设置 MaximumBillingTier

    当我从 BigQuery 读取数据作为查询结果时 我正在运行 GCP Dataflow 作业 我正在使用 google cloud dataflow java sdk all 版本 1 9 0 设置管道的代码片段如下所示 PCollecti
  • pip:证书失败,但curl 有效

    我们在客户端安装了根证书 https 连接适用于curl 但如果我们尝试使用pip 它失败 Could not fetch URL https installserver 40443 pypi simple pep8 There was a
  • 签名 URL 在过期日期后仍然有效

    我创建了一个签名 URL 有效期为 2 天 尽管过期 但它仍然有效 我希望它给出一些错误 3XX 4XX 测试脚本 https gist githubusercontent com forvaidya 984003008b0603ca679
  • kubernetes nginx ingress 无法将 HTTP 重定向到 HTTPS

    我有一个托管在 Google Cloud 平台中的网络应用程序 该应用程序位于负载均衡器后面 而负载均衡器本身位于入口后面 入口设置了 SSL 证书 并按预期接受 HTTPS 连接 但有一个问题 我无法让它将非 HTTPS 连接重定向到 H
  • 函数 isAssignableFrom 在服务器启动期间返回 false

    实施oauth2系统 我在使用以下代码时遇到一些问题 import org springframework security oauth2 provider endpoint FrameworkEndpointHandlerMapping
  • 如何使用 cURL(或任何命令行工具)通过 OAuth 身份验证将 HTTP Post 发送到 Twitter?

    我希望使用命令行应用程序 例如cURL http en wikipedia org wiki CURL cURL 在我的测试 Twitter 帐户上发布一些测试帖子 我也希望通过 OAuth 身份验证来做到这一点 我怎样才能做到这一点 假设
  • 在同一事务上读取和修改 - Bigtable

    我正在构建一个优惠券系统 并且正在使用 Bigtable 我的架构有两列 客户 ID 和优惠券代码 我想查询表以检查客户是否已存在 如果为真 则返回代码 如果为假 则使用 ID 修改客户 ID 单元格并返回代码 我看到 Bigtable 中
  • 如何使用 ASP.Net Core Identity 从登录用户检索 Google 个人资料图片?

    好的 我目前正在使用 ASP NET Core 1 1 2 和 ASP NET Core Identity 1 1 2 其中重要的部分是启动 cs看起来像这样 public void Configure IApplicationBuilde
  • OAuth 2.0:优点和用例 - 为什么?

    谁能解释一下 OAuth2 的优点以及为什么我们应该实施它 我问这个问题是因为我对此有点困惑 这是我目前的想法 OAuth1 更准确地说是 HMAC 请求看起来合乎逻辑 易于理解 易于开发并且非常非常安全 相反 OAuth2 带来了授权请求
  • 找不到 CURL NSS 客户端证书 myCert

    我正在尝试使用curl 访问https 地址 将我的证书传递给它并使用我自己的信任库 我们有自己的CA 验证服务器的证书 我现在以 root 身份运行 curl v cert home cdfoote myCertificate pem m
  • 致命错误:未捕获错误:调用未定义的函数curl_version() - Localhost Dev

    我正在尝试将 stripe 集成到我的 PHP 项目中 但在 localhost 上出现此错误 Fatal error Uncaught Error Call to undefined function curl version in 我正
  • gRPC(HTTP/2) 比使用 HTTP/2 的 REST 更快吗?

    目标是引入一种性能更好的传输和应用层协议latency and 网络吞吐量 目前 该应用程序使用REST with HTTP 1 1并且我们遇到了很高的延迟 我需要解决这个延迟问题并且我愿意使用gRPC HTTP 2 or 休息 HTTP2
  • 我是否需要在我的 Firebase 项目中添加 SHA-1 指纹?

    在 Firebase 上有一个弹出窗口 显示我的项目可以添加指纹 SHA1 因为我只想使用一些 Firebase 服务 例如实时数据库 身份验证 我需要在我的项目中添加指纹吗 该图显示 仅在使用某些 Google Play 服务 如 OAu
  • Oauth 2:为什么刷新令牌必须是有状态的?

    我正在开发一个基于 Node 的 SPA 应用程序 并使用 JWT 进行基于令牌的身份验证 目前 jwt 令牌永远不会过期 这不太好 我希望它过期以提高安全性 但我不希望我的用户被迫重新登录 这就是为什么我需要刷新令牌 所以我正在阅读有关
  • 在 cURL 命令和 postman 中的 Firebase Cloud Messaging 中获取无效令牌

    伙计们 我正在尝试获取有关应用程序实例的信息 并且我还尝试将应用程序实例订阅到 Google Cloud Messaging 主题 但问题是每当我尝试使用server key它给我带来了错误invalid token当我尝试使用web ap
  • 从 BitBucket 请求 OAuth 令牌

    在过去的 4 个小时里 我一直在尝试将 BitBucket 集成到我的应用程序中 但没有成功 在阅读的过程中BitBucket 的 RESTful API 文档 https confluence atlassian com display
  • Google云平台项目限制

    我可以在 Google Cloud Platform 帐户上创建的项目有限制吗 我将为同一客户托管多个应用程序 我的想法是每个应用程序一个项目 这是一个好主意吗 或者最好将所有应用程序拆分为前端和后端两个项目 您可以创建的项目数量有配额 2
  • Salesforce 返回“unsupported_grant_type”

    我们使用 Web 服务器身份验证流程实现了 OAuth 2 0 十月 十一月时运行良好 但突然停止运行 每当我们尝试授权另一个客户端时 服务器都会返回 400 Bad Request 和正文 error unsupported grant

随机推荐