Google Assistant SDK拒绝认证频道为“UNAUTHENTICATED”

我正在尝试在Kotlin为我的Raspberry Pi创建一个Google智能助理。 我使用本IETF草案中提出的所谓“设备流程”实现了OAuth流程,因为我的Raspberry稍后将公开一个Web界面,并且没有任何输入设备或图形界面。

谷歌确实支持这个流程(当然),我最终得到用户同意的有效访问令牌。 为了测试的目的,我也尝试了一个默认授权流程,只是将用户转发到本地主机,因为它通常已经完成,但并没有解决问题。

我使用这个工具测试了访问令牌,并确认了范围和令牌的有效性。 所以令牌本身应该工作。

范围是: https : //www.googleapis.com/auth/assistant-sdk-prototype(如此处所述)这实际上并不指向任何有效的Web资源,而是在每个文档中引用。

然后,我尝试使用gRPC提供的Java存根将音频数据流式传输到助理SDK端点。 如第三方参考实现作为指导如何认证rpc存根。 但是这个参考实现和我自己的都不起作用。 他们都报告

io.grpc.StatusRuntimeException: UNAUTHENTICATED: Request is missing required authentication credential. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. 

存根以这种方式进行validation:

 embeddedAssistantStub.withCallCredentials( MoreCallCredentials.from(OAuth2Credentials .newBuilder() .setAccessToken( myAccessToken, myAccessTokenExpirationDate)) .build())) 

并且认证的请求被执行如下:

 val observer = authenticatedEmbeddedAssistantStub.converse(myStreamObserverImplementation) observer.onNext(myConfigConverseRequest) while(more audio data frames available) { observer.onNext(myAudioFrameConverseRequest) } observer.onCompleted() 

(为了清楚起见,我在“my”前加了伪variables,在实际的实现中可以包含更多的代码)

我甚至联系过这个演示实现的作者。 他告诉我,上次他(几个月前)检查完全正常。 所以我终于用尽了选择。 由于客户端的实现我作为参考用于工作,我确实认证存根(尽管错误消息建议相反)或许,我的有效访问令牌正确范围不适合选择助理API(虽然我跟着谷歌的建议)或API服务器有变化没有正确记录在谷歌的入门文章 。

所以:有没有人遇到同样的问题,并知道如何解决? 我在github上有这个项目。 所以如果任何人需要破坏的源代码,我可以做一个临时的提交,产生错误。

请注意,为了保存一些mods的作品:这个问题引用这个和这个问题,都没有解决和使用不同的语言,但描述类似的问题。

那么,似乎我对我的第二个假设是正确的:错误是服务器端。 这里是github的问题,让我们等待修复。

https://github.com/googlesamples/assistant-sdk-python/issues/138