使用多个uris获取redirect_uri_mismatch错误

时间:2012-08-21 19:38:19

标签: curl oauth-2.0

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

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

然而,一切都很好,

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"

我刚改变了这个,有传播时间框架吗?我如何让两个uris工作?

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

如果您使用的是 Google+ javascript按钮,则必须使用postmessage而不是实际的URI。我花了差不多一整天才弄明白这一点,因为谷歌的文档由于某种原因并没有明确表现出来。

答案 2 :(得分:1)

应用可以有多个redirect_uri值。但是,需要在令牌请求中使用初始授权请求中使用的相同redirect_uri(用户被重定向)。在单个授权上更改uris将失败并显示该错误。