我在连接授权的Alexa帐户上遇到了一些问题。
这些是我遵循的步骤:
handler_input.request_envelope.context.system.user.access_token
的请求中获得了访问令牌问题是访问令牌在一小时后到期,而Alexa不管理令牌的刷新。
我该怎么办才能避免每次一小时后让用户登录?我应该使用Implicit grant
作为授权类型吗?我应该以某种方式获得刷新令牌吗?
附加信息:它是使用Python3连接到AWS Lambda的自定义技能
你读过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撤销许可,然后再试一次。
虽然@ pinoyyid的答案是正确的,但它没有提供解决方案,所以我发布一个以供将来参考。
问题确实是亚马逊服务器没有收到来自谷歌的刷新令牌,因此无法在一小时的到期时间后刷新访问令牌。
继this链接和其他亚马逊论坛帖子之后,我找到了一个有效的解决方案。
亚马逊Alexa开发者控制台'帐户链接'配置:
现在,在执行此操作并保存配置后,请注意您可能没有注意到更改,例如,来自here:
当Alexa使用刷新令牌为现有用户检索新的访问令牌时,Alexa使用在用户链接其帐户时配置的访问令牌URI。因此,如果稍后更改访问令牌URI,则在继续使用旧URI检索更新的令牌之前链接其帐户的用户。用户必须取消链接并重新链接帐户才能切换到新的访问令牌URI。
所以,为了完成这个程序:
附加信息
我发现许多人建议检索刷新令牌,我不相信这是可能的,因为即使谷歌发送它,也是亚马逊存储它并使用它来刷新访问令牌。
编辑:这适用于开发和测试但我发现here,出于发布目的,您必须拥有您重定向用户的登录页面。对我来说,只需要创建一个托管在公共S3存储桶中的简单HTML页面,该页面将请求重定向到我之前编写的授权URI,而访问令牌URI必须保留为Google。