在使用WSGI运行Flask-Ask和Apache2时,如何验证Alexa请求

问题描述 投票:1回答:1

我已经使用Python构建了一个应用程序,我已经成功地与Alexa集成。由于这个应用程序非常特定于我的家庭,因此我不太关心部署过程,因为您可以永远(或看起来)在开发模式下运行。

但是,在阅读有关部署过程,特别是验证请求实际来自亚马逊而不是其他人的安全要求时,我了解到相同的要求是一个好主意,无论如何!

因此,为了部署,亚马逊要求您verify requests from Amazon到您的Alexa应用程序。基本上,它分为两部分:

  • 验证请求实际来自亚马逊
  • 验证时间戳以防止重放攻击

我的整个应用程序都是用Python构建的,但Alexa前端是用Flask-Ask构建的,并且使用了Apache2和WSGI。有很多资源可以学习如何使用Java,JS甚至是一些直接的Python来验证亚马逊的请求,但是我找不到任何关于如何使用Flask-Ask专门完成此任务的内容。

所以我的问题是如何利用Flask-ask实现这一目标?

谢谢!

python apache2 alexa-skills-kit flask-ask
1个回答
1
投票

根据source code(以及我现在无法访问的文档,因为网站已关闭),有以下相关的配置选项:

通过调用Flask的配置,Ask实例被赋予以下配置变量:

ASK_APPLICATION_ID:通过将此变量设置为应用程序ID或允许的应用程序ID列表来启用应用程序ID验证。默认情况下,禁用应用程序ID验证并记录警告。应在生产中设置此变量,以确保您指定的应用程序发送请求。默认值:无

ASK_VERIFY_REQUESTS:启用或禁用Alexa请求验证,确保发送到您的技能的请求来自Amazon的Alexa服务。不应在生产中禁用此设置。它对于在自动化测试中模拟JSON请求很有用。默认值:True

因此,默认情况下,每个请求都已经过验证。

此外,您可以添加ASK_APPLICATION_ID以确保请求来自您的技能:

app = Flask(__name__)
ask = Ask(app, '/')
app.config["ASK_APPLICATION_ID"] = ["skill-id-1", "skill-id-2"] # List of allowed IDs
© www.soinside.com 2019 - 2024. All rights reserved.