我正在尝试使用以下方式验证 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 后立即出现此错误。
我遇到了同样的问题,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
尝试
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
编辑:
似乎这个答案和来自@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
。
有一些解决方法,它们取决于您特定的 Windows 环境。
在这篇文章和这个中,您可以检查与在 WSL 中运行的 gcloud 最相关的问题。
在这里您可以找到一些可能有用的 Google 群组相关主题。
最后,您可以检查一些相关的 Windows 故障排除,它们可以帮助解决您自己环境中与 WSL2 相关的问题。
您可以使用另一种 gcloud 安装方法来完成此操作,不会出现错误:
curl https://sdk.cloud.google.com |重击
exec -l $SHELL #重新启动 shell
gcloud 初始化
添加此答案并不是为了 OP 本身,而是为了其他搜索“gcloud init 身份验证失败”和类似内容的人,此变体问题/解决方案可能会发生在任何平台上,而不仅仅是 WSL2。
就我而言,我有一个 URL 跟踪清理扩展(“ClearURLs”,但其他人也可以这样做),它正在咀嚼传递给浏览器的 URL
gcloud init
。因此,它会失败,并显示通用的“出了问题”错误页面,在内部它是一个 http 401 错误代码。
我曾尝试禁用 NoScript 甚至 uBlock Origin 都没有效果,直到我记得我安装了 CleanURLs。我停用了它,并能够完成身份验证。
我觉得大多数使用 NoScript 的人在解决此类问题时会考虑禁用它,但 URL 清理器更多的是背景知识,可能不会那么容易想到(而且它通常可以并且确实会传递 OAUTH2 url,只是这个绊倒了/没有例外)