Aws lambda 登录亚马逊Alexa Skills(LWA)

Aws lambda 登录亚马逊Alexa Skills(LWA),aws-lambda,alexa-skill,Aws Lambda,Alexa Skill,有人为LWA和AWS Lambda提供了端到端解决方案吗?当我认为我理解了请求/响应协议时,当我试图使它工作时,我会更加困惑。URL是:。必须通过以下三种方式之一传递OAuth 2.0令牌:作为URL中的参数、作为标头上的“承载者”令牌或作为XML。这里有一个链接:。令牌非常长,每个Amazon都应该进行编码。这可能会使URL太长。我用了头球法 public static WebClient client = new WebClient(); public static JObj

有人为LWA和AWS Lambda提供了端到端解决方案吗?当我认为我理解了请求/响应协议时,当我试图使它工作时,我会更加困惑。

URL是:。必须通过以下三种方式之一传递OAuth 2.0令牌:作为URL中的参数、作为标头上的“承载者”令牌或作为XML。这里有一个链接:。令牌非常长,每个Amazon都应该进行编码。这可能会使URL太长。我用了头球法

    public static WebClient client = new WebClient();
    public static JObject GetAmznProfile(string token)
    {
        string amznProfileHost = "https://api.amazon.com/user/profile";
        try
        {
            client.Headers.Remove("user-agent");
            client.Headers.Remove("Authorization");
            client.Headers.Add("Authorization: bearer " + token);
        }
        catch { Logger(Constants.SEVERE, "Exception caught trying to modify http headers in \"GetAmznProfile\""); }
        finally { }

        string body = GetUrl(amznProfileHost);
        if (body != null)
        {
            JObject json = JObject.Parse(body);
            return json;
        }
        else
        {
            string error = @"{'user_id':'error','name':'error','email':'error'}";
            JObject json = JObject.Parse(error);
            return json;
        }
    }

    public static string GetUrl(string url)
    {
        Logger(Constants.DEBUG, "In 'GetUrl' the URL is " + url);
        try
        {
            Stream data = client.OpenRead(url);
            StreamReader reader = new StreamReader(data);
            string body = reader.ReadToEnd();
            data.Close();
            reader.Close();

            return body;
        }
        catch (WebException e) { Logger(Constants.INFO, e.ToString() + " exception caught"); return null; }
    }

在我寻找这个问题的答案的过程中,我偶然发现了这个问题。NHLIVES的答案对我来说不是偶然的,因为我使用的是node.js。下面的代码不完整,并根据Amazon的示例进行了修改,但应该是无错误的。它当然可以改进。但这对我很有用,我希望这对以后的人有用

还有一件事,模块'request'在Lambda中不可用,所以您必须提供它。只需制作一个顶级索引为index.js的zip文件,一个包含“request”和“safe buffer”目录(从本地节点安装复制)的node_modules目录,然后将zip文件上载到Amazon Lambda(在AWS Lambda中:“Code entry type”:“upload a.zip file”)

您应该在CloudWatch日志文件中看到类似的内容:

2018-07-17T23:06:28.108Z    08d795d3-8a16-11e8-b912-0f46b6510aa8    
  LWArequest: amznProfileURL https://api.amazon.com/user/profile?access_token=Atza|IwEBIP5ozi...

2018-07-17T23:06:28.409Z    08d795d3-8a16-11e8-b912-0f46b6510aa8    
  LWArequest: user_id
  {
    "user_id": "amzn1.account.A..........................A"
  }

希望有帮助。

我正在使用亚马逊登录验证我的用户。它似乎工作得很好,但我需要的配置文件信息,似乎是授权在客户端登录。问题是我看不出人们是如何从智能家居链接的Lambda函数访问信息的。一些代码或参考链接总是帮助我帮助其他人。
2018-07-17T23:06:28.108Z    08d795d3-8a16-11e8-b912-0f46b6510aa8    
  LWArequest: amznProfileURL https://api.amazon.com/user/profile?access_token=Atza|IwEBIP5ozi...

2018-07-17T23:06:28.409Z    08d795d3-8a16-11e8-b912-0f46b6510aa8    
  LWArequest: user_id
  {
    "user_id": "amzn1.account.A..........................A"
  }