AWS 签名的 URL 太长,无法缩短

2024-04-26

我正在使用 AWS 创建一个签名 URL,以便我可以安全地将此 URL 传递给另一个 API 以供临时使用。签名的 URL 指向 S3 资源。问题是其他 API 不接受这么长的链接。因此我正在尝试缩短它。我尝试使用类似的缩短器goo.gl http://goo.gl or bit.ly http://bit.ly但无济于事,因为 URL 对他们来说太长了。我什至使用 AWS 构建了自己的私有缩短器(AWS 网址缩短器 https://aws.amazon.com/blogs/compute/build-a-serverless-private-url-shortener/)但它有同样的问题:“网站重定向位置的长度不能超过 2,048 个字符。”。

我正在 iOS (Swift) 中创建签名 URLAWSS3PreSignedURLBuilder.default().getPreSignedURL(preSignedURLRequest)以未经授权的用户身份使用 AWS Cognito 时。

我尝试了以下方法但无济于事:

  • 选择尽可能短的 3 个字符的 S3 存储桶名称
  • 尽可能缩短文件名。我将文件名限制为 10 个字符加上文件扩展名(总共 14 个字符)。较短的文件名对我来说不可行,因为它们在某种程度上应该是唯一的。

但即使进行了所有这些细微的调整,AWS 返回的签名 URL 有时还是太长。尤其是令牌参数(X-Amz-Security-Token)似乎非常长。通过我的细微调整,我有时会得到短于 2,048 个字符的 URL,但有时会稍长一些。我想找到一个解决方案,保证 URL 不会太长并且可以缩短。

在我自己的私有 AWS URL 缩短器中,以下代码片段创建了重定向到实际长 URL 的 S3 对象。

s3.putObject({
    Bucket: s3_bucket,
    Key: key_short,
    Body: "",
    WebsiteRedirectLocation: url_long,
    ContentType: "text/plain"
  },
  (err, data) => {
    if (err) {
      console.log(err);
      done("", err.message);
    } else {
      const ret_url = "https://" + cdn_prefix + "/" + id_short;
      console.log("Success, short_url = " + ret_url);
      done(ret_url, "");
    }
  });

该方法返回并出现以下错误

网站重定向位置的长度不能超过2,048 人物。

对象元中标题“x-amz-website​-redirect-location”的 putObject 文档声明如下(请参阅:放置对象文档 http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html):

值的长度限制为 2 KB

如何确保初始 AWS 签名 URL 对于 URL 缩短程序来说不会太长?

EDIT:

我发现的问题之一是我在 AWS Cognito 中以未经身份验证的用户身份创建了签名 URL。因此,签名的 URL 包含这个长得离谱的令牌作为参数。我不想将 accessKey 和 ShortKey 嵌入 iOS 应用程序中,这就是我切换到 AWS Cognito 的原因(请参阅AWS 认知 https://aws.amazon.com/blogs/mobile/how-amazon-cognito-keeps-mobile-app-users-data-safe/)。但目前没有授权用户,只有未经授权的用户,我需要作为未经授权的 AWS Cognito 用户创建签名 URL。如果我使用 accessKey 和 ShortKey 创建带有常规凭据的签名 URL,我会得到一个更短的 URL。但为此我必须将 accessKey 和 ShortKey 嵌入 iOS 应用程序中,这是不推荐的。


我通过创建一个 AWS lambda 来创建预签名 URL 并返回预签名 URL,从而解决了该问题。预签名 URL 允许调用者访问 (getObject) S3 资源。对此有两种选择:

  1. 分配给 AWS lambda 的角色具有 getObject 的 S3 权限。生成的预签名 URL 将包含比使用 AWS Cognito 在 iOS 应用程序中颁发的临时凭证创建的预签名 URL 短得多的令牌。
  2. 将具有 getObject 的 S3 权限的角色的访问密钥和秘密密钥直接嵌入到 AWS lambda 中,这将为您提供更短的 URL,因为生成的预签名 URL 中不包含令牌。 (例如。示例 AWS 代码 https://stackoverflow.com/questions/38831829/nodejs-aws-sdk-s3-generate-presigned-url)

我作为未经授权的认知用户在我的 iOS 应用程序中调用此 lambda。从 AWS lambda 接收到预签名 URL 后,我可以缩短它,因为使用此方法预签名 URL 会短得多。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AWS 签名的 URL 太长,无法缩短 的相关文章

  • 创建 CloudFront Distribution 时出现 Crypp CloudFormation 失败

    我设置了一个 CloudFormation 模板来跟踪 CloudFront 分发等 设置完毕后 我创建了一个AWS CertificateManager Certificate and an AWS CloudFront Distribu
  • AWS cognito身份池ABAC如何映射自定义多值属性?

    来自身份提供商的开放 ID 令牌示例 本例中为 Cognito 用户池 cognito groups testers admins email verified false 我想使用ABAC 就像这里给出的例子一样 https docs a
  • 访问 AWS 上的 Tensorboard

    我正在尝试访问 AWS 上的 Tensorboard 这是我的设置 张量板 tensorboard host 0 0 0 0 logdir train 在端口 6006 上启动 TensorBoard b 39 您可以导航到http 172
  • 从 EC2 实例 ID 创建 AMI 时,command.resolveMiddleware 不是 AWS SDK 的函数,想知道为什么?

    我当时正在开发 AWS SDK 版本 3 并尝试以编程方式从 EC2 实例创建 AMI 以下是我使用的脚本 Imports TODO Import the ec2 client const EC2Client CreateImageComm
  • 如何隐藏 URL 中的 ID

    我以前在 Stack Overflow 上见过这类问题 但没有一个真正有帮助 我也用谷歌搜索过 但没有骰子 我想知道如果用户单击选项卡本身是否可以隐藏 URL 中的 ID 这是网页 www planet nu dev new experia
  • 无法使用前导 ../ 在顶级目录之上退出

    我有一个 asp net 网站 我们有管理区域 其中的登录页面仅供管理员使用 并且所有网站都允许所有人使用 当我收到此错误时 我需要询问如何为其定义正确的安全配置 Cannot use a leading to exit above the
  • 将旧锚链接重定向到新锚链接

    我正在彻底修改其他人为我的组织构建的网站 它最初设置为 不太好 的锚链接 其中包含空格 我已经用效果更好的新锚替换了这些锚 例子 其中一位老主播看起来像这样 course To Have哪些浏览器会幸运地转换为 course To 20Ha
  • 如何更改 Amazon Redshift 中的默认时区?

    默认情况下将时间戳列设置为 SYSDATE 将其存储为UTC 是否可以更改时区 以便 SYSDATE 将日期和时间存储到不同的时区 到目前为止 我已经检查了SET http docs aws amazon com redshift late
  • DynamoDB 中的时间戳应使用什么数据类型?

    我是 DynamoDB 新手 我希望创建一个使用 DeviceID 作为哈希键 时间戳作为范围键和一些数据的表 DeviceID 123 Timestamp 2016 11 11T17 21 07 5272333Z X 12 Y 35 在
  • 从 EC2 W2008 实例创建 AMI - 为什么从来没有获得密码?

    我正在尝试做什么 我正在尝试克隆 EC2视窗2008通过管理控制台实例 该实例基于 Windows Server2008 i386 Base v104 ami 92ba43fb 但上面安装了许多应用程序 我想为新实例保留这些应用程序 发生了
  • 使用 Lambda 函数运行 AWS Athena 的查询

    我在 AWS Athena 上创建了一个表 可以在其中运行任何查询而不会出现任何错误 select from mytestdb test 该表有三列 customer Id product Id price 我尝试创建一个 lambda 函
  • 在 Elastic Beanstalk SSH 上运行 Django 命令 -> 缺少环境变量

    所以这对我来说是一个长期存在的问题 我很想解决它 我也认为这会帮助很多其他人 我希望在 Elastic Beanstalk EC2 实例上进行 ssh 操作后运行 Django 命令 例如 python manage py dumpdata
  • 使用 Terraform 管理访问 RDS 数据库的凭据时出现问题

    我通过 Terraform 创建了一个秘密 该秘密用于访问也在 Terraform 中定义的 RDS 数据库 并且在秘密中 我不想包含username and password 因此我创建了一个空密钥 然后在 AWS 控制台中手动添加凭证
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • 从本地计算机连接到 AWS 上的 Neptune

    我正在尝试从办公室的本地计算机连接到 AWS 实例中的 Neptune DB 就像从办公室连接到 RDS 一样 是否可以从本地计算机连接 Neptune 数据库 Neptune 数据库是否公开可用 开发人员有什么方法可以从办公室连接 Nep
  • 表单提交后 Django 重定向不起作用

    Django 新手 所以这个可能有一个非常简单的答案 但我一生都找不到具体的解决方案 我只是想在使用 FileField 提交表单后重定向到新的 URL 我可以单独导航到该 URL 效果很好 文件上传正确 因此我知道它已正确验证 但重定向返
  • AWS SQS Batch SendMessageBatchRequest 非常慢

    我的应用程序使用 SendMessageBatchRequest 将每个请求发布 10 条消息到 AWS SQS 每条消息的大小小于250字节 该应用程序预计每天发布约一百万条记录 但要实现这一目标 消息发布的速度非常慢 AmazonSQS
  • 我们能否知道回形针下载何时完成?

    我有一个应用程序 我需要知道用户的 Rails Paperclip 文件下载时间complete 我的应用程序设置为与 Amazon S3 交互 当用户收到完整的文件时 我需要运行 JavaScript 函数 我怎样才能做到这一点 跟踪天气
  • URL 中的 %2C 是什么?

    在 URL 中 什么是 2C编码的含义及其用途是什么 查看http www asciitable com http www asciitable com 看着那 这Hx 十六进制 列 2C映射到 任何不寻常的编码都可以通过这种方式检查 Hx
  • 对 URL 进行编码 C#

    所以我有一个看起来像这样的 URL http www test com folder1 id 3 但基本上 当他们单击按钮时 我想在 URL 栏中显示与该 id 关联的值的名称 例如 id 3 是名为 Rollex 的手表 所以我想要读取

随机推荐

  • Win32 DrawText 行高

    我正在调用 Win32DrawText函数将一些文本输出到设备上下文中 文本很长 可以很好地换行到第二行 问题是我需要稍微减少行之间的间距 我想减少行高 关于如何做到这一点有什么想法吗 我只想打电话DrawText两次 每行一次 但随后我必
  • 检查 enum 是否已过时

    我如何检查是否enum如果标记为过时 public enum MyEnums MyEnum1 Obsolete How can you know that I m obsolete MyEnum2 MyEnum3 现在在运行时 我需要知道哪
  • 递归相对于 git rm -r [文件名] 意味着什么

    我正在学习一些 git 教程 但不明白运行之间的区别 git rm path to file and git rm r path to file 递归到底是什么意思 提前致谢 从 git rm 手册页 主目录名称 例如dir去除dir fi
  • 对“lzma_code”的未定义引用

    我尝试打包我的应用程序并静态链接所有库 但我收到此错误 Makefile 如下所示 CC gcc INCPATH I home johnny Application FileBasedReG include RealityGrid LIBS
  • 可以在 UUID 列上创建索引吗?

    是否可以在 Cassandra 中的 UUID TIMEUUID 列上创建索引 我正在测试一个模型设计 该设计在 UUID 列上有一个索引 但对该列的查询始终返回找到的 0 行 我有一个这样的表 create table some data
  • 在VS2008中使用wpf透明png

    我想在 WPF VS2008 中制作一个半透明的 UI 因此我将表单设为透明 并想在其顶部显示一个半透明 png 其中包括 孔 如何显示半透明png 半透明 意味着它有可以看到的孔 另外 我如何在 C 中完成此操作 而不使用 WPF Tha
  • 未找到“GuzzleHttp\Client”类

    我同时使用Guzzle http guzzle readthedocs org en latest 并首次推出 Codeigniter 3 0 我也承认我是第一次使用 php 命名空间 我正在尝试根据文档中提供的示例使用 Guzzle 发出
  • GenJar 更换或更新?

    GenJar 是一个专门的 Ant 任务 它基于类依赖关系而不是简单地基于目录的内容构建 jar 文件 http genjar sourceforge net http genjar sourceforge net 确实有用 但是项目好像不
  • Django 无法导入设置

    我正在尝试在我的项目中使用 django admin dbshel l 任何其他 cmd 都会给出相同的结果 我得到了 You must either define the environment variable DJANGO SETTI
  • Powershell脚本运行缓慢

    我正在编写一个脚本来检查大约 15 个远程服务器上的版本 但该脚本的执行时间比我预期的要长得多 listServers compName1 compName2 compName3 compName15 Out File C temp jav
  • 如何轻松区分/比较 TFS 中的 2 个搁置集?

    有没有一种方法可以比较 TFS 中的 2 个搁置 而不必在单独的工作区中取消搁置并比较文件 我一直在寻找相同的东西 即比较两个书架的内容 而不需要取消其中之一的书架 最终为该功能编写一个 Visual Studio 扩展 该扩展适用于 Vi
  • 使用 WinForms 绘制宽线时出现 OutOfMemoryException

    这个太疯狂了 我只画了几千条线OnPaint处理程序 没有问题 当pen Width lt 1 或者当屏幕上没有很多行时 好的 我画了一张比例尺地图 线宽随地图缩放 当我缩放一些地图时 我得到OutOfMemoryException WHY
  • 在第三方网站的 iframe 中访问时,未为子域设置 Django csrf cookie

    到目前为止 我的应用程序运行良好 所有操作都是通过访问其公共 IP 来完成的 现在 它被添加到主站点 名称为 app mainsite com 这样就可以访问了 我可以登录等等一切 但我的应用程序有点特别 它的某个功能允许用户在任何第三方网
  • Android中如何获取经度和纬度

    我想找到我当前位置的经度和纬度 但我一直得不到NULL double lat loc getLatitude Cause the result is null so can t know longitude and latitude dou
  • 按给定的时间增量查找数据帧列中的时间戳

    我有一个包含时间戳列的数据框 我的目标是找到每行的第一个时间戳 该时间戳大于该行的时间戳给定的偏移量 例如 0 01 秒 我尝试使用这里给出的答案 https stackoverflow com questions 32237862 fin
  • 如何使用 Angular Elements 创建具有可自定义模板的 Web 组件?

    我想使用 Angular Elements 创建一个 Web 组件库 该库具有默认模板 但允许开发人员覆盖输出 例如 考虑一个搜索结果组件 我可能有一个如下所示的默认模板 h1 Search results for query h1 但开发
  • React Native 中组件之间的导航

    我需要在 React Native 的两个视图之间导航 但问题是我的组件 其中导航按钮位于其他组件上 我使用反应导航 我来给你展示 我在这里有我的组件 MainPage class MainPage extends Component re
  • 查找 NumPy 数组中到最近零的距离

    假设我有一个 NumPy 数组 x np array 0 1 2 0 4 5 6 7 0 0 在每个索引处 我想找到到最接近的零值的距离 如果位置本身为零 则返回零作为距离 之后 我们只对到当前位置右侧最接近的零的距离感兴趣 超级天真的方法
  • 选择选项“selected”属性

    我这里脑子一片空白 基本上我所做的是创建一个迷你文章管理器 每篇文章都可以分配到在选择下拉列表中定义的以下类别之一 Design 发展 Other 当我去编辑一篇文章时 我从数据库中检索了数据并填充了输入和文本区域 我现在想做的是应用sel
  • AWS 签名的 URL 太长,无法缩短

    我正在使用 AWS 创建一个签名 URL 以便我可以安全地将此 URL 传递给另一个 API 以供临时使用 签名的 URL 指向 S3 资源 问题是其他 API 不接受这么长的链接 因此我正在尝试缩短它 我尝试使用类似的缩短器goo gl