尝试使用“gcloud init”进行身份验证时出错

问题描述 投票:0回答:6

我正在尝试使用以下方式验证 gcloud sdk:

gcloud init

我得到了一个应该访问的 URL,以便复制令牌并将其返回到 CLI...但我得到的不是令牌,而是此错误:

Erreur d'autorisation
Erreur 400 : invalid_request
Missing required parameter: redirect_uri

这是一个错误吗?

gcloud version
信息:

Google Cloud SDK 377.0.0
alpha 2022.03.10
beta 2022.03.10
bq 2.0.74
bundled-python3-unix 3.8.11
core 2022.03.10
gsutil 5.8

我在 wsl2 (Ubuntu 18.04) 上运行

gcloud init
。使用
sudo apt install google-cloud-sdk
安装 gcloud 后立即出现此错误。

google-cloud-platform oauth-2.0 gcloud windows-subsystem-for-linux wsl-2
6个回答
14
投票

我遇到了同样的问题,gcloud 稍微改变了他们的身份验证流程的工作方式。

运行

gcloud auth login
,然后将整个输出(不仅仅是 URL)复制到同时安装了 Web 浏览器和 gcloud CLI 的计算机上的终端。您应该复制的命令如下所示

gcloud auth login --remote-bootstrap="https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=****.apps.googleusercontent.com&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=****&access_type=offline&code_challenge=****&code_challenge_method=S256&token_usage=remote"

当您在具有网络浏览器的计算机上运行该程序时,它将打开一个浏览器窗口并提示您登录。在网络浏览器中授权您的应用程序后,您会在终端中看到一个新的 URL,如下所示

https://localhost:8085/?state=****&code=****&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&hd=****&prompt=consent

Enter the output of the above command:
之后,将此新 URL 粘贴回无头计算机的提示中(在您的情况下,这将位于您的 WSL2 终端中)。按 Enter 键即可得到输出

You are now logged in as [****].
Your current project is [None].  You can change this setting by running:
  $ gcloud config set project PROJECT_ID
[8]+  Done                    code_challenge_method=S256

4
投票

尝试

gcloud init --console-only

然后您将获得可以使用的网址。

You must log in to continue. Would you like to log in (Y/n)?  y                                                                                                                                                                                                                                                                                                                                                                                                                       
WARNING: The --[no-]launch-browser flags are deprecated and will be removed on June 7th 2022 (Release 389.0.0). Use --no-browser to replace --no-launch-browser.                                                                                                                                                                                                                                                                                                                      
Go to the following link in your browser:                                                                                                                                                                                                                                                                                                                                                                                                                                                 

https://accounts.google.com/o/o....

更新2022年6月20日。版本 389.0.0 中删除了选项

console-only
。 所以改用

gcloud init --no-browser

3
投票

编辑:

似乎这个答案来自@K.I.的答案给出了其他不依赖于实现细节的命令。我已经测试了这 3 个命令:

gcloud init --console-only

gcloud auth login --no-launch-browser

gcloud init --no-launch-browser

原始答案,另一种解决方法(17/07/2022):

DISPLAY=":0" gcloud auth login

此问题中提到的解决方法。它不会要求您在 WSL2 之外安装 gcloud CLI,而是假装有浏览器。

将打印一个链接,单击它,在浏览器上登录,然后您将通过 CLI 进行身份验证。

然后再次运行

gcloud init


2
投票

有一些解决方法,它们取决于您特定的 Windows 环境。

这篇文章这个中,您可以检查与在 WSL 中运行的 gcloud 最相关的问题。

在这里您可以找到一些可能有用的 Google 群组相关主题。

最后,您可以检查一些相关的 Windows 故障排除,它们可以帮助解决您自己环境中与 WSL2 相关的问题。


2
投票

您可以使用另一种 gcloud 安装方法来完成此操作,不会出现错误:

curl https://sdk.cloud.google.com |重击

exec -l $SHELL #重新启动 shell

gcloud 初始化


0
投票

添加此答案并不是为了 OP 本身,而是为了其他搜索“gcloud init 身份验证失败”和类似内容的人,此变体问题/解决方案可能会发生在任何平台上,而不仅仅是 WSL2。

就我而言,我有一个 URL 跟踪清理扩展(“ClearURLs”,但其他人也可以这样做),它正在咀嚼传递给浏览器的 URL

gcloud init
。因此,它会失败,并显示通用的“出了问题”错误页面,在内部它是一个 http 401 错误代码。

我曾尝试禁用 NoScript 甚至 uBlock Origin 都没有效果,直到我记得我安装了 CleanURLs。我停用了它,并能够完成身份验证。

我觉得大多数使用 NoScript 的人在解决此类问题时会考虑禁用它,但 URL 清理器更多的是背景知识,可能不会那么容易想到(而且它通常可以并且确实会传递 OAUTH2 url,只是这个绊倒了/没有例外)

© www.soinside.com 2019 - 2024. All rights reserved.