我利用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