如何使用Curl CLI执行OAuth 2.0?

如何使用Curl CLI执行OAuth 2.0?,curl,oauth-2.0,google-cloud-platform,google-oauth,Curl,Oauth 2.0,Google Cloud Platform,Google Oauth,我想在Windows命令提示符下使用curl来执行GoogleOAuth2.0。我的目标是更好地理解OAuth服务器实现的身份验证流,参见HTTP头等等 如何在Windows命令提示符下使用curl.exe完成此操作 如何使用Curl CLI执行OAuth 2.0 此答案适用于Windows命令提示符用户,但也应易于适应Linux和Mac 您需要您的谷歌客户端ID和客户端密码。可以从Google控制台的API和服务->凭证下获取这些信息 在下面的示例中,范围是云平台。修改以使用要测试的作用域。以

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

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

如何使用Curl CLI执行OAuth 2.0

此答案适用于Windows命令提示符用户,但也应易于适应Linux和Mac

您需要您的谷歌
客户端ID
客户端密码
。可以从Google控制台的
API和服务
->
凭证
下获取这些信息

在下面的示例中,范围是
云平台
。修改以使用要测试的作用域。以下是一些可用于测试的作用域:

"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"

详细信息:

  • 将以下语句复制到Windows批处理文件中
  • 修改以适应您的环境
  • 修改要使用的浏览器的脚本
  • 运行批处理文件
  • 将启动浏览器
  • 浏览器将转到您可以完成Google OAuth 2.0身份验证的位置
  • 完成后,浏览器窗口中将显示一个代码
  • 从浏览器窗口复制此代码(control-c)并粘贴到命令提示窗口(control右键单击)
  • 该脚本将完成令牌的OAuth 2.0代码交换
  • 该令牌将显示在命令提示符中
  • 返回的令牌包含一个访问令牌,可以在更多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%
curl^
--数据客户端\u id=%client\u id%^
--数据客户端\u机密=%client\u secret%^
--数据代码=%AUTH\u代码%^
--数据重定向_uri=urn:ietf:wg:oauth:2.0:oob^
--数据授权\类型=授权\代码^
https://www.googleapis.com/oauth2/v4/token |jq-r“.access_token>token.save

set/p ACCESS_TOKEN=Request:你可以发布一个通过gmail发送带有OAuth2的cURL smtp邮件的示例吗?@Todd-创建一个新问题并让我知道链接。嗨,John,为了回答你向我提出的问题,我创建了