AWS Cognito - AdminInitiateAuth против InitiateAuth - PullRequest
0 голосов
/ 13 декабря 2018

Мы стремимся использовать AWS Cognito для аутентификации с архитектурой, которая выглядит следующим образом: client (browser) -> our server -> AWS Cognito

При различных конфигурациях initiateAuth кажется не отличается от AdminInitiateAuth, и поэтому я хотел бычтобы понять, когда под этими конфигурациями имеет значение, выбирается ли одно из другого.

Кажется, что когда я создаю приложение с client secret и использую initiateAuth, кажется, что это почти та же интеграциявоспринимается как adminInitiateAuth, использующий поток аутентификации ADMIN_NO_SRP_AUTH.Последний даже не требует учетных данных AWS, как указано в документации AWS.Моя интеграция с Cognito выглядит следующим образом:

initiateAuth :

  const payload = {
    AuthFlow: "USER_PASSWORD_AUTH",
    ClientId: cognitoClientId,
    AuthParameters: {
      USERNAME: username,
      PASSWORD: password,
      SECRET_HASH: generateSignature(username)
    }
  }
  const response = await cognitoClient.initiateAuth(payload).promise();

adminInitiateAuth :

  const payload = { 
    UserPoolId: userPoolId,
    AuthFlow: "ADMIN_NO_SRP_AUTH",
    ClientId: cognitoClientId,
    AuthParameters: {
      USERNAME: username,
      PASSWORD: password,
      SECRET_HASH: generateSignature(username)
    }
  }
  const response = await cognitoClient.adminInitiateAuth(payload).promise();

Вы можетевижу разницу в различных значениях AuthFlow, вызывающих разные методы и ADMIN_NO_SRP_AUTH, требующих параметр UserPoolId, который мне кажется поверхностным.

Мы также генерируем подпись на основе секрета клиента, который является чем-точто мы будем обращаться безопасно.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Я понимаю, что вы хотели бы знать разницу между вызовами API InitiateAuth и AdminInitiateAuth в Amazon Cognito.Чтобы пояснить использование вызовов API:

  • InitiateAuth является вызовом API на стороне клиента / браузера, и вызову API не требуются какие-либо конфиденциальные учетные данные для вызова и других параметров.
  • AdminInitiateAuth предназначен для запуска на стороне сервера, а для вызова API всегда требуются учетные данные разработчика для успешного ответа.Это связано с тем, что вызов API является подписанным вызовом API AWS SigV4.

Кроме того, оба вызова API поддерживают разные потоки аутентификации, как указано ниже.

InitiateAuth поддерживает следующие потоки аутентификации:

  • USER_SRP_AUTH
  • REFRESH_TOKEN_AUTH
  • USER_PASSWORD_AUTH
  • CUSTOM_AUTH1028 *

    Обратите внимание, что в документации по интерфейсу командной строки AWS [a] в настоящее время указано, что ADMIN_NO_SRP_AUTH является возможным значением.Однако я проверил вызов API на своем конце и могу подтвердить, что документация для CLI в настоящее время неверна.

    AdminInitiateAuth поддерживает следующие потоки аутентификации:

    • USER_SRP_AUTH
    • REFRESH_TOKEN_AUTH
    • CUSTOM_AUTH
    • ADMIN_NO_SR44_AH1045 * USER_PASSWORD_AUTH

    Пример использования InitiateAuth: если вы хотите, чтобы ваши пользователи проходили аутентификацию в вашем веб-приложении.

    Пример варианта использования AdminInitiateAuth: Любой сценарий использования, для которого требуется аутентификация на стороне сервера или доступ на основе определенных учетных данных AWS, чтобы отфильтровать, что только определенные пользователи IAM могут проходить проверку подлинности с использованием Cognito.

    Как указывалось george ранее, InitiateAuth было бы идеально для вашего варианта использования, поскольку ваше приложение является клиентским приложением.Кроме того, если вы беспокоитесь о безопасности, вы можете использовать USER_SRP_AUTH с InitiateAuth.Для получения дополнительной информации об использовании потока USER_SRP_AUTH в вашем производственном коде вы можете обратиться к следующей документации NPM [b].

    Ссылки

    [a].https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/initiate-auth.html

    [b].https://www.npmjs.com/package/cognito-srp

0 голосов
/ 14 декабря 2018

initiateAuth и adminInitiateAuth выполняют аналогичные действия, однако имеют разные варианты использования и последовательность действий.

initiateAuth используется, когда у вас есть клиентское приложение для конечного пользователя. Пользователь вводит свои кредиты, и они отправляются по протоколу безопасного удаленного пароля.Если поток завершается успешно, конечный пользователь получает токен обратно и получает доступ.Этот поток используется в SDK для Android, IOS и Javascript, потому что он связан со стороной клиента.

adminInitiateAuth используется, когда у вас нет клиентского приложения для конечного пользователя, но есть безопасное фоновое приложение, использующее Java, Python или какой-либо другой внутренний язык.Этот метод не принимает учетные данные пользователя с именем пользователя и паролем для входа администратора, но требует учетные данные AWS.

В вашем случае, если у вас было клиентское приложение ---> Cognito ииспользуйте, например, Android SDK или Javascript SDK, тогда вы должны использовать initiateAuth из SDK, передавая учетные данные пользователя.Однако, браузер -> бэкэнд -> Cognito означает, что у вас есть выделенный бэкэнд, поэтому в вашем случае вы должны adminInitiateAuth.Подробнее здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...