google-cloud-functions - 如何从 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_uri
javascript 客户端使用什么。
那么在这样的背景下,有没有人知道如何解决这个redirect_uri_mismatch
错误?
或者,更一般地说,关于实现此身份验证流程的任何指针(我的云函数是使用google nodejs sdk用 javascript 编写的)。我发现很难调试这个问题。
更新
我意识到错误消息之所以说redirect_uri_mismatch
是因为我一直在测试各种值作为redirect_uri
. 当我从请求中删除(可选)redirect_uri
参数时,来自谷歌服务器的响应是invalid_request: Missing parameter redirect_uri
. 所以谷歌明确表示它需要一个重定向 URI,即使文档似乎暗示这个身份验证流程不需要它。作为一个更大的问题,文档似乎没有描述如何为单页应用程序上的身份验证流设置重定向 URI。
解决方案
啊哈!答案(如this other SO answer中给出的)是在服务器上设置为redirect_uri
("postmessage"
在我的例子中是firebase函数)。我不知道这个答案来自哪里(即我无法在文档中找到它),但它有效。
推荐阅读
- odoo - 如何将发票的总价格转换为 odoo 11 中的字母?
- swift - 在 iPhone X 及更高版本的 UIScrollView 中没有 UIImage 的全屏
- planning - PDDL 中的变量可以是多于一种类型?
- c - 读者和作家——作家饥饿
- vue.js - 如何从 JSON 中获取数据?我的 v-for 循环不工作
- docker - Docker --ssh 标志 - 主机密钥验证失败
- python - 当我尝试将十进制数转换为二进制时,为什么我的代码会产生错误的输出?
- ruby-on-rails - 当外键可以引用两个不同列中的任何一个时,如何编写belongs_to关联?
- amazon-web-services - AWS SNS/SQS:如何为每个 SQS 订阅者准确发送一条 SNS 消息?
- r - 使用每日观察预测医院床位需求