代码之家  ›  专栏  ›  技术社区  ›  Nicolò Gasparini

Alexa Skill帐户与Google API凭据链接,刷新令牌时出现问题

  •  0
  • Nicolò Gasparini  · 技术社区  · 6 年前

    我对Alexa帐户链接授权有一些问题。

    以下是我遵循的步骤:

    1. 我从谷歌云控制台获得了凭证(客户端ID、客户端机密…)
    2. 在Alexa开发人员控制台上设置,使用“auth code grant”作为授权授予类型
    3. 在我的Alexa应用程序上激活该技能,并成功使用我的Google帐户登录
    4. 现在我在请求中得到了访问令牌,在 handler_input.request_envelope.context.system.user.access_token

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

    我该怎么办 避免一小时后每次都要求我的用户登录 ?我应该用吗? Implicit grant 作为授权类型?我应该得到一个刷新令牌吗?

    附加信息 :这是一种使用python3连接到AWS lambda的自定义技能

    2 回复  |  直到 6 年前
        1
  •  1
  •   pinoyyid    6 年前

    你读过吗? 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 要撤消权限并重试。

        2
  •  0
  •   Nicolò Gasparini    6 年前

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

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

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

    Amazon Alexa开发人员控制台“帐户链接”配置:

    • 授权授予类型: 授权代码
    • 授权URI: https://accounts.google.com/o/oauth2/v2/auth?access_type=offline (即使来自谷歌认证的不是V2,也不应该有什么不同) 访问类型非常重要 因为,正如文件所述:

      如果应用程序需要在用户不在浏览器中时刷新访问令牌,请将[访问类型]值设置为脱机。[…]此值指示Google授权服务器返回 刷新令牌 以及一个访问令牌,这是应用程序第一次交换令牌的授权代码。

    • 访问令牌URI: https://accounts.google.com/o/oauth2/token
    • 客户端ID和机密: 在谷歌云平台上下载
    • 客户端身份验证方案: 基本HTTP协议
    • 域名列表: Google网站 GoGoLaPiS.com
    • 默认访问令牌过期时间:保留为空

    现在,在完成此操作并保存配置之后,请注意,您可能不会注意到更改,因为 here :

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

    因此,为了完成程序:

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

    附加信息

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