将大文件上传到服务器时,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 访问令牌已过期的主要内容,如果未能解决你的问题,请参考以下文章

如何识别 OAuth 令牌是不是已过期?

OAuth 2.0 访问令牌已过期,刷新令牌不可用

刷新 OAuth2 访问令牌的正确范例

google oauth2 刷新令牌何时过期?

facebook 访问令牌已过期

Facebook Oauth 2.0 访问令牌会过期吗?