我不能确切地说,因为我们遇到这个问题,因为我们的项目仍在开发中,我们只是定期部署来测试。
在我们最近的测试中,PubSub身份验证似乎不再起作用了。订阅主题时,日志中会出现以下错误:
21:10:29.577 Error subscribing to '123456'-topic: googleapi: Error 401: The request does not have valid authentication credentials., unauthorized
此错误为新。之前工作得很好。我们无法追溯到我们的任何代码更改。
使用PubSub-Emulator,此错误在devappserver 上也没有出现。
订阅者与PubSub-Service位于同一个项目中。再一次,这里的一切都发生在一个项目中。
以下是对我们正在做的事情的一些见解:
client, err := pubsub.NewClient(ctx, "lol123", option.WithTokenSource(google.AppEngineTokenSource(ctx, pubsub.ScopePubSub)), option.WithHTTPClient(urlfetch.Client(ctx)))
[...] more code [...]
_, err := client.NewSubscription(ctx, subname, topic, 0, &pubsub.PushConfig{
Endpoint: endpoint,
})
非常标准的东西。
以下是我们尝试使用的内容:
添加第二个范围:
option.WithTokenSource(google.AppEngineTokenSource(ctx, pubsub.ScopePubSub, pubsub.ScopeCloudPlatform)
使用默认的tokensource:
tokenSource, _ := google.DefaultTokenSource(ctx, pubsub.ScopePubSub)
option.WithTokenSource(tokenSource)
添加端点,以防以某种方式使用https://experimental.pubsub.googleapis.com/:
option.WithEndpoint("https://pubsub.googleapis.com/")
此外,我们从之前的cloud.WithTokenSource(...) - 东西切换到新的选项.WithTokenSource(...) - 库。迁移到新的Cloud-Libraries运行良好。但是,他们没有帮助解决权限问题。
我们还使用了各种可以想象的服务帐户和权限组合。例如,默认的Appengine服务帐户已被添加为所有PubSub-Topics的所有者。请记住,这个错误是新的,它之前有效,我们无法追溯到我们的更改。
有什么想法和建议吗?我们现在会尝试很多东西。 ; - )