AWS - создание динамического разрешения для ресурсов IOT с проприетарным пользователем - PullRequest
0 голосов
/ 06 февраля 2019

Мы реализуем функцию, когда мобильное приложение должно отправлять сообщение на теневое устройство.У нас есть пара требований: 1. Мы используем нашего собственного проприетарного пользователя. 2. Приложение может общаться с теневым устройством в течение ограниченного времени. 3. Приложение может только отправлять сообщение своей текущей тени (определяется нашей бизнес-логикой.)

В настоящее время мы сделали 1. Создали пул удостоверений с разрешениями для всех пользователей выполнять все действия с ресурсами 1. Создать GUID (при регистрации пользователя) 2. Сохранить этот GUID в нашей базе данных (При регистрации пользователя)) 3. вызовите getOpenIdTokenForDeveloperIdentity с нашим GUID (при регистрации пользователя) 4. когда приложение хочет отправить сообщение, оно выполняет запрос API нашего сервиса, а сервер создает токен с помощью вызова acceptRole.Разумеется, разрешение генерируемого токена ограничено.

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

Можете ли вы помочь мне с предложением потока

Спасибо!

export function getAwsCognitoToken(userIdentityId) {
  AWS.config.update({
    region: awsRegion,
  });
  const identity_provider_name = identityProviderName;
  const params: OpenIdRequest = {
    IdentityPoolId: awsIdentityPoolId,
    Logins: {
      [identity_provider_name]: 'us-east-1:' + userIdentityId,
    },
  };
  const cognito = new AWS.CognitoIdentity({ apiVersion: '2014-06-30' });
  return cognito.getOpenIdTokenForDeveloperIdentity(params).promise();
}

export function assumeRole(token) {
  AWS.config.update({
    region: awsRegion,
  });
  const sts = new AWS.STS();
  var params2 : AssumeRoleRequest = {
    DurationSeconds: 3600,
    RoleArn: 'arn:aws:iam::***:role/iot_user_role',
    RoleSessionName: 'app1',
    WebIdentityToken: token,
  };
  sts.assumeRoleWithWebIdentity(params2, (err, data) => {
    console.log(err), console.log(data);
  });
...