You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenStack Swift基于前缀的临时URL无法正常工作问题

基于前缀的Swift临时URL访问报401 Unauthorized的解决办法

问题复现

执行前缀式临时URL生成命令:

swift tempurl --prefix-based GET 600 "/v1/AUTH_project/container/my/prefix/" "mykey12345"

得到返回结果:

/v1/AUTH_project/container/my/prefix/?temp_url_sig=abc0987&temp_url_expires=1758927814&temp_url_prefix=test/prefix/

拼接成完整访问URL后:

https://swift.example.com/object/v1/AUTH_project/container/my/prefix/testobject.txt?temp_url_sig=abc0987&temp_url_expires=1758927814&temp_url_prefix=test/prefix/

访问时返回401 Unauthorized: Temp URL invalid错误,但直接生成单对象的临时URL(如下)却能正常访问:

swift tempurl GET 600 "/v1/AUTH_project/container/my/prefix/testobject.txt" "mykey12345"

原因分析

  1. 请求路径不匹配:Swift临时URL的签名是基于请求的完整路径生成的。生成前缀URL时指定的路径是/v1/AUTH_project/container/my/prefix/,但访问时的URL多了/object前缀,导致签名验证时路径不一致,直接触发401。
  2. temp_url_prefix参数错误:生成的URL中temp_url_prefix=test/prefix/,但实际要访问的对象前缀是my/prefix/,参数值与实际前缀不匹配,也会导致临时URL验证失败。

解决方案

  1. 对齐生成路径与访问路径
    确保生成临时URL时使用的路径和实际访问的路径完全一致。如果你的Swift集群访问路径确实包含/object前缀,生成命令要同步加上该前缀:

    swift tempurl --prefix-based GET 600 "/object/v1/AUTH_project/container/my/prefix/" "mykey12345"
    

    若集群标准路径就是/v1/AUTH_project/...,则访问时不要额外添加/object,直接使用生成的路径拼接对象名:

    https://swift.example.com/v1/AUTH_project/container/my/prefix/testobject.txt?temp_url_sig=abc0987&temp_url_expires=1758927814&temp_url_prefix=my/prefix/
    
  2. 修正temp_url_prefix参数
    检查生成命令中的路径参数,确保--prefix-based对应的路径是正确的前缀(my/prefix/),避免生成的URL中出现错误的temp_url_prefix=test/prefix/。如果是因为命令参数错误导致的,调整路径后重新生成即可。

内容的提问来源于stack exchange,提问作者Matthias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:12:37