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



我利用Python构建了一个应用程序,并成功地与Alexa集成。由于这个应用程序非常适合我的家庭,所以我不太关心部署过程,因为你可以永远(或者看起来)在开发模式下运行。

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

因此,为了进行部署,亚马逊要求您验证来自亚马逊的Alexa应用程序请求。基本上,它分为两部分:

  • 验证请求是否来自亚马逊
  • 验证时间戳以防止重播攻击

我的整个应用程序都是用Python构建的,但Alexa前端是用Flask Ask构建的,并使用Apache2和WSGI。有很多资源可以学习如何使用Java、JS甚至一些直接的Python来验证亚马逊请求,但我根本找不到任何关于如何使用Flask Ask来实现这一点的信息。

所以我的问题是,我该如何利用烧瓶来完成这个任务?

谢谢!

根据源代码(以及文档,由于网站关闭,我现在无法访问),有以下相关的配置选项:

Ask实例由调用Flask的配置:

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

ASK_VERIFY_REQUESTS:启用或禁用Alexa请求验证,确保将请求发送到您的技能来自亚马逊的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

最新更新