首页 > 解决方案 > 如何使用 Login With Amazon 将用户帐户链接到我的技能?

问题描述

通过遵循亚马逊的 Alexa 文档,我很难让它发挥作用。我在 Account Linking 上搁浅了,因为我不知道如何让 Login with Amazon (LWA) 请求 alexa::skills:account_linking 范围。

我已将 Amazon API 库包含在我的应用程序中并正确设置,我正在使用(全球可用的)amazon 对象调用该过程,如下所示(打字稿):

    const options: any = {};
    options.scope = ['profile', 'alexa::skills:account_linking'];
    options.scope_data = {
        profile : {essential: false}
    };    
    options.response_type = 'code';

    const self = this;
    amazon.Login.authorize(options, (response) => {
      if (!response || !response.code) {
        throw { error: response };
      }

      // ... send the response code to my server 
      // ... to be exchanged for bearer and refresh tokens
    });

我期望从中发生的是一个弹出的亚马逊登录过程,它(1)让用户登录到亚马逊,(2)收集用户同意将他们的亚马逊账户链接到我的 Alexa 技能(即链接到我的凭证托管服务),以便我们(在浏览器中)返回一个授权代码,我们可以(在我们的服务器上)交换承载和刷新令牌以代表用户行事。

问题是,上面的代码立即失败并且永远不会弹出一个进程。抛出的消息说:“请求了一个未知的范围”。如果我从 options.scope 数组中删除 'alexa::skills:account_linking' 字符串,我会进入亚马逊登录屏幕,如果我登录亚马逊,我的服务器会获得授权码等。但没有帐户链接已经发生了,所以我被卡住了。

我试图将这个文档(它也谈到以某种方式包含技能 ID)与这个文档相协调,但我只是不知道如何使它工作。谁能帮我指出我在这里做错了什么的正确方向?它一定是非常基本的东西。

标签: amazon-web-servicesalexaaccount-linkingalexa-account-linking

解决方案


如果您的目标是使用 Login with Amazon 仅用于技能的帐户链接,而不是将令牌存储在您自己的服务器上,您可以使用以下配置设置技能和 Login with Amazon。这种方法的优点是您不需要建立自己的 Web 服务器来处理 LwA 流。这种方法还可以处理所有开箱即用的流程,包括刷新令牌。

如果您将这些令牌用于其他目的,您可能需要研究AWS Cognito之类的东西来简化流程。

技能账号绑定配置

将您的客户端 ID 替换为 LwA 客户端 ID,将您的密钥替换为 LwA 客户端密钥,然后复制您的重定向 URI

技能账号绑定配置

LwA 配置

在此处粘贴您的 Alexa 重定向 URL。这些将特定于您的供应商帐户,因此拥有正确的帐户非常重要。

使用亚马逊配置登录

资料来源:这是我为我的 Aberto Sonorus 技能所做的:https ://www.amazon.com/WBPhoto-Aberto-Sonorus/dp/B078W199Z3 (附上编辑后的屏幕截图)


推荐阅读