繁体   English   中英

如何删除http 302响应中的授权标头

[英]How to remove authorization header in a http 302 response

我正在使用Java / Jersy Framework(Tomcat)进行REST API开发。 一种这样的Web服务的功能是将(HTTP 302)重定向到文件的S3签名URL。 我们使用“授权”标头来检查请求的有效性。 调用此Web服务时,该服务会生成带签名的签名URL并重定向到已签名的Url。

REST Web服务的Java代码(uri是签名的URL)

return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).build();

重定向发生时,Authorization标头也会与签名一起传递。 由于亚马逊接受签名URL中的授权或签名,但不是两者都接受Amazon S3中的错误,如下所示。

只允许一种身份验证机制; 只应指定X-Amz-Algorithm查询参数,签名查询字符串参数或Authorization标头

有没有办法在重定向发生时删除正在发送的标头...

我尝试添加一个过滤器,它使用自定义的HttpServletResponseWrapper实现覆盖ServletResponse,并在addHeader和setHeader方法中记录标题名称。 它从不为Authorization标头调用此方法。

将标题设置为nulll或“”的修改代码都不起作用..

return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).header("Authorization",null).build();
return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).header("Authorization","").build();

基本上,重定向响应没有任何“授权”标头,“授权”标头只是请求的一部分。 因此,这是任何HTTP客户端重新发送所有标头以重定向它们已发送到原始URL的位置的正常行为。 你在这里无能为力。 但是,只有重定向位置位于同一域/源上时,大多数HTTP客户端才会重新发送“授权”标头。 在您的情况下,您可以尝试为S3 URL创建一个单独的域并重定向到它,并希望客户端HTTP客户端在检测到域已更改时将丢弃“授权”标头(这是重新发送“授权”的安全问题“跟踪重定向到新域/来源时的标题”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM