Ошибка аутентификации AWS Iot при использовании Open Id Connectivity - PullRequest
1 голос
/ 30 апреля 2019

Соединение AWS IOT с федеративным логином (в идентификаторе cognito) было неудачным

  1. В пуле пользователей Cognito я установил и провайдера идентификации с учетной записью Microsoft в качестве OIDC и войти с учетными данными Microsoft Office.
  2. Путем обмена кодом, сгенерированным Microsoft, я могу получить токен доступа, токен обновления и Id токен из конечной точки токена Cognito.
  3. Путем обмена токеном id с aws.config.credentials я успешно получаю идентификатор ключа доступа, секретный ключ и токен сеанса.
  4. Я пытаюсь подключиться к конечной точке AWS iot, указав идентификатор ключа доступа, секретный ключ и токен сеанса.
  5. Не удалось подключиться к веб-сокету и выдает следующую ошибку.

    2019-04-29 14: 48: 12.006 TRACEID: 420de021-715b-d81d-4a5e-daedde37dfd4 PRINCIPALID: AROAIN6B4B4KMSI2U3UEY: CognitoIdentityCredentials [ОШИБКА] СОБЫТИЕ: MQTT СОЕДИНЕНИЕ СОСТОЯНИЯ АВТОРИЗАЦИИ: СОЗДАНИЕ_ЗАКЛЮЧЕНИЯ АВТОРИЗАЦИИ: АУДИТОР СОСТОЯНИЯ: АВТОРИЗАЦИЯ_ПОЛЬЗОВ.

ПРИМЕЧАНИЕ. С пользователем cognito соединение было успешным

'' '

function connectWSHandler(dispatch){  

var AWS = require('aws-sdk');

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

var AWSConfiguration = {
poolId: 'us-east-1:*****************************', 
host:"a************-ats.iot.us-east-1.amazonaws.com",
region:  'us-east-1'
};

var wsOptions = {
handshakeTimeout:15000,
rejectUnauthorized:false
}

var clientId =  localStorage.getItem("IdentityId"); 

var accessKeyId = localStorage.getItem("AccessKeyId");
 console.log('accessKeyId',accessKeyId);
 var secretKey = localStorage.getItem("SecretKey");
 var sessionToken = localStorage.getItem("SessionToken");

 if(accessKeyId==null || secretKey==null || sessionToken==null)return;

 mqttClient = AWSIoTData.device({
 host:AWSConfiguration.host,
 clientId: clientId,
 protocol: 'wss',
 websocketOptions:wsOptions,

 maximumReconnectTimeMs: 8000,
 debug: true,

 accessKeyId: accessKeyId,
 secretKey: secretKey,
 sessionToken: sessionToken
  });

Соединение с AWS IOT должно быть успешным

1 Ответ

0 голосов
/ 02 мая 2019

Я решил вышеупомянутую проблему, прикрепив политику iot к идентификатору клиента, который мы используем для подключения. ПРИМЕЧАНИЕ. Идентификатор клиента - это не что иное, как идентификатор пользователя

 //Need aws-sdk.js to work
      function attachPrincipalPolicy(policyName, clientid) {
          new AWS.Iot().attachPrincipalPolicy({ policyName: policyName, principal: clientid}, function (err, data) {
            if (err) {
                    console.error(err); // an error occurred
                }
          });
       }

Политика iot должна была быть создана в AWS IOT CORE для подключения и публикации

...