AlistGo / alist

🗂️A file list/WebDAV program that supports multiple storages, powered by Gin and Solidjs. / 一个支持多存储的文件列表/WebDAV程序,使用 Gin 和 Solidjs。
https://alist.nn.ci
GNU Affero General Public License v3.0
43.24k stars 5.61k forks source link

阿里云盘下载链接失效,提示错误0002-00000069:URL签名已过期 #5547

Closed 9-2-1 closed 11 months ago

9-2-1 commented 11 months ago

Please make sure of the following things

AList Version / AList 版本

v3.28.0

Driver used / 使用的存储驱动

Aliyunopen

Describe the bug / 问题描述

启动 Alist 服务器连接阿里云盘后,有时文件会下载出错,会获得一些疑似错误报告的内容:

...Reponse: \u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cError\u003e\n  \u003cCode\u003eAccessDenied\u003c/Code\u003e\n  \u003cMessage\u003eRequest has expired.\u003c/Message\u003e\n  \u003cRequestId\u003e655B726DCE3E4E36386267CC\u003c/RequestId\u003e\n  \u003cHostId\u003ecn-beijing-data.aliyundrive.net\u003c/HostId\u003e\n  \u003cExpires\u003e2023-11-20T14:18:32.000Z\u003c/Expires\u003e\n  \u003cServerTime\u003e2023-11-20T14:51:25.000Z\u003c/ServerTime\u003e\n  \u003cEC\u003e0002-00000069\u003c/EC\u003e\n  \u003cRecommendDoc\u003ehttps://api.aliyun.com/troubleshoot?q=0002-00000069\u003c/RecommendDoc\u003e\n\u003c/Error\u003e\n","data":null}

将 Response 后面的内容复制后转换结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Request has expired.</Message>
  <RequestId>655B726DCE3E4E36386267CC</RequestId>
  <HostId>cn-beijing-data.aliyundrive.net</HostId>
  <Expires>2023-11-20T14:18:32.000Z</Expires>
  <ServerTime>2023-11-20T14:51:25.000Z</ServerTime>
  <EC>0002-00000069</EC>
  <RecommendDoc>https://api.aliyun.com/troubleshoot?q=0002-00000069</RecommendDoc>
</Error>
","data":null}

查看https://api.aliyun.com/troubleshoot?q=0002-00000069后会发现“URL签名已过期”的提示。

Reproduction / 复现链接

重启Alist后可以正常下载,一段时间后会下载失败。猜想:同一文件下载一次后隔一段时间再次下载就会失败,暂时没有验证。

Config / 配置

{
  "force": false,
  "site_url": "",
  "cdn": "",
  "jwt_secret": "...",
  "token_expires_in": 48,
  "database": {
    "type": "sqlite3",
    "host": "",
    "port": 0,
    "user": "",
    "password": "",
    "name": "",
    "db_file": "D:\\data\\data.db",
    "table_prefix": "x_",
    "ssl_mode": ""
  },
  "scheme": {
    "address": "localhost",
    "http_port": 5244,
    "https_port": -1,
    "force_https": false,
    "cert_file": "",
    "key_file": "",
    "unix_file": "",
    "unix_file_perm": ""
  },
  "temp_dir": "D:\\data\\temp",
  "bleve_dir": "D:\\data\\bleve",
  "log": {
    "enable": true,
    "name": "D:\\data\\log\\log.log",
    "max_size": 10,
    "max_backups": 5,
    "max_age": 28,
    "compress": false
  },
  "delayed_start": 0,
  "max_connections": 0,
  "tls_insecure_skip_verify": true
}

image

image

Logs / 日志

ERRO[2023-11-20 21:46:47] GET /dav/aliyun/kopia/kopia.repository.f http request [https://cn-beijing-data.aliyundrive.net/U028UiXN%2F364632050%2F6503f4fc3ad3288cb0444969983ca7884638cb09%2F6503f4fce91f6d1410774710bd833aeafb718f89?di=bj29&dr=364632050&f=6503f4fc3ad3288cb0444969983ca7884638cb09&response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27kopia.repository.f&security-token=CAIS%2BgF1q6Ft5B2y########################%2BkHK8aHphyw71FlI1KkyvmxgHT6gsgAA%3D%3D&u=b996958d7a3343c88e278d844f1b7315&x-oss-access-key-id=STS.NSn3auWRFnbkHcpgNjXTDgFdV&x-oss-expires=1700486231&x-oss-signature=pW%2F0KOiU0ecVnlRskfTZmYsZNTfGTVlyhIKSOnOhPSU%3D&x-oss-signature-version=OSS2] failure,status: 403 response:<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Request has expired.</Message>
  <RequestId>655B63464B9C1334353E9F5E</RequestId>
  <HostId>cn-beijing-data.aliyundrive.net</HostId>
  <Expires>2023-11-20T13:17:11.000Z</Expires>
  <ServerTime>2023-11-20T13:46:46.000Z</ServerTime>
  <EC>0002-00000069</EC>
  <RecommendDoc>https://api.aliyun.com/troubleshoot?q=0002-00000069</RecommendDoc>
</Error> 
[GIN] 2023/11/20 - 21:46:47 | 500 |     60.8056ms |       127.0.0.1 | GET      "/dav/aliyun/kopia/kopia.repository.f"
ERRO[2023-11-20 21:46:49] webdav proxy error: http request [https://cn-beijing-data.aliyundrive.net/U028UiXN%2F364632050%2F6503f4fc3ad3288cb0444969983ca7884638cb09%2F6503f4fce91f6d1410774710bd833aeafb718f89?di=bj29&dr=364632050&f=6503f4fc3ad3288cb0444969983ca7884638cb09&response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27kopia.repository.f&security-token=CAIS%2BgF1q6Ft5B################1KkyvmxgHT6gsgAA%3D%3D&u=b996958d7a3343c88e278d844f1b7315&x-oss-access-key-id=STS.NSn3auWRFnbkHcpgNjXTDgFdV&x-oss-expires=1700486231&x-oss-signature=pW%2F0KOiU0ecVnlRskfTZmYsZNTfGTVlyhIKSOnOhPSU%3D&x-oss-signature-version=OSS2] failure,status: 403 response:<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Request has expired.</Message>
  <RequestId>655B6348C93A583931F8D1B3</RequestId>
  <HostId>cn-beijing-data.aliyundrive.net</HostId>
  <Expires>2023-11-20T13:17:11.000Z</Expires>
  <ServerTime>2023-11-20T13:46:48.000Z</ServerTime>
  <EC>0002-00000069</EC>
  <RecommendDoc>https://api.aliyun.com/troubleshoot?q=0002-00000069</RecommendDoc>
</Error> 
pspbra commented 11 months ago

遇到了同样的问题。之前没有遇到过,今天无意中发现的。注意到链接中多了一个x-oss-expires=1700497922参数,不确定是阿里云api那端的调整还是什么导致的。

BlueSkyXN commented 11 months ago

阿里云盘对时间戳有效期限制到了15分钟(目前的Alist版本测试时从有效期参数得到),这个在阿里云盘官方文档目前没有说明有效期限制被修改到15分钟,因为官方文档说的还是4小时(11.1起) 而Alist使用的是4小时有效期的请求以及默认30分钟的缓存时间。 因此需要修改源码的有效期请求为15分钟,并加快缓存刷新到低于15分钟。 比较奇怪的是,官方文档中提到15分钟是默认而不是最大值,但是根据阿里驱动的源代码应该是使用了4小时的附加参数的。不排除是Ali修改了接口,比如不允许DIY有效期

问题示例 https://github.com/alist-org/alist/issues/5547

官方文档 https://www.yuque.com/aliyundrive/zpfszx/gogo34oi2gy98w5d#mN50J

这会导致任何下载任务持续时间无法超过15分钟,根据阿里单任务限速300Mbps可以计算到大概能下载33.75GB大小的文件。超过15分钟之前302出来的会失效,因为大文件可能导致无法下载,包括断点续传。要解决这个方法可能需要使用本地代理+15分钟内的缓存时间(不确定Alist的缓存时间策略在本地代理时是否有效且兼容断点续传)

huolanyun commented 11 months ago

https://www.yuque.com/aliyundrive/zpfszx/fitzlb1uyy0pv0iw#r5mkR 这里写道8月份开始 改成默认 900,最长1800,但是大于1800的参数会默认1800,不知道为啥是900 2023-06-30 由于业务升级,我们计划对 /adrive/v1.0/openFile/getDownloadUrl 接口的下载过期时间参数做调整。 (文档地址 ● 原取值范围:最长 115,200 秒(32小时),默认为 900 秒 ● 调整后:最长 1800 秒(0.5小时 ),默认为 900 秒 调整策略: ● 对于传入参数小于 1800秒 的调用请求,本次调整无影响; ● 对于传入参数大于 1800秒 的调用请求,会将参数调整为 1800秒; ● 接口调整时间:8月14日。 额外说明: 下载地址更新逻辑建议按照 x-oss-expires 参数来设置下载链接过期时间,如果之前已经这样处理,那么本次改动无影响;如果之前是写死的,请尽快调整调用方式。

xhofe commented 11 months ago

暂时还不清楚阿里云盘最终要将API改成什么样

BlueSkyXN commented 11 months ago

https://www.yuque.com/aliyundrive/zpfszx/fitzlb1uyy0pv0iw#r5mkR

这里写道8月份开始 改成默认 900,最长1800,但是大于1800的参数会默认1800,不知道为啥是900

2023-06-30

由于业务升级,我们计划对 /adrive/v1.0/openFile/getDownloadUrl 接口的下载过期时间参数做调整。

(文档地址

● 原取值范围:最长 115,200 秒(32小时),默认为 900 秒

● 调整后:最长 1800 秒(0.5小时 ),默认为 900 秒

调整策略:

● 对于传入参数小于 1800秒 的调用请求,本次调整无影响;

● 对于传入参数大于 1800秒 的调用请求,会将参数调整为 1800秒;

● 接口调整时间:8月14日。

额外说明:

下载地址更新逻辑建议按照 x-oss-expires 参数来设置下载链接过期时间,如果之前已经这样处理,那么本次改动无影响;如果之前是写死的,请尽快调整调用方式。

在具体接口中还保持写法:下载地址过期时间,单位为秒,最长 32小时 115200 秒,默认为 900 秒。11/1开始调整为最长4h(14400秒)。这tm两边还不统一,离谱

BlueSkyXN commented 11 months ago

https://www.yuque.com/aliyundrive/zpfszx/fitzlb1uyy0pv0iw#r5mkR

这里写道8月份开始 改成默认 900,最长1800,但是大于1800的参数会默认1800,不知道为啥是900

2023-06-30

由于业务升级,我们计划对 /adrive/v1.0/openFile/getDownloadUrl 接口的下载过期时间参数做调整。

(文档地址

● 原取值范围:最长 115,200 秒(32小时),默认为 900 秒

● 调整后:最长 1800 秒(0.5小时 ),默认为 900 秒

调整策略:

● 对于传入参数小于 1800秒 的调用请求,本次调整无影响;

● 对于传入参数大于 1800秒 的调用请求,会将参数调整为 1800秒;

● 接口调整时间:8月14日。

额外说明:

下载地址更新逻辑建议按照 x-oss-expires 参数来设置下载链接过期时间,如果之前已经这样处理,那么本次改动无影响;如果之前是写死的,请尽快调整调用方式。

对于传入参数大于 1800秒 的调用请求,会将参数调整为 1800秒

似乎不匹配目前的情况,目前被限制到了默认900s(alist提交14400s)

Ben-Huang commented 11 months ago

有没有临时的解决方法?尝试将"缓存过期时间"设置为1,过期后刷新页面,问题依旧

AmbitiousJun commented 11 months ago

询问临时解决方法+1,15 分钟已经不能正常使用了

BlueSkyXN commented 11 months ago

有没有临时的解决方法?尝试将"缓存过期时间"设置为1,过期后刷新页面,问题依旧

1,设置“web代理”为开 2,设置“webdav”为本地代理 3,设置“签名”为关 4,索引:删除 5,设置:缓存过期时间为10分钟 6,重启Alist

JK-cc commented 11 months ago

大约2天前开始出现此问题,

BlueSkyXN commented 11 months ago

有没有临时的解决方法?尝试将"缓存过期时间"设置为1,过期后刷新页面,问题依旧

1,设置“web代理”为开 2,设置“webdav”为本地代理 3,设置“签名”为关 4,索引:删除 5,设置:缓存过期时间为10分钟 6,重启Alist

我修改了获取下载链接发送的有效期和内部有效时间,有兴趣的可以测试下是否正常 https://github.com/BlueSkyXN/alist/actions/runs/6957153071

lizhiwei8061 commented 11 months ago

遇到同样问题,已经有几天了,同步时好时坏,不知道现在好了没

BlueSkyXN commented 11 months ago

遇到同样问题,已经有几天了,同步时好时坏,不知道现在好了没

初步测试,修复后无异常

https://github.com/BlueSkyXN/alist/actions/runs/6965982158

ypq123456789 commented 11 months ago

遇到同样问题,已经有几天了,同步时好时坏,不知道现在好了没

初步测试,修复后无异常

https://github.com/BlueSkyXN/alist/actions/runs/6965982158

大佬pr了吗?

JK-cc commented 11 months ago

遇到同样问题,已经有几天了,同步时好时坏,不知道现在好了没

初步测试,修复后无异常

https://github.com/BlueSkyXN/alist/actions/runs/6965982158

有效,暂未再次出现问题。

zzhi-github commented 11 months ago

遇到同样问题,已经有几天了,同步时好时坏,不知道现在好了没

初步测试,修复后无异常

https://github.com/BlueSkyXN/alist/actions/runs/6965982158

最近阿里云盘视频播放出现问题,如果视频播放暂停超过一段时间,就无法继续播放,视频文件会显示无法连接server。返回server returned 5xx的信息。我觉得跟这个问题相关,有没有人遇到?我按照上面的设置改了,但似乎没有效果。

JK-cc commented 11 months ago

遇到同样问题,已经有几天了,同步时好时坏,不知道现在好了没

初步测试,修复后无异常 https://github.com/BlueSkyXN/alist/actions/runs/6965982158

最近阿里云盘视频播放出现问题,如果视频播放暂停超过一段时间,就无法继续播放,视频文件会显示无法连接server。返回server returned 5xx的信息。我觉得跟这个问题相关,有没有人遇到?我按照上面的设置改了,但似乎没有效果。

应该是一个问题,我是一个视频播放一段时间后就突然停止读取不了这个视频,查看alist报错是URL签名过期和楼主一样。使用这位大佬新生成的就可以了https://github.com/alist-org/alist/issues/5547#issuecomment-1823869934

BlueSkyXN commented 11 months ago

遇到同样问题,已经有几天了,同步时好时坏,不知道现在好了没

初步测试,修复后无异常 https://github.com/BlueSkyXN/alist/actions/runs/6965982158

最近阿里云盘视频播放出现问题,如果视频播放暂停超过一段时间,就无法继续播放,视频文件会显示无法连接server。返回server returned 5xx的信息。我觉得跟这个问题相关,有没有人遇到?我按照上面的设置改了,但似乎没有效果。

根据目前的反馈可以推测对于在线播放和直链都强制限制到了900s 如果你使用的是302后的直链,你将会在15分钟后无法进行任何播放、拖动等操作(直到你重新获取新的链接)

BlueSkyXN commented 11 months ago

1,设置“web代理”为开 2,设置“webdav”为本地代理 3,设置“签名”为关 4,索引:删除 5,设置:缓存过期时间为10分钟 6,重启Alist

5560 你也可以自己调参数用GitHub Action编译一下

我自己用的还是魔改版(并发任务数从3提升到10)

shaoyang778899 commented 11 months ago

遇到同样问题,已经有几天了,同步时好时坏,不知道现在好了没

初步测试,修复后无异常

https://github.com/BlueSkyXN/alist/actions/runs/6965982158

你好,问一下.这个链接内的是怎么使用的,看了半天没看明白在哪里修改.可以教我一下吗?这个问题困扰好几天了,谢谢

BlueSkyXN commented 11 months ago

遇到同样问题,已经有几天了,同步时好时坏,不知道现在好了没

初步测试,修复后无异常

https://github.com/BlueSkyXN/alist/actions/runs/6965982158

你好,问一下.这个链接内的是怎么使用的,看了半天没看明白在哪里修改.可以教我一下吗?这个问题困扰好几天了,谢谢

已经整合到最新版本,请更新到3.29.1 然后即可在阿里官方允许的范围内使用

zzhi-github commented 11 months ago

我替换了3.29.0的版本,fix已经合进去了。使用了两天,看视频跟之前基本无异,问题应该解决了。

YosenFree commented 11 months ago

我更新了最新版本3.29.1,设置不开始web代理,或者开启本地代理,还是会发生这个问题呢

YosenFree commented 11 months ago

@BlueSkyXN

BlueSkyXN commented 11 months ago

我更新了最新版本3.29.1,设置不开始web代理,或者开启本地代理,还是会发生这个问题呢

F12,看看是官方还是代理的域名/IP就知道了 注意:阿里专用播放器不走代理、通用播放器可能也不走但是别人说没啥问题。 第三方播放器、下载器请你自己找他们解决302跟随的问题

BlueSkyXN commented 11 months ago

我更新了最新版本3.29.1,设置不开始web代理,或者开启本地代理,还是会发生这个问题呢

开启本地代理(web代理+webdav代理) 浏览器推送idm进行32线程单任务下载500GB超大压缩包,以300Mbps单任务限速需要多久你自己计算,我实测下载成功就说明了没问题

YosenFree commented 11 months ago

我更新了最新版本3.29.1,设置不开始web代理,或者开启本地代理,还是会发生这个问题呢

F12,看看是官方还是代理的域名/IP就知道了 注意:阿里专用播放器不走代理、通用播放器可能也不走但是别人说没啥问题。 第三方播放器、下载器请你自己找他们解决302跟随的问题

感谢大佬,确实是阿里播放器不走代理的原因,换video就行了。

4873 commented 9 months ago

我也遇到了相同的问题