我如何使用 Amazon Login 将用户帐户链接到我的技能?

vic*_*tcu 5 amazon-web-services alexa account-linking alexa-account-linking

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

我已经在我的应用程序中包含了 Amazon API 库并正确设置了所有内容,我正在使用(全球可用的)亚马逊对象调用该过程,如下所示(打字稿):

    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
    });
Run Code Online (Sandbox Code Playgroud)

我希望从中发生的是一个弹出的亚马逊登录过程,它会产生(1)让用户登录到亚马逊,并且(2)征得用户的同意,将他们的亚马逊帐户链接到我的 Alexa 技能(即链接到我的凭证托管服务),以便我们(在浏览器中)取回授权码,我们可以(在我们的服务器上)交换该授权码以获取承载和刷新令牌以代表用户执行操作。

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

我已经尝试将这个文档(它也谈到以某种方式包含一个技能 ID)与这个文档进行协调,但我只是没有看到如何使它工作。任何人都可以帮我指出我在这里做错了什么的正确方向吗?它必须是非常基本的东西。

wbl*_*hko 2

如果您的目标是仅使用“通过亚马逊登录”来链接技能的账户,并且不将令牌存储在您自己的服务器上,则可以使用以下配置来设置技能和“通过亚马逊登录”。这种方法的优点是您不需要建立自己的 Web 服务器来处理 LwA 流。这种方法还可以处理所有开箱即用的流程,包括刷新令牌。

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

技能账户关联配置

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

技能账户关联配置

LwA 配置

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

使用亚马逊配置登录

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