如何在sdk v2中预签名AWS SQS ReceiveMessage请求?

问题描述 投票:0回答:1

在 2025 年 7 月 31 日 AWS golang sdk v1 的 EOS 公告之后,我将代码迁移到 v2。 我正在尝试将这段 v1 代码迁移到 v2:

type Service {
    sqsService *sqs.SQS
}
....

func (s *Service) getSignedRequestsURL(queueURL string, maxNumOfMessages, visibilityTimeout, waitTimeSeconds int64) (string, error) {
    req, _ := s.sqsService.ReceiveMessageRequest(&sqs.ReceiveMessageInput{
        QueueUrl:            aws.String(queueURL),
        MaxNumberOfMessages: aws.Int64(maxNumOfMessages),
        VisibilityTimeout:   aws.Int64(visibilityTimeout),
        WaitTimeSeconds:     aws.Int64(waitTimeSeconds),
    })

    exp := 20 * time.Minute
    signedURL, err := req.Presign(exp)
    if err != nil {
        return "", err
    }

    return b64.StdEncoding.EncodeToString([]byte(signedURL)), nil
}

使用v2 sdk,现在有一个SQS客户端,可以直接调用接收消息

var sqsClient *sqs.Client
...

res, err := sqsClient.ReceiveMessage(ctx, &sqs.ReceiveMessageInput{
    QueueUrl:            aws.String(queueURL),
    ....
})


如何模仿 req.Presign(exp) 功能来签署 SQS 接收消息 URL? 我是否需要手动构造 URL/请求并手动执行,或者 AWS 提供惯用的方法来执行此操作?我没有看到他们在哪里公开请求数据,以便用户可以在发送之前进行交互和修改..

amazon-web-services go amazon-sqs
1个回答
0
投票

您可以自定义身份验证工作流程,但首先客户端无法自动签署您的服务请求

您可以使用 Amazon Web Services SDK 使用您最喜欢的编程语言访问 Amazon SQS。 SDK 自动执行以下任务:

  • 以加密方式签署您的服务请求
  • 重试请求
  • 处理错误响应

通常 sqs.NewFromConfig 包含必要凭据的配置就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.