【发布时间】:2020-05-28 15:35:49
【问题描述】:
问题陈述:
我想在 google pub/sub(使用 org.apache.http.client.methods.HttpPost)中使用基于 REST 的请求来发布和订阅消息,这里我有以下将数据发布到 pub/ 的请求子主题(https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions/pull)
POST https://pubsub.googleapis.com/v1/projects/[project_name]/topics/[topic_id]?key=[YOUR_API_KEY] HTTP/1.1
Authorization: Bearer [YOUR_ACCESS_TOKEN]
Accept: application/json
Content-Type: application/json
这里代替 [YOUR_API_KEY] 我把 api 密钥从 https://console.cloud.google.com/apis/credentials 将响应视为未经授权
{
"error": {
"code": 403,
"message": "User not authorized to perform this action.",
"status": "PERMISSION_DENIED"
}
}
如果我添加从以下命令获取的访问令牌
gcloud auth application-default print-access-token
令牌仅在 60 分钟的有限时间内有效。 因此,我必须每小时创建一个 access_token。
由于这是一个服务器到服务器的请求,我希望请求被授权更长时间,直到没有任何外部干扰。
任何人都可以建议或指出任何错误。提前谢谢你
【问题讨论】:
-
Pub/Sub 不支持 API 密钥进行授权。您是否尝试授权 Pub/Sub 调用您的服务(HTTP 端点)?你的问题不清楚。
print-access-token用于测试而非实际使用。通常,您将 Pub/Sub 用于基于身份的授权的服务帐户作为 HTTPAuthorization标头分配给被调用的端点。编辑您的问题以阐明您的配置。 -
谢谢@John,我正在尝试将消息推送到某个主题。在这里,我有一个服务帐户。但是我必须使用基于休息的 api 来发布消息,因为我必须检查服务器状态然后拉出最佳号码。用于发布的消息。如果只提供了 api 密钥,这里的请求会以 403 响应。是不是我必须使用创建的 api 密钥创建一个身份验证,我可以在其中指定到期时间。 developers.google.com/identity/protocols/…
-
使用新的详细信息编辑您的问题。请记住,没有 API 密钥可供使用。您必须使用服务帐号。
标签: authentication google-cloud-platform google-authentication google-cloud-pubsub