Зарегистрируйте устройство aws iot, используя учетные данные cognito

Я работаю над приложением, в котором мне нужно отслеживать изменения некоторых устройств и показывать их в интерфейсе.

Для входа пользователя я использую cognito и получаю учетные данные после входа в систему, и у меня уже есть действительные учетные данные, поскольку я подключил AWS DynamoDB, используя те же учетные данные.

Теперь я хочу зарегистрировать устройство aws.iot с теми же учетными данными cognito.

Я подписан на https://github.com/aws/aws-iot-device-sdk-js

Я проверил некоторые статические учетные данные с пользователем aws, например:

client.device = awsIot.device({
    clientId: clientID,
    host: host,
    accessKeyId: AccessKeyId,
    secretKey: secretKey,
    protocol: 'wss'
});

И это прекрасно работает.

Затем я попробовал то же самое, используя aws cognito AssessmentKeyId и secretKey, но на этот раз я получил 403.

Я проверил подключение к AWS IoT с помощью веб-сокета с Cognito аутентифицировал пользователей, но это не помогло.

Мой текущий код выглядит так:

    var awsIot = require('aws-iot-device-sdk');

    AWS.config.credentials.get(() => {
        const IoT = new AWS.Iot();
        IoT.attachPrincipalPolicy({
            policyName: 'PubSub',
            principal: AWS.config.credentials.identityId
        }, (err, res) => {
            if (err) {
            } else {
                let credential;
                if (AWS.config.credentials && AWS.config.credentials.data && AWS.config.credentials.data.Credentials) {
                    let credentials = AWS.config.credentials.data.Credentials;
                    awsIot.device({
                       clientId: clientID,
                       host: host,
                       accessKeyId: credentials.AccessKeyId,
                       secretKey: credentials.secretKey,
                       protocol: 'wss',
                       sessionToken: credentials.SessionToken
                    });
                }
            }
        });
    });

Может ли кто-нибудь помочь мне, что мне здесь не хватает.


person Indranil Mondal    schedule 22.11.2017    source источник


Ответы (2)


Что сработало для меня, так это передача данных из объекта AWS.config.credentials напрямую, т.е.

if (AWS.config.credentials) {
  awsIot.device({
     clientId: clientID,
     host: host,
     accessKeyId: AWS.config.credentials.accessKeyId,
     secretKey: AWS.config.credentials.secretAccessKey,
     protocol: 'wss',
     sessionToken: AWS.config.credentials.sessionToken
  });
}

Возможно, проверьте также, чтобы accessKeyId и т. д. начинались с маленьких букв, а не с прописных, если вы звоните с помощью этого метода.

person cy6581    schedule 26.11.2017
comment
Извините, это тоже не работает, да, я начинал ключ доступа с заглавной буквы, раньше я хорошо писал в нижнем регистре, но все равно получал ту же ошибку. - person Indranil Mondal; 26.11.2017

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

    AWS.config.credentials.get(() => {
        const IoT = new AWS.Iot();
        IoT.attachPrincipalPolicy({
            policyName: 'PubSub',
            principal: AWS.config.credentials.identityId
        }, (err, res) => {
            if (err) {
            } else {
                let credential;
                if (AWS.config.credentials && AWS.config.credentials.data && AWS.config.credentials.data.Credentials) {
                    let credentials = AWS.config.credentials.data.Credentials;
                    var device = awsIot.device({
                       clientId: clientID,
                       host: host,
                       accessKeyId: '',
                       secretKey: '',
                       protocol: 'wss',
                       sessionToken: ''
                    });
                    device.updateWebSocketCredentials(credentials.AccessKeyId, credentials.SecretKey, credentials.SessionToken, credentials.Expiration);
                }
            }
        });
    });
person Indranil Mondal    schedule 26.11.2017
comment
Эй, Индра, значит, для каждого пользователя cognito у тебя есть зарегистрированная штука aws-iot? т.е.; есть вещи, с которыми вы разговариваете, которые являются некоторыми устройствами, также пользователь, который будет подключаться через приложение, должен быть вещами (зарегистрировать новую вещь для каждого нового пользователя, который будет подключаться к aws-iot через приложение?) в aws-iot? - person user2967920; 25.01.2019