尝试从Java (Kotlin)创建Google Cloud Task时出现未经验证的错误



我们正在尝试在我们的Kotlin代码中创建一个google云任务(Java中同样的错误)。在本地运行时,代码完全按照预期工作。一旦我们部署到Kubernetes上的DEV实例,我们在尝试创建任务时收到以下错误:

UNAUTHENTICATED:请求具有无效的身份验证凭据。期望的OAuth 2访问令牌、登录cookie或其他有效的身份验证凭据

我们的代码如下,并模仿了Google Docs 中提供的代码代码如下:

fun createTask(filename: String?) {
val locationId = "us-central1"
CloudTasksClient.create().use { client ->
val queuePath = QueueName.of(projectId, locationId, queueName).toString()
val oidcTokenBuilder =
OidcToken.newBuilder().setServiceAccountEmail(serviceAccount).build()
val taskBuilder = Task.newBuilder()
.setHttpRequest(
HttpRequest.newBuilder()
.setBody(
ByteString.copyFrom(
filename,
Charset.defaultCharset()
)
)
.setHttpMethod(HttpMethod.POST)
.setOidcToken(oidcTokenBuilder)
.setUrl(url)
.build()
)
client.createTask(queuePath, taskBuilder.build())
}
}

我们的服务帐户似乎有正确的凭据,我们已经尝试只是硬编码它,而不是使用它作为一个变量,但没有运气一旦部署。如前所述,这段代码在我们的本地环境中运行良好,使用与它部署时相同的服务帐户。

编辑:HttpRequest来自com.google.cloud.tasks。v2图书馆。

在我的例子中,当我试图对不支持该身份验证方法的服务使用OIDC令牌时,我得到了这个错误。使用OAuth令牌对我来说很有效。

fun createTask(filename: String?) {
val locationId = "us-central1"
CloudTasksClient.create().use { client ->
val queuePath = QueueName.of(projectId, locationId, queueName).toString()
val tokenBuilder =
OAuthToken.newBuilder().setServiceAccountEmail(serviceAccount).build()
val taskBuilder = Task.newBuilder()
.setHttpRequest(
HttpRequest.newBuilder()
.setBody(
ByteString.copyFrom(
filename,
Charset.defaultCharset()
)
)
.setHttpMethod(HttpMethod.POST)
.setOAuthToken(tokenBuilder)
.setUrl(url)
.build()
)
client.createTask(queuePath, taskBuilder.build())
}
}

最新更新