Использование внешних провайдеров идентификации с аутентификацией на стороне сервера - PullRequest
0 голосов
/ 03 октября 2018

Я использую AWS SDK для Go, чтобы использовать Cognito для выполнения аутентификации на стороне сервера.Я зарегистрировался и выполнил вход, работая с использованием имени пользователя и пароля.У меня все три внешних провайдера идентификации настроены на основе документации , а также URL-адресов перенаправления и всего остального, к чему призывает документация.

Я знаю, как получить URL для встроенной регистрации/ Страница входа, которую Cognito создаст для вас, и на них есть кнопки входа в систему Google / Facebook / Amazon, но я должен иметь возможность разместить эти кнопки в передней части моего сайта.Я не знаю, как это сделать.

Редактировать: См. Комментарий к посту @ Stu для подробного объяснения того, почему ответ JS SDK помечен как правильный ответ.Это может быть изменено, но не на некоторое время.(tldr; aws go sdk и cognito просто еще не поддерживают это)

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Требования к вашему приложению выросли за пределы использования потока входа Cognito для резака печенья.

Я предлагаю вам просто обработать все ваши аутентификации для Cognito, как показано здесь: https://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-javascript-examples.html

Таким образом, вы можете добавить кнопку входа в Facebook на вашем сайте следующим образом: https://docs.aws.amazon.com/cognito/latest/developerguide/facebook.html

FB.login(function (response) {

  // Check if the user logged in successfully.
  if (response.authResponse) {

    console.log('You are now logged in.');

    // Add the Facebook access token to the Cognito credentials login map.
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
      IdentityPoolId: 'IDENTITY_POOL_ID',
      Logins: {
        'graph.facebook.com': response.authResponse.accessToken
      }
    });

    // Obtain AWS credentials
    AWS.config.credentials.get(function(){
        // Access AWS resources here.
    });

  } else {
    console.log('There was a problem logging you in.');
  }

});

Затем получите пользователя следующим образом:

    var data = { UserPoolId : 'us-east-1_Iqc12345',
        ClientId : '12345du353sm7khjj1q'
    };
    var userPool = new AmazonCognitoIdentity.CognitoUserPool(data);
    var cognitoUser = userPool.getCurrentUser();

    if (cognitoUser != null) {
        cognitoUser.getSession(function(err, session) {
            if (err) {
                alert(err);
                return;
            }
            console.log('session validity: ' + session.isValid());
        });
    }

Дополнительная информация о SDK Facebook: https://developers.facebook.com/docs/facebook-login/web

Поскольку вы собираетесь проходить через процессы настройки потока Cognito в вашем приложении.Дополнительный самородок, я настоятельно рекомендую вам продолжить и настроить пользовательские сообщения с лямбда-триггером.https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-custom-message.html

Обновление: возвращаясь к этому еще раз.

https://docs.aws.amazon.com/sdk-for-go/api/service/cognitoidentityprovider/#CognitoIdentityProvider.AdminInitiateAuth

Здесь вы можете увидеть функцию с именем AdminInitiateAuth.Существуют также функции для присоединения пользователей к поставщикам удостоверений.Таким образом, использование JS SDK, пожалуй, самое простое и, на мой взгляд, решение для интеграции веб-приложения с Cognito.Вы можете четко обрабатывать весь ваш процесс аутентификации, управления токенами, создавать API для входа, выхода и т. Д. На стороне сервера с помощью GO SDK

0 голосов
/ 11 октября 2018

Давайте возьмем пример Facebook.При использовании пользовательского интерфейса Cognito Facebook передает токен OAuth непосредственно Cognito для вашего пользователя.Cognito выполняет некоторые действия, например, проверяет, существует ли уже пользователь, и, если необходимо, создает нового, а затем отправляет вашему приложению токен OAuth AWS.

Теперь, если вы хотите использовать кнопку Facebook на своем веб-сайте, происходит аутентификация.по-другому.Вы должны сами договориться с Facebook, вернуть токен OAuth для пользователя, а затем передать токен доступа Cognito.Cognito выполнит свою работу и вернет вам токен AWS OAuth.

Короче говоря, вам нужно следовать инструкциям по установке SDK Facebook: https://developers.facebook.com/docs/facebook-login/web

SDK Facebook предоставляет доступтокен в вашей сессии, который вы отправляете в Cognito.

Полная информация здесь: https://docs.aws.amazon.com/cognito/latest/developerguide/facebook.html (см. раздел javascript)

РЕДАКТИРОВАТЬ: Я только что натолкнулся на AWS Amplify,Он имеет клиентскую библиотеку JS, которая включает компонент аутентификации.Если вы используете React, похоже, что существует действительно простой способ связать федеративные удостоверения (входы в социальные сети) с Cognito https://aws -amplify.github.io / ampify-js / media / authentication_guide.html .Я не пользовался этой услугой, поэтому не могу сейчас сказать о ней слишком много.

...