我正试图使用symfony 5 SQS使用者使用来自SQS的消息,当aws密钥包含+
或等特殊字符时,我遇到了问题。
这是我的.env
文件:
MESSENGER_TRANSPORT_DSN="https://sqs.eu-west-3.amazonaws.com/XXXXXXXX/bonobo-asg?access_key=XXXX&secret_key=XXXX+XXXXXXXXXXX®ion=eu-west-3&auto_setup=false"
我的messenger.yml
配置文件:
framework:
messenger:
transports:
asg:
dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
serializer: AppMessengerSnsSerializer
当我启动消费者时,我得到以下错误:
[AsyncAwsCoreExceptionHttpClientException (403)]
HTTP 403 returned for "https://sqs.eu-west-3.amazonaws.com/".
Code: SignatureDoesNotMatch
Message: The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for de
tails.
我认为它来自密钥中的特殊字符,因为当我尝试使用另一个只包含字母和数字的密钥时,它可以很好地工作。
我试图用转义特殊字符,但它给了我同样的错误。
如何将包含特殊字符的密钥与symfony sqs消费者一起使用?
我遇到了同样的问题,但发现Symfony的DSN被解析为普通URL。
因此,如果您的URL参数(在我们的例子中是access_key
或secret_key
(包含一些特殊字符,则需要对它们进行URL编码。
用%2B
代替+
,用%2F
代替/
,效果很好。
参考:https://github.com/symfony/symfony/issues/32021