![](/img/trans.png)
[英]Cloud Storage API doesn't work when deploy on Google Cloud Functions using Firebase
[英]Google Cloud Platform: Cloud Functions and Cloud Tasks doesn't work with authorized service account email
我创建了一个服务帐户电子邮件并将cloudfunctions.invoker
角色添加到电子邮件中,以便确保只有云任务可以触发云功能,并且我删除了AllUsers
角色。 但是当云任务尝试运行云函数时,状态码为UNAUTHENTICATED(16): HTTP status code 401
and execution failed。
我当前的代码和控制台是这样的。
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
角色添加到云函数时,它按预期工作,所以我确定我在限制访问时犯了一个错误。 我错过了什么?
更新:
我的云任务控制台
对我audience: new URL(url).origin,
从task
内部的oidcToken
对象中删除audience: new URL(url).origin,
解决了UNAUTHENTICATED(16): HTTP status code 401
问题。
const task = {
httpRequest: {
httpMethod: 'POST',
url,
oidcToken: {
serviceAccountEmail: email,
//audience: new URL(url).origin,
},
headers: {
'Content-Type': 'application/json',
},
body,
},
};
添加audience
对我有用。 这是我的任务对象的样子 -
const task = {
httpRequest: {
httpMethod: 'POST',
url,
headers: { 'Content-Type': 'application/json' },
oidcToken: {
serviceAccountEmail: sa,
audience: aud
},
},
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.