当前位置: 首页 > 知识库问答 >
问题:

为什么这个CORS认证的Google Cloud函数在从Firebase认证传递id令牌时返回一个403?

田远
2023-03-14

然后通过angular httpclient调用对endpoint进行调用:

const url = 'https://[MY-PROJECT-SUBDOMAIN].cloudfunctions.net/hello_get/';
this.auth.user.getIdToken().then(token => {
    const httpOptions = {
        headers: new HttpHeaders({
            'Authorization': `Bearer ${token}`
        })
    };
    this.http.get(url, httpOptions).subscribe(response => {
        console.log(response);
    }, error => {
        console.error(error);
    });
});

对选项预飞行请求的回应是403,这让我以为谷歌拒绝了我的ID令牌。我在hello_get函数中添加了一个函数日志。似乎函数甚至没有被调用,因为当返回403响应时,这个日志从来没有出现过。

当“cloud Functions Invoker”的函数权限设置为allUsers时,cloud函数通过CORS可以正常工作,但一旦我删除该权限并添加allAuthenticatedUsers的权限,并尝试在cloud函数中传递带有access-control-allow-credentials':'true'的令牌,就会返回一个403。

共有1个答案

冷翼
2023-03-14

当使用带有Google Cloud功能的Firebase身份验证时,用户不会通过IAM角色进行身份验证。而是在函数本身内对它们进行身份验证。注意,根据Google的文档,“您将为未经验证的请求计费,因为函数必须完成验证令牌的工作。”要进行此设置:

(1)函数上“Cloud Functions Invoker”的IAM权限需要对所有用户开放(而不是我拥有的allAuthenticatedUsers)。

(2)然后使用firebase_admin的身份验证库(docs,for reference和其他语言)手动完成令牌验证,如下所示:

from firebase_admin import auth

def your_function(request):
    decoded_token = auth.verify_id_token(id_token)
    uid = decoded_token['uid']
 类似资料:
  • 我建立了一个web平台,允许用户用一个用户帐户注册多个web应用程序。每个应用程序都有自己独立的firebase数据库。是否可以使用firebase身份验证并在不同的firebase数据库之间共享相同的身份验证?我的意思是通过一个用户库单点登录到多个firebase数据库。

  • 最后,我实现了UserDetailsService接口

  • 我在构建递归函数时继续遇到一个问题,其中返回的值与我期望返回的值不同。我很确定这与函数的递归性质有关,但我不知道发生了什么。 在这个缩小的例子中,我有一个带有字符串的函数foo和一个默认值为0的int。给定字符串“测试”并且没有整数,我希望递归函数为每个调用增加numberToBack并将新值传递给下一个调用。这一定是部分正确的,因为如果我在到达基本情况时cout numberToBack,我将获

  • 我有几个azure函数,我想设置一个基于令牌的身份验证(使用承载令牌)。我想确保没有在HTTP头中传递承载令牌的用户不能访问azure函数。我正在使用可视代码/蔚蓝云。如有任何帮助或指导,将不胜感激。我有一种方法可以使用客户端id、secret和租户id来获得承载令牌,但是如何使其成为azure函数的必填字段呢?

  • [错误]COM的父POM不可解析。示例:DynamoWork:0.0.1-快照:无法传输项目org.springframework.boot:spring-boot-starter-parent:POM:2.1.0。从/到项目发布(https://repo.maven.apache.org/maven2/):sun.security.validator.validatorexception:PKI

  • 很抱歉问了一个关于已经讨论过很多次的论点的非常基本的问题,我就是想不出答案。我试着在论坛上搜索已经在主题上提出的问题,但没有找到确切的答案(或者不理解)。 当以不同顺序调用时,为什么此函数会打印两次从i到10的数字?它不应该按同样的顺序打印出来吗?我一直听说递归就是这样工作的:每个函数在其代码中调用另一个相同的函数,只应用于较小的域,直到满足结束条件为止。此时,它应该返回(回溯)到原始函数;这就是