Подтвердить что ты не робот

Как использовать AWS IoT для отправки/получения сообщений в/из веб-браузера

Мы пытаемся использовать Amazon Web Services Internet of Things (AWS IoT) для отправки сообщений из/в веб-браузер (например:. Учитывая, что AWS IoT поддерживает JavaScript, мы ожидаем, что это возможно...

Мы провели поиск в документации AWS IoT, но нашли только примеры на стороне сервера (которые раскрывают секреты/ключи AWS...)

Есть ли хорошие рабочие примеры или учебные пособия для использования AWS IoT для отправки/получения сообщений через WebSockets/MQTT в браузере (например: аутентификация с помощью AWS Cognito)? Спасибо!

4b9b3361

Ответ 1

Здесь образец, который использует пул идентификаторов cognito в JS для подключения, публикации и реагирования на подписку.

// Configure Cognito identity pool
AWS.config.region = 'us-east-1';
var credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:your identity pool guid',
});

// Getting AWS creds from Cognito is async, so we need to drive the rest of the mqtt client initialization in a callback
credentials.get(function(err) {
    if(err) {
        console.log(err);
        return;
    }
    var requestUrl = SigV4Utils.getSignedUrl('wss', 'data.iot.us-east-1.amazonaws.com', '/mqtt',
        'iotdevicegateway', 'us-east-1',
        credentials.accessKeyId, credentials.secretAccessKey, credentials.sessionToken);
    initClient(requestUrl);
});

function init() {
  // do setup stuff
}

// Connect the client, subscribe to the drawing topic, and publish a "hey I connected" message
function initClient(requestUrl) {
    var clientId = String(Math.random()).replace('.', '');
    var client = new Paho.MQTT.Client(requestUrl, clientId);
    var connectOptions = {
        onSuccess: function () {
            console.log('connected');

            // subscribe to the drawing
            client.subscribe("your/mqtt/topic");

            // publish a lifecycle event
            message = new Paho.MQTT.Message('{"id":"' + credentials.identityId + '"}');
            message.destinationName = 'your/mqtt/topic';
            console.log(message);
            client.send(message);
        },
        useSSL: true,
        timeout: 3,
        mqttVersion: 4,
        onFailure: function () {
            console.error('connect failed');
        }
    };
    client.connect(connectOptions);

    client.onMessageArrived = function (message) {

        try {
            console.log("msg arrived: " +  message.payloadString);
        } catch (e) {
            console.log("error! " + e);
        }

    };
}

Документация для вызова credentials.get, здесь

Не забудьте авторизовать роль IAM для подписки/публикации. Здесь образец:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iot:Connect"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Receive",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iot:Subscribe",
            "Resource": [
                "arn:aws:iot:us-east-1::your/mqtt/topic"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iot:Publish",
            "Resource": [
                "arn:aws:iot:us-east-1::your/mqtt/topic"
            ]
        }
    ]
}

Ответ 2

В случае, если кто-либо ищет решение: здесь учебник, который демонстрирует с помощью простого приложения чата, как получать обновления в реальном времени в интерфейс ReactJS с использованием Serverless и Websockets на AWS IOT. Исходный код учебника доступен в Github.

Ответ 3

Трудно найти хорошие учебные пособия для интеграции AWS IoT в браузере.

В принципе, вам нужно иметь некоторый метод проверки подлинности (Facebook, Google, AWS Cognito, собственный SSO-сервис с поддержкой SAML), а затем вам необходимо выполнить следующие шаги:

  1. Настройте пул пользователей Cognito или объединенный пул идентификаторов с помощью метода проверки подлинности.
  2. В браузере вы должны реализовать расширенный поток (https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication-part-4-enhanced-flow/)
  3. Вам необходимо AttachPolicy в IoT для вашего пользователя Cognito identityId - он будет использоваться в качестве принципала (так же, как устройства используют сертификаты).
  4. Вам нужно создать клиент MQTT с помощью https://github.com/aws/aws-iot-device-sdk-js и предоставить ваш временный accessKeyId, secretKey и sessionToken полученные от проверки расширенного потока.