首页 > 解决方案 > 如何从 Google Signin 调试服务器端“redirect_uri_mismatch”错误

问题描述

我正在尝试按照 Google 的服务器端应用程序的 Google Sign-In文档使用 Google Sign-In 和 firebase 功能,但是我遇到了redirect_uri_mismatch错误(与该文档中的示例不同,我使用的是Google 的 nodejs SDK)。

我遵循的一般流程是使用谷歌的 javascript SDK 向offlineAccessCode()用户请求,将该访问代码发送到服务器(firebase 函数),使用访问代码获取访问令牌和刷新令牌,并保存刷新令牌供以后使用(这是文档中概述的流程)。

该术语的含义似乎redirect_uri_mismatch是不言自明的,但是,如链接文档中所述,The Authorized redirect URI field does not require a value. Redirect URIs are not used with JavaScript APIs.该行来自“步骤 1:创建客户端 ID 和客户端密码”部分,并解释了如何配置 OAuth 客户端证书。这是文档中唯一一次提到重定向 URI,并且没有迹象表明当服务器使用授权代码获取访问令牌时需要重定向 URI。

实际上,重定向 uri 的概念在使用从客户端获取的访问代码的云功能的上下文中似乎没有意义。如果服务器需要提供匹配redirect_uri作为 javascript 客户端(似乎没有在任何地方指定),我不确定redirect_urijavascript 客户端使用什么。

那么在这样的背景下,有没有人知道如何解决这个redirect_uri_mismatch错误?

或者,更一般地说,关于实现此身份验证流程的任何指针(我的云函数是使用google nodejs sdk用 javascript 编写的)。我发现很难调试这个问题。

更新

我意识到错误消息之所以说redirect_uri_mismatch是因为我一直在测试各种值作为redirect_uri. 当我从请求中删除(可选)redirect_uri参数时,来自谷歌服务器的响应是invalid_request: Missing parameter redirect_uri. 所以谷歌明确表示它需要一个重定向 URI,即使文档似乎暗示这个身份验证流程不需要它。作为一个更大的问题,文档似乎没有描述如何为单页应用程序上的身份验证流设置重定向 URI。

标签: google-cloud-functionsgoogle-signingoogle-api-nodejs-client

解决方案


啊哈!答案(如this other SO answer中给出的)是在服务器上设置为redirect_uri"postmessage"在我的例子中是firebase函数)。我不知道这个答案来自哪里(即我无法在文档中找到它),但它有效。


推荐阅读