根据文档,我们可以添加appcheck如下:
exports.yourCallableFunction = functions.https.onCall((data, context) => {
// context.app will be undefined if the request doesn't include a valid
// App Check token.
if (context.app == undefined) {
throw new functions.https.HttpsError(
'failed-precondition',
'The function must be called from an App Check verified app.')
}
});
我现在的问题是,我需要如何添加应用程序检查下面的场景?
exports.date = functions.https.onRequest((req, res) => {
});
5条答案
按热度按时间igsr9ssn1#
在客户端中,从Firebase获取appCheck令牌。将其在头文件中发送到您的函数。从req对象的头文件中获取令牌。使用firebase-admin验证令牌。我将在下面包括客户端的文档,然后是我如何使用Apollo-client graphql实现客户端的要点。然后我将包括后端的文档,然后是我如何实现后端的要点,又是阿波罗。
客户端(来自文档):
客户端(我的实现要点)
后端/服务器(来自文档)
后端/服务器(我的实现要点)
vsnjm48y2#
如果你是enforce app check in Cloud Functions,它将只允许来自在你的项目中注册的应用程序的调用。
我不确定这是否足以满足您的用例,因为我怀疑大多数可以提供Web钩子的应用程序都将实现应用程序认证-这就是App Check识别有效请求的方式。
km0tfn4u3#
您可以在客户端生成应用检查令牌,并使用firebase admin SDK在服务器中验证令牌。Here是相同的firebase文档
h79rfbju4#
Firebase启用应用程序检查强制执行文档教您,要从您的函数验证调用者,您只需检查context.app,然后给您一个这样的示例
https://firebase.google.com/docs/app-check/cloud-functions?authuser=0
但是当你在google cloud dashboard中部署你的函数时,你选择HTTPFUNCTION-〉nodejs 14 -〉,然后你被引导到这样的代码
当我看到这个的时候,我的问题是:“如果我只有请求/响应,我将如何获得上下文?”
答案很简单:您必须切换构造器
你必须重写你的函数,而不是像其他express函数那样处理req/res,你要处理上下文/数据
HTTP函数与可调用函数不同(处理上下文/数据的函数)
这是相似的,但不完全相同,一些修改将是必要的。
主要是如果你的函数处理异步的东西并且有延迟的响应,你将需要重写很多东西
查看本教程https://firebase.google.com/docs/functions/callable
inb24sb25#
客户端
1.部署完函数后,在客户端设置函数URL。
1.在客户端中设置AppCheck令牌。
示例可以在文档中找到,下面是Flutter的示例:
服务器
部署函数时,控制台将打印结果函数URL。在客户端代码中使用此URL。
1.设置Cors以启用所有传入呼叫(取决于您的项目)。
1.验证传入的AppCheck-Token。
1.根据验证结果,返回401或正常处理请求。