Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 谷歌云平台:云功能和云任务;t使用授权服务帐户电子邮件_Firebase_Google Cloud Platform_Google Cloud Functions_Google Cloud Tasks - Fatal编程技术网

Firebase 谷歌云平台:云功能和云任务;t使用授权服务帐户电子邮件

Firebase 谷歌云平台:云功能和云任务;t使用授权服务帐户电子邮件,firebase,google-cloud-platform,google-cloud-functions,google-cloud-tasks,Firebase,Google Cloud Platform,Google Cloud Functions,Google Cloud Tasks,我创建了一个服务帐户电子邮件,并在电子邮件中添加了cloudfunctions.invoker角色,这样我就可以确保只有云任务可以触发云功能,并且我删除了alluser角色。但当云任务尝试运行云功能时,状态代码为未经身份验证(16):HTTP状态代码401,执行失败 我当前的代码和控制台是这样的 index.ts export const addTasks = functions.https.onCall((data, context) => { if (!context.auth)

我创建了一个服务帐户电子邮件,并在电子邮件中添加了
cloudfunctions.invoker
角色,这样我就可以确保只有云任务可以触发云功能,并且我删除了
alluser
角色。但当云任务尝试运行云功能时,状态代码为未经身份验证(16):HTTP状态代码401,执行失败

我当前的代码和控制台是这样的

index.ts

export const addTasks = functions.https.onCall((data, context) => {
  if (!context.auth) {
    throw new functions.https.HttpsError('failed-precondition', 'You are not authenticated.')
  }

  const client = new tasks.CloudTasksClient()

  const projectId = functions.config().project.id
  const queue = 'queue'
  const location = functions.config().project.location
  const parent = client.queuePath(projectId, location, queue)
  const url = `https://${location}-${projectId}.cloudfunctions.net/executeSomething`
  const serviceAccountEmail = functions.config().project.email

  const task: tasks.protos.google.cloud.tasks.v2.ITask = {
    httpRequest: {
      httpMethod: 'POST',
      url: url,
      oidcToken: {
        serviceAccountEmail: serviceAccountEmail,
      },
    },
    scheduleTime: {
      seconds: ...,
    },
  }

  const request: tasks.protos.google.cloud.tasks.v2.ICreateTaskRequest = {
    parent: parent,
    task: task,
  }

  return client.createTask(request)
}
我的云功能的控制台

我将云函数调用者角色添加到服务帐户电子邮件中

我的firebase项目环境变量

当我在云函数中添加了
AllUsers
角色时,它按预期工作,因此我确信我在重新启动访问时犯了一个错误。我错过了什么

更新:

我的云任务控制台


您的OIDC令牌似乎已损坏


只需提供电子邮件,不使用中所述的属性名称,或使用规范中所述的snake_大小写,您的OIDC令牌似乎已被破坏


只需提供电子邮件,不使用中所述的属性名称,或使用规范中所述的snake_大小写-653@myproject.iam.gserviceaccount.com并再次更新了我的环境变量和部署函数,但仍然失败。(我输入
test
并自动添加一个随机数)我认为问题不在于名称。我附上了一些照片。请看一看。401的意思是“您没有提供身份验证头”,这就是为什么我关注正确的服务帐户电子邮件定义。我更喜欢403“您已通过身份验证,但未经授权,或者令牌不可读/无效”。我坚信调用是在没有授权的情况下执行的。但我不知道为什么它继续失败。我尝试了
test-653@myproject.iam.gserviceaccount.com
并再次更新了我的环境变量和部署函数,但仍然失败。(我输入
test
并自动添加一个随机数)我认为问题不在于名称。我附上了一些照片。请看一看。401的意思是“您没有提供身份验证头”,这就是为什么我关注正确的服务帐户电子邮件定义。我更喜欢403“您已通过身份验证,但未经授权,或者令牌不可读/无效”。我坚信调用是在没有授权的情况下执行的。但我不知道为什么它会继续失败。这可能是一个很长的问题,但下面的答案中共享的示例有
serviceAccountEmail
。您是否可以尝试使用
“service\u account\u email”:service\u account\u email
并检查它是否解决了问题?您是否发现了什么不起作用?@Black\u Bacardi尚未..这可能是一个很长的问题,但下面的答案中共享的示例中有
service accountemail
的引号。您能否尝试使用
“service\u account\u email”:service\u account\u email
,并检查它是否解决了问题?您是否发现了什么不起作用?@Black\u Bacardi尚未。。