Аутентификация приложения с использованием Cognito и Devise - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь внедрить AWS Cognito в свое приложение для лучшей всесторонней аутентификации. Система представляет собой приложение Rails, которое в настоящее время использует Warden / Devise в качестве метода обработки учетных записей пользователей (вход в систему, регистрация).

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

Я начал реализовывать логику, чтобы справиться с этим, но столкнулся с кирпичной стеной.

Пожалуйста, смотрите ниже мой код.

cognito_authenticatable.rb

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

def authenticate!
   if params[:login]
      region_name = 'us-east-2'
      user_pool_id = 'us-east-2_Qj78BNQon'
      client_id = '1pv3eno72e51mll3q36cuiojmr'

      client = Aws::CognitoIdentityProvider::Client.new(
         region: region_name
      )

      resp = client.initiate_auth({
         client_id: client_id,
         auth_flow: "USER_PASSWORD_AUTH",
         auth_parameters: {
           "USERNAME" => email,
           "PASSWORD" => password
         }
      })
     end
  end

divise.rb

Этот код предназначен только для добавления новой стратегии аутентификации в службу защиты приложений.

config.warden do |manager|
   manager.strategies.add(:cognito, 
   Devise::Strategies::CognitoAuthenticatable)
   manager.default_strategies(:scope => :login).unshift :cognito
   manager.default_strategies(:scope => :login).pop
end

Ошибка вывода в консоли

Aws :: Errors :: MissingCredentialsError (невозможно подписать запрос без установленных учетных данных):

config / initializers / cognito_authenticatable.rb: 23: в `authenticate! '

и вот изображение из приложения localhost, которое было запущено.

Webapplication output once i complete the login form.

Любая помощь по этому вопросу была бы удивительной.

Спасибо заранее.

Ответы [ 2 ]

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

Вы получаете эту ошибку из-за того, что ваш AWS SDK для Ruby настроен неправильно.Эта ошибка, скорее всего, будет существовать не только для API Cognito, но и для любых вызовов API со знаком AWS Signature V4.Пожалуйста, обратитесь к этой документации , чтобы правильно настроить SDK для вашего приложения.

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

Одним из решений может быть снятие отметки с опции генерации секрета клиента при создании клиента приложения в пуле пользователей Cognito. Эта опция включена по умолчанию, и вы должны знать, чтобы снять ее (https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-client-apps.html).

По умолчанию пользовательские пулы генерируют клиентский секрет для вашего приложения. Если вы не хотите, чтобы это произошло, снимите флажок «Создать секрет клиента».

Снять секрет клиента можно только во время создания нового клиента, поэтому вам, возможно, придется удалить свое клиентское приложение и создать новое (ничего страшного).

Я также собираю свои знания по Cognito, Devise, Rails и VueJS в статье Medium: https://medium.com/@morgler/beta-learnings-from-developing-vuejs-quasar-aws-amplify-and-cognito-application-dd38ec58b881

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