Как извлечь токен из SNS Subscribe и использовать его в методе verifySubscription? - PullRequest
1 голос
/ 21 марта 2019

Вариант использования

Я хочу подписаться на электронную почту на тему SNS, и мне нужно подтвердить ее программно, а не вручную нажимать на ссылку подтверждения.

Чтоя сделал

Это обычно для подтверждения, я использую метод SNS confirmSubscription, который будет принимать token в качестве параметра.Я могу получить токен, вызвав метод SNS subscribe, передав протокол как email-json.Для этого я получил следующее сообщение подписки в конечной точке.

{
  "Type" : "SubscriptionConfirmation",
  "MessageId" : "xxx-9160-49a3-960f-xx",
  "Token" : "2336412f37fb687adfaf",
  "TopicArn" : "arn:aws:sns:ap-south-1:xx-xx",
  "Message" : "You have chosen to subscribe to the topic arn:aws:sns:ap-south-1:xx-xx.\nTo confirm the subscription, visit the SubscribeURL included in this message.",
  "SubscribeURL" : "https://sns.ap-south-1.amazonaws.com/?Action=xx&TopicArn=arn:aws:sns:ap-south-1:477530015769:xx-xx&Token=2336412f37fb6872",
  "Timestamp" : "2019-03-21T08:34:26.597Z",
  "SignatureVersion" : "1",
  "Signature" : "bIwq8Q92Yvrn8bBrIDQJ2chc5y/5IPAZPPR4roZ6WfK7kaE0QTbJpqAmHMH0sHL4aoyTrapLwX4e6HaEd6nGny8EAWj5wA2JvFCrO9BFQu",
  "SigningCertURL" : "https://sns.ap-south-1.amazonaws.com/SimpleNotificationService-xx.pem"
}

Что я хочу

Как можно извлечь значение token из вышеуказанного json,Это ниже лямбда, которую я использую для программного подтверждения подписчика sns.

const AWS = require('aws-sdk');
var sns = new AWS.SNS();
var snsconfirm= {
  Token: 'xx', /* required */ -->How can i able to retrieve the token value from the endpoint json.
  TopicArn: 'arn:aws:sns:ap-south-1:xxx:xx-xxx', /* required */
  AuthenticateOnUnsubscribe: 'true'
};
var snsparams = {
  Protocol: 'email-json', /* required */
  TopicArn: 'arn:aws:sns:ap-south-1:xx:xx-xx', /* required */
  Endpoint: 'abc@xyz.com'
};
exports.handler = async (event) => {
    // TODO implement
try {
  const snsrespone = await sns.subscribe(snsparams).promise();
  const confirmsub = await sns.confirmSubscription(snsconfirm).promise();
  } catch (err) {
    console.log(err.message);
    throw err;
  }
};

Любая помощь приветствуется Спасибо

1 Ответ

0 голосов
/ 21 марта 2019

Вы можете только программно подтвердить подписку, если у вас есть токен, как вы уже узнали. Это, скорее всего, гарантирует, что вы не можете подписаться на кого-то неохотно.

Ваша единственная опция, при условии, что у вас есть доступ к конечной точке, - это установить какой-то фильтр, который запускает лямбду, которая может подписаться на ответ. Возможно, установив в вашей электронной почте правило пересылки электронной почты для пересылки электронной почты SES, что, в свою очередь, запускает лямбду, подтверждающую подписку.

...