gpt4 book ai didi

node.js - 通过 HTTP 确认 SNS 订阅时出现授权错误

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:14 26 4
gpt4 key购买 nike

我正在编写一个简单的 SNS 客户端,用于订阅 SNS 主题,然后收听通知。我可以成功提交 sns.subscribe 请求,但是当我从 AWS 获取 SubscriptionConfirmation POST 消息并尝试使用 sns.confirmSubscription 进行响应时我收到一个 AuthorizationError 返回:

[AuthorizationError: User: arn:aws:iam::xxx:user/mv-user is not authorized to perform: SNS:ConfirmSubscription on resource: arn:aws:sns:us-east-1:xxx:*]

如果我在对服务器的 GET 查询中使用完全相同的 Token 和 TopicArn,则订阅确认工作正常,无需身份验证。

知道为什么它不起作用吗?我的 SNS 主题是完全开放的,发布/订阅权限设置为“所有人”。

作为引用,我的代码是这样的:


var params = {
TopicArn: topicArn, // e.g. arn:aws:sns:us-east-1:xxx:yyy
Token: token // long token extracted from POST body
};

sns.confirmSubscription(params, function (err, data) {
if (err) {
// BOOOM - keep getting here with AuthorizationError
} else {
// Yay. Worked, but never seem to get here :(
}
});

但是,如果我在浏览器中导航到与此类似的 URL(即完全未经身份验证),它会完美运行:

http://sns.us-east-1.amazonaws.com/?Action=ConfirmSubscription&Token=<token>&TopicArn=arn%3Aaws%3Asns%3Aus-east-1%3Axxx%3Ayyy&Version=2010-03-31

唯一的区别似乎是在编程版本中包含“授权”和“签名” header (使用 Wireshark 检查)。

有什么想法吗?提前致谢!

更新

在我的代码中,如果我只是以编程方式对 SubscriptionConfirmation 消息中的 SubscribeURL 执行简单的 GET 请求,则效果很好。 confirmSubscription API 调用不起作用似乎很奇怪。现在可能会坚持使用此解决方法。

更新2

在调用 sns.unsubscribe 时也会遇到同样的错误,尽管在每个通知中调用 UnsubscribeURL 仍然有效。似乎其他人也遇到过这个问题,但找不到任何解决方案。

最佳答案

我在开发我的应用程序时遇到了类似的问题。我最终解决它的方式如下:

  1. 转到 IAM 并点击您的用户
  2. 转到权限选项卡并单击“附加策略”
  3. 使用过滤器过滤“AmazonSNSFullAccess”
  4. 将上述政策附加到您的用户。

上面应该处理它。

如果你想要花哨的,你可以创建一个基于“AmazonSNSFullAccess”的自定义策略并将其应用于你的用户。

自定义策略类似于以下内容:

{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sns:ConfirmSubscription"
],
"Effect": "Allow",
"Resource": "YOUR_RESOURCE_ARN_SHOULD_BE_HERE"
}
]
}

关于node.js - 通过 HTTP 确认 SNS 订阅时出现授权错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28025984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com