【问题标题】:Google Home App, cannot get OAUTH working properlyGoogle Home App,无法让 OAUTH 正常工作
【发布时间】:2017-08-23 13:53:51
【问题描述】:

我们正在为 google home 构建一个使用 google 操作的智能家居应用。我们的应用程序需要登录我们的系统才能访问用户的设备,以便他们可以使用他们的语音通过谷歌主页控制他们。我们的用户后端是使用 AWS Cognito 构建的。我们将 API.AI 用作 Google Home 应用的一部分。

我已经配置了 Cognito OAUTH2 端点和谷歌应用程序上的操作,以使用身份验证代码流和不同的范围相互协作,但我缺少一些东西。当我尝试将用户帐户链接到 Google Home 应用程序时,我被重定向到我们的登录页面。填写用户详细信息后,我返回到 Google Home 的“发现”选项卡,但底部有一条消息指出:“身份验证代码交换中 IdP 的响应错误”。

我也尝试过使用 Google 的 OAUTH2 Playground。似乎在使用它时,我能够从我们的 OATUH 服务器获取代码,但是在尝试将代码交换为令牌时,我收到以下错误:

HTTP/1.1 400 Bad Request
Strict-transport-security: max-age=31536000 ; includeSubDomains
X-content-type-options: nosniff
X-application-context: application:prod:8443
Transfer-encoding: chunked
Set-cookie: XSRF-TOKEN=35f58337-76f4-4993-a0c9-93429134ea42; Path=/; Secure; HttpOnly
Expires: 0
Server: Server
Connection: keep-alive
X-amz-request-id: 284d862e-b021-4079-b5f5-3cbce675983c
X-xss-protection: 1; mode=block
Pragma: no-cache
Cache-control: no-cache, no-store, max-age=0, must-revalidate
Date: Wed, 23 Aug 2017 13:51:42 GMT
X-frame-options: DENY
Content-type: application/json;charset=UTF-8
{
  "error": "invalid_client"
}

我已经检查并重新检查了客户端 ID 和客户端密码等,没有发现任何错误。

有人知道我该如何解决这个问题吗?

提前致谢

【问题讨论】:

  • 我遇到了类似的问题,通过 OAuth2 Playground 一切正常,我获得了 AUTH 令牌,然后将其交换为 ACCESS 令牌,然后我可以向我的应用程序提交请求,一切正常美好的。当我尝试通过模拟器使用它时,我被重定向到空白页面,并有机会重新运行流程。如果我尝试我的应用程序,它只是无法正确验证
  • @Gazeth 当您说“如果我尝试使用我的应用”时,您是指手机上 Google Home 应用中的 Google Home“应用”还是实际手机应用中的 Google Home“应用”?
  • 我的意思是我在 google home 应用中的尝试。我输入“与 CMAP 对话”,它会给我一张卡片来链接我点击的帐户,填写我的登录详细信息,但身份验证从未正确通过
  • 在google home应用中运行时,底部是否显示错误信息?如果它不能正常工作,底部应该有一个灰色条,其中包含某种错误消息。另外,我能问一下你在写什么类型的应用程序吗?是用于智能家居设备吗?纯粹的对话应用?
  • 没有收到任何消息,该应用程序正在连接到我们的 SAAS 产品,以使用户能够询问有关他们的日程安排和项目状态的问题

标签: oauth-2.0 actions-on-google google-home


【解决方案1】:

好的,也许我知道原因.....如果你使用aws cognito ... 根据这个文档 (http://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html)

授权 如果客户端获得了秘密,客户端必须通过基本 HTTP 授权在授权标头中传递其 client_id 和 client_secret。秘密是 Basic Base64Encode(client_id:client_secret)。

他们需要将客户端和客户端部分放在标题中......

然后我用aws http代理抓到了google progress的请求。

Method request headers: {X-Cloud-Trace-Context=d7b6b9b8239965baf69acab659e80a01/13879251242019662389, CloudFront-Viewer-Country=US, CloudFront-Forwarded-Proto=https, CloudFront-Is-Tablet-Viewer=false, CloudFront-Is-Mobile-Viewer=false, User-Agent=google-oauth-playground AppEngine-Google; (+http://code.google.com/appengine; appid: s~oauth2playground), X-Forwarded-Proto=https, CloudFront-Is-SmartTV-Viewer=false, Host=en75z5h2rb.execute-api.us-east-1.amazonaws.com, Accept-Encoding=gzip, deflate, X-Forwarded-Port=443, X-Amzn-Trace-Id=Root=1-5a0fcef2-09197cd86a625ad47d78f0b7, Via=1.1 d63a8908759a2f4775b3f672ebf823cc.cloudfront.net (CloudFront), X-Amz-Cf-Id=nFdLK97vAS5HvmpNYkPpbUMOB4bCaM6pScHWTAReAnonLg1gXF7hSg==, X-Forwarded-For=107.178.195.199, 54.182.238.53, content-type=application/x-www-form-urlencoded, CloudFront-Is-Desktop-Viewer=true}

请求标头中没有授权。所以Cognito会回来

"error": "invalid_client"

根据此 OAUTH2.0 规范 (https://www.rfc-editor.org/rfc/rfc6749#section-2.3.1)

我已经要求 AWS 支持。他们说:

感谢您联系 AWS Support 并向我们提供详细的参考资料。我很乐意协助您解决有关 Cognito 在请求正文中支持客户端凭据的问题。

阅读 OAUTH2.0 标准 RFC 6749 [0] 后,似乎不建议在请求正文中包含客户端凭据。以下是规范的摘录:

“不建议使用这两个参数在请求正文中包含客户端凭据,并且应仅限于无法直接使用 HTTP 基本身份验证方案(或其他基于密码的 HTTP 身份验证方案)的客户端。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2012-10-19
    • 1970-01-01
    • 2012-09-05
    • 2017-11-06
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多