Oauth 2.0 Google Home应用程序无法使OAUTH正常工作

Oauth 2.0 Google Home应用程序无法使OAUTH正常工作,oauth-2.0,actions-on-google,google-home,Oauth 2.0,Actions On Google,Google Home,我们正在为google home使用google上的操作构建一个智能家居应用程序。我们的应用程序需要登录我们的系统才能访问用户的设备,这样他们就可以通过google home的语音控制他们。我们的用户后端是使用AWS Cognito构建的。我们正在使用API.AI作为Google Home应用程序的一部分 我已经配置了cognitooauth2端点和googleapp上的操作,以使用auth代码流和不同的作用域相互协作,但是我缺少一些东西。当我尝试将用户帐户链接到Google Home应用程序时

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

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

我也尝试过使用谷歌的OAUTH2游乐场。似乎在使用它时,我能够从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和客户机密等,没有发现任何错误

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


提前谢谢

好的,也许我知道原因…..如果您使用aws cognito。。。 根据这份文件()

授权书 如果向客户端颁发了密码,则客户端必须通过基本HTTP授权在授权标头中传递其客户端id和客户端密码。秘密是基本的Base64Encode(客户端id:client\u 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规范()

我已经请求AWS支持。他们说,

感谢联系AWS支持部门并向我们提供详细参考资料。我很乐意为您解答关于请求主体中Cognito支持客户凭证的问题

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

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


我有一个类似的问题,通过OAuth2游乐场,一切正常,我得到身份验证令牌,然后将其交换为访问令牌,然后我可以向我的应用提交请求,一切正常。当我试图通过模拟器使用它时,我被重定向到空白页,有机会重新运行流。如果我尝试我的应用程序,它就不会进行身份验证properly@Gazeth当你说“如果我尝试我的应用程序”时,你是指你手机上的谷歌主页应用程序中的谷歌主页“应用程序”还是指你手机应用程序中的谷歌主页“应用程序”?我指的是我尝试谷歌主页应用程序。我输入“Talk to CMAP”,它会给我一张卡,让我链接我点击的账户,填写我的登录详细信息,但认证从未正确通过。当你在google home应用程序中运行它时,底部是否会显示错误消息?如果它不能正常工作,底部应该有一个灰色条带一些错误信息。另外,我可以问一下你在写什么样的应用程序吗?是用于智能家居设备吗?一个纯粹的对话应用程序?不要得到任何消息,该应用程序正在连接到我们的SAAS产品,使用户能够询问有关其日程安排和项目状态的问题