Alexa技能帐户与Google API凭据链接,问题刷新令牌

问题描述 投票:1回答:2

我在连接授权的Alexa帐户上遇到了一些问题。

这些是我遵循的步骤:

  1. 我从Google Cloud Console获得了凭据(客户端ID,客户端密码......)
  2. 使用“Auth Code Grant”作为授权授权类型在Alexa Developer Console上进行设置
  3. 激活了我的Alexa应用程序的技能,并使用我的Google帐户成功登录
  4. 现在我在handler_input.request_envelope.context.system.user.access_token的请求中获得了访问令牌

问题是访问令牌在一小时后到期,而Alexa不管理令牌的刷新。

我该怎么办才能避免每次一小时后让用户登录?我应该使用Implicit grant作为授权类型吗?我应该以某种方式获得刷新令牌吗?

附加信息:它是使用Python3连接到AWS Lambda的自定义技能

google-api alexa alexa-skills-kit google-authentication alexa-skill
2个回答
1
投票

你读过https://developer.amazon.com/docs/account-linking/configure-authorization-code-grant.html吗?

我的猜测是刷新令牌丢失了,因为你已经批准了应用程序。 RT仅发布一次。尝试进入https://myaccount.google.com/permissions?utm_source=google-account&utm_medium=web撤销许可,然后再试一次。


1
投票

虽然@ pinoyyid的答案是正确的,但它没有提供解决方案,所以我发布一个以供将来参考。

问题确实是亚马逊服务器没有收到来自谷歌的刷新令牌,因此无法在一小时的到期时间后刷新访问令牌。

this链接和其他亚马逊论坛帖子之后,我找到了一个有效的解决方案。

亚马逊Alexa开发者控制台'帐户链接'配置:

  • 授权授权类型:Auth Code Grant
  • 授权URI:https://accounts.google.com/o/oauth2/v2/auth?access_type=offline(尽管google凭据中的那个不是v2,它应该没有区别)访问类型非常重要,因为,正如文档所述: 如果您的应用程序需要在浏览器中没有用户时刷新访问令牌,请将[access_type]值设置为脱机。 [...]此值指示Google授权服务器在您的应用程序第一次交换令牌授权代码时返回刷新令牌和访问令牌。
  • 访问令牌URI:https://accounts.google.com/o/oauth2/token
  • 客户ID和密码:在Google Cloud Platform上下载
  • 客户端认证方案:HTTP Basic
  • 域名列表:google.com和googleapis.com
  • 默认访问令牌到期时间:左空

现在,在执行此操作并保存配置后,请注意您可能没有注意到更改,例如,来自here

当Alexa使用刷新令牌为现有用户检索新的访问令牌时,Alexa使用在用户链接其帐户时配置的访问令牌URI。因此,如果稍后更改访问令牌URI,则在继续使用旧URI检索更新的令牌之前链接其帐户的用户。用户必须取消链接并重新链接帐户才能切换到新的访问令牌URI。

所以,为了完成这个程序:

  1. 停用你的技能
  2. 转到Google third party applications that have access to your data并删除与您关联的Google项目
  3. 重新激活您的技能并再次登录(如果操作正确,它应该再次询问您在Alexa开发者控制台中指定的范围的权限
  4. 完成!一小时后你应该重新尝试它应该有一个更新的访问令牌

附加信息

我发现许多人建议检索刷新令牌,我不相信这是可能的,因为即使谷歌发送它,也是亚马逊存储它并使用它来刷新访问令牌。

编辑:这适用于开发和测试但我发现here,出于发布目的,您必须拥有您重定向用户的登录页面。对我来说,只需要创建一个托管在公共S3存储桶中的简单HTML页面,该页面将请求重定向到我之前编写的授权URI,而访问令牌URI必须保留为Google。

© www.soinside.com 2019 - 2024. All rights reserved.