微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

验证*来自* Firebase 云函数到自定义节点服务器

如何解决验证*来自* Firebase 云函数到自定义节点服务器

我在验证来自 Firebase Cloud Functions 到自定义节点服务器时遇到问题。

背景:

我使用自定义节点 + 快速服务器来接收来自我们网站的经过身份验证的客户端的调用。我可以使用这样的方法成功验证他们的令牌:

const bearerHeader = req.headers['authorization'];
const bearerToken = bearerHeader.split(' ')[1];
await admin.auth().verifyIdToken( bearerToken );

我现在需要什么:

我需要从 Cloud Function(而不是经过身份验证的 Web 客户端)调用此端点之一。

所以,在我调用云函数上:

const admin = require('firebase-admin');
      admin.initializeApp();  // regular initialization
const token = await admin.app().options.credential?.getAccesstoken();
const config = { headers: { Authorization: `Bearer ${token.id_token}` } };
await axios.post(url,body,config);

问题:

token.id_token 中缺少 getAccesstoken() 字段:

// token:
{
  access_token: 'ya29. ... ... ',expires_in: 3599,token_type: 'Bearer'
}

当使用其他凭据在本地运行时(例如,我在运行 firebase functions:shell 时的用户凭据,或将 GOOGLE_APPLICATION_CREDENTIALS 设置为服务帐户凭据文件时)时,我确实获得了一个额外的属性 id_token我可以用来进行身份验证。但是在 Cloud Function 上部署和运行时,id_token 属性为空。

有什么想法吗?

提前致谢。

PS:一个额外的问题......使用服务帐户的本地测试确实包括id_token,但是当对服务器进行身份验证时getAccesstoken()失败:

Firebase ID token has incorrect "aud" (audience) claim. Expected "<project-id>" but got "<some-hash>.apps.googleusercontent.com".

也许这两个问题的解决方法相同。但是服务器确实可以正常工作以验证来自网站的用户令牌。

编辑:

我不得不将 access_token 换成 id_token,为此我遵循了类似于 this内容projectId 作为受众。 现在的问题是关于发行者 (iss) 而不是受众 (aud):

Firebase ID token has incorrect "iss" (issuer) claim. Expected "https://securetoken.google.com/<project id>" but got "https://accounts.google.com".

我想我可以使用相同的库来验证服务器上的令牌,但是我的网络客户端会遇到相同的颁发者问题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?