我正在尝试通过AWS API Gateway连接到REST API。 REST API需要身份验证并使用会话cookie。将请求发送到API网关的客户端将在请求中包含会话cookie。当API网关连接到REST API时,我需要包含cookie。但是,大部分时间都可以使用会话cookie,有些时候会附加一个AWSELB cookie来破坏会话cookie。
我在API网关中创建了一个资源,并在REST API中创建了一个GET方法。在GET方法配置中,方法请求被配置为读取" Cookie"头。集成请求配置为将传入Cookie标头的内容传递给REST API,仍作为Cookie。我相信这个配置应该读取客户端发送的cookie并将其包含在REST API的请求中。客户端只发送1个cookie。
大部分时间这都有效,REST API识别cookie并按预期响应。但是,有时它不起作用。 REST API的反应就像用户未经过身份验证一样 - 好像cookie不存在或者cookie中的值是错误的(我认为这是问题)。
当我查看REST API收到的cookie的内容(使用PHP' s $ _COOKIE)获取成功请求时,我看到以下内容:
{"SESS":"1KDZI9w1-Gc"}
看起来对我来说似乎很有效。
在REST API拒绝请求的情况下(大约十分之一),cookie报告如下:
{"SESS":"1KDZI9w1-Gc, AWSELB=69436F3F12017A3019CD7D4088C8FE7CC9981879EC03298C21B00D11E135F6C2D5BB6EB9EF4CA2F57491F67AE917BF7D76679C66E3785516822E528C0314730437CFEBF999"}
它看起来像另一个cookie,AWS Elastic Load Balancer cookie,AWSELB已附加到会话cookie的末尾。 REST API位于ELB之后。我在ELB上关闭了会话粘性。
我不知道为什么要添加AWSELB cookie,客户对API网关的请求不包含cookie。
如果API网关或其他组件正在添加AWSELB cookie,那么只要以正确的方式添加它就不应该成为问题。它应该是一个单独的cookie,不会附加到会话cookie的值。
如果我查看REST API在AWSELB cookie存在时收到的标头,Cookie标头如下所示:
"SESS=1KDZI9w1-Gc, AWSELB=69436F3F12017A3019CD7D4088C8FE7CC9981879EC03298C21B00D11E135F6C2D5BB6EB9EF4CA2F57491F67AE917BF7D76679C66E3785516822E528C0314730437CFEBF999"
当发送多个cookie时,我认为它们应该用分号分隔&#34 ;;"不是逗号","似乎正在发生。
有人可以建议我如何解决这个问题吗?我想停止包含AWSELB cookie或确保以正确的方式包含它。