基于OAuth的Google Home账号绑定实现疑问及报错求解
问题1
code由开发者侧生成。你需要在用户完成自身平台的账号登录、确认授权后生成该临时授权码,code仅可使用一次,有效期建议控制在10分钟以内,后续Google会携带该code请求你的Token接口交换令牌。
问题2
access_token和refresh_token均由开发者侧生成。
- access_token是Google后续请求你的智能家居业务接口(SYNC/QUERY/EXECUTE等)时携带的身份凭证,你需要自行校验该token的合法性以及对应的用户身份。
- refresh_token用于access_token过期后,Google无需用户重新授权即可主动调用你的Token接口刷新获取新的access_token。
问题3
仅返回这四个参数仅满足令牌交换的基础返回要求,还需要满足以下规则才算完成完整的令牌交换环节:
- 接口响应头的
Content-Type必须明确为application/json expires_in必须返回数字类型,你当前代码返回的是字符串类型的"3600",属于格式错误,需要修改为整型3600- 首次用授权码换令牌时需要同时返回四个参数,后续用户用refresh_token刷新令牌时不需要返回refresh_token(除非你需要更换refresh_token)
- 你需要自行维护code、access_token、refresh_token和相应用户身份的关联关系,后续接口请求过来时可以识别对应的用户。
问题4
该报错json_response_invalid_format不是OAuth绑定环节的错误,是账号绑定完成后,Google主动调用你配置的智能家居Fulfillment接口发起SYNC同步请求时,你返回的响应格式不符合Google要求导致的。
解决方法:
- 检查你配置的智能家居业务接口是否可以正常接收Google的POST请求
- 严格按照Google SYNC接口规范构造响应,必须包含
requestId、payload两个顶级字段,payload下必须包含agentUserId、devices等必填字段 - 检查接口响应头
Content-Type是否为application/json - 校验返回的JSON没有语法错误,没有缺失必填字段或者多余的非法字段
内容的提问来源于stack exchange,提问作者Dave Rogers
相关产品推荐
相关产品推荐

