我在我的AWS网关中创建了一堆API资源--它们都运行得非常好。
我还将定义导出到SwaggerUI,用于一些用户文档和测试。
我对所有的呼叫都启用了CORS,并且每个呼叫都按预期工作。
我刚刚意识到的问题是--通过swagger / Postman,如果我用GET方法调用某个端点(比如https://apiserver/api/helloWord),它可以正常工作,然后我立即将调用更改为POST,如果我等待5-10分钟,那么POST就会工作,GET就会失败.就好像选项方法正在被缓存一样(不确定)。
我尝试在我的选项方法中添加一些头(包括访问控制-最大年龄、缓存-控制、到期等)。没有运气。
每个API调用都接受一个API键和一个Authtoken --这对于第一个调用(如果使用相同的方法,则每个其他调用)都很好,直到我更改方法为止。
通过API网关测试可以很好地完成这一任务--尽管它们不使用选项(通过Fiddler注意到),但一旦我使用Swagger或postman测试调用,就会出现这个问题。
Fiddler日志没有多大帮助,因为它显示了每个调用都获取选项,然后路由到GET或POST方法--这些数据看起来都很好。
有什么想法吗?
发布于 2016-12-08 19:46:46
您在使用自定义授权程序吗?如果是这样,您应该尝试将缓存TTL设置为0,然后再进行测试。如果这解决了问题,则必须修复从授权程序生成的策略。
来自授权人的策略是缓存的,占用整个API。因此,如果您发送一个允许只允许调用的方法(例如GET被调用,并且您发送了一个允许GET方法的策略返回)的策略,那么当您调用POST方法时,您将得到403。您应该在授权程序中为客户端令牌构造一个全局策略。然后,在整个API中使用相同标记的任何调用都不必返回到Lambda函数,这样可以节省资金和延迟。
https://stackoverflow.com/questions/41031967
复制相似问题