我正在使用 Java/Jersy 框架(Tomcat)进行 REST API 开发。此类 Web 服务的一项功能是将 (HTTP 302) 重定向到文件的 S3 签名 URL。我们使用“授权”标头来检查请求的有效性。调用此 Web 服务时,该服务会生成带有签名的签名 url,并重定向到已签名的 Url。
来自 REST Web 服务的 Java 代码(uri 是签名的 url)
return Response.status(HttpStatus.SCMOVEDTEMPORARILY).location(uri).build();
Run Code Online (Sandbox Code Playgroud)
当重定向发生时,授权标头也与签名一起传递。由于亚马逊接受签名 URL 中的授权或签名,但不是两者都接受,因此它会从 Amazon S3 中引发如下错误。
只允许一种身份验证机制;仅应指定 X-Amz-Algorithm 查询参数、签名查询字符串参数或授权标头
有没有办法在重定向发生时删除正在发送的这个标头......
我尝试添加一个过滤器,它使用自定义 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();
Run Code Online (Sandbox Code Playgroud)
基本上,重定向响应没有任何“授权”标头,“授权”标头只是请求的一部分。因此,对于任何 HTTP 客户端重新发送所有标头以重定向它们已发送到原始 URL 的位置,这是正常行为。在这里您无能为力。但大多数 HTTP 客户端仅在重定向位置位于同一域/源时才会重新发送“授权”标头。在您的情况下,您可以尝试为 S3 URL 创建一个单独的域并重定向到它,并希望客户端 HTTP 客户端在检测到域已更改时会删除“授权”标头(这是重新发送“授权”的安全问题" 重定向到新域/来源时的标头)。
| 归档时间: |
|
| 查看次数: |
3455 次 |
| 最近记录: |