将大文件上传到服务器时,OAuth 访问令牌已过期
Posted
技术标签:
【中文标题】将大文件上传到服务器时,OAuth 访问令牌已过期【英文标题】:OAuth Access token expired while uploading large file to the server 【发布时间】:2020-12-18 01:39:00 【问题描述】:我有一个网络应用程序,我正在将超过 1 GB 的大文件从浏览器上传到服务器。根据网络速度,有时需要 1 小时以上。
服务器端点受 OAuth 保护。 当从浏览器发送上传请求时,它具有有效期为 1 小时的有效令牌。
如果上传大文件,1小时后token过期,会报Unauthorized错误。
如何解决令牌仅在请求开始时而不是在完成文件上传后验证的问题?
使用的技术
-
AngularJs - 用户界面
SpringBoot 版本 2 - 后端
POST 请求
内容类型:Multipart/form-data
我无法选择将令牌有效期延长至 1 小时以上。
【问题讨论】:
使用refresh token
刷新/获取新的access token
您能否重新编码后端以在首次向其发出请求时进行验证?
@Thirmal 我已经在这样做了。新令牌的有效期只有 1 小时
@Travis 我正在使用 Spring mc 控制器,它将 MultipartFile 作为输入参数
@GauravKatkamwar 如果您的后端使用 HTTP 会话,则无需在每个请求中验证 OAuth 令牌。您只需要验证第一个请求。然后你可以延长 HTTP 会话超时。就像特拉维斯写的那样。
【参考方案1】:
原因是 tomcat 会先接收文件,然后将 servlet 请求分派给您的控制器。当上传耗时过长且token已经过期时,安全检查会返回401,你的请求永远不会进入控制器(安全检查在你的控制器之前)。
您可以使用 MultiPartFile 参数在控制器中放置一个断点,然后尝试上传一个巨大的文件来验证我所说的。
一种可能的解决方案是您自己解决 servlet,可能类似于:
uploadFile(HttpServletRequest rawRequest)
然后当一个令牌已经过期时,你可以刷新它而不是返回401然后丢弃已经上传的文件。
希望这对您有所帮助,如果您有更好的想法,请告诉我们。谢谢!
有用的链接:https://docs.spring.io/spring-framework/docs/5.3.x/reference/html/web.html#mvc-multipart
【讨论】:
以上是关于将大文件上传到服务器时,OAuth 访问令牌已过期的主要内容,如果未能解决你的问题,请参考以下文章