Curl 获取重定向uri与多个uri不匹配错误

Curl 获取重定向uri与多个uri不匹配错误,curl,oauth-2.0,Curl,Oauth 2.0,我正在尝试使用Google Oauth v2。我进入api控制台并设置以下2个重定向URI http://localhost:3000/auth/authenticate http://localhost:3000/auth/google/getToken 当我运行以下命令时 curl -d "code=<removed>&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fgoogle%2fgetToken&cl

我正在尝试使用Google Oauth v2。我进入api控制台并设置以下2个重定向URI

http://localhost:3000/auth/authenticate
http://localhost:3000/auth/google/getToken
当我运行以下命令时

curl -d "code=<removed>&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fgoogle%2fgetToken&client_id=<removed>&client_secret=<removed>&grant_type=authorization_code" -X POST https://accounts.google.com/o/oauth2/token

我刚改变了这个,有传播时间吗?如何使两个uri都工作?

一个应用程序可以有多个重定向uri值。但是,令牌请求中需要使用初始授权请求(其中用户被重定向)中使用的相同重定向uri。更改单个授权上的uri将失败,并出现该错误。

如第二次发送重定向uri时所述,您将其发送以进行验证(它们需要匹配),这不是任意值。在请求访问令牌时,您需要将redirect_uri的相同值传递给redirect_uri的值,在该值中,您请求用户在授权后重定向。否则google(或任何其他提供商将生成错误消息)。

以防万一,如果您使用的是google+javascript按钮,您必须将
postmessage
而不是实际的URI。我花了几乎一整天的时间才弄明白这一点,因为谷歌文档(Google docs)由于某些原因无法明确支持它。

在第二种情况下,您在最初的请求中使用了哪个uri?我想知道,这是否重要,它们必须是相同的吗?这似乎不合逻辑,因为我希望每个域都有一个不同的回调。这仍然没有意义,这意味着我必须有一些逻辑来判断是使用代码回调还是使用访问令牌回调,等等。如果域是相同的,我不明白为什么这是一个大问题。我同意你的答案可能是正确的(尽管我需要测试),但是,这似乎会在客户端导致不必要的逻辑(即确定我得到的响应类型)。另外,奇怪的是,它不会“返回”到重定向URL。这似乎只会让我头疼。谢谢你的回答!太神了谢谢,我不明白为什么这是糟糕的记录!
curl -d "code=<removed>&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fauthenticate&client_id=<removed>&client_secret=<removed>&grant_type=authorization_code" -X POST https://accounts.google.com/o/oauth2/token
"error" : "redirect_uri_mismatch"