我正在尝试使用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工作?
答案 0 :(得分:8)
正如所描述的here第二次发送redirect_uri时,你发送它进行验证(它们需要匹配),这不是一个任意值。在请求访问令牌时,您需要为redirect_uri传递相同的值,其值为redirect_uri,您要求在授权后重定向用户。否则谷歌(或任何其他提供商将生成错误消息)。
答案 1 :(得分:2)
如果您使用的是 Google+ javascript按钮,则必须使用postmessage
而不是实际的URI。我花了差不多一整天才弄明白这一点,因为谷歌的文档由于某种原因并没有明确表现出来。
答案 2 :(得分:1)
应用可以有多个redirect_uri值。但是,需要在令牌请求中使用初始授权请求中使用的相同redirect_uri(用户被重定向)。在单个授权上更改uris将失败并显示该错误。