Аутентификация пользователя в AWS Cognito User / Identity Pool с Google в качестве провайдера идентификации - PullRequest
0 голосов
/ 27 мая 2018

AWS предоставляет два возможных способа работы с Cognito:

  1. «старый» через amazon-cognito-identity-js (и, возможно, amazon-cognito-auth-js) и
  2. «новый» через aws-amplify (что включает в себя вышеупомянутое)

После многих хлопот и обратного инжиниринга мне удалось войти (получить CognitoIdentityCredentials), используя aws-amplify локально как часть усилий по разработке.

Шаги, на которых (имейте в виду, поскольку они важны для вопросов, которым нужно следовать, а также могут помочь кому-то):

Настройка

  1. Создание пула пользователей в консоли Cognito

  2. Создание клиента приложения пула пользователей в консоли Cognito

  3. СоздатьGoogle Web App в консоли Google

  4. Настройка Google Web App для указания http://localhost:8080 (мой локальный сервер разработки)

  5. НастройкаПул пользователей для использования Google в качестве провайдера идентификации, предоставляющий ему идентификатор клиента Google Web App и секрет клиентаom Google Console

  6. Создайте пул удостоверений в консоли Congnito и настройте его для работы с Google в качестве поставщика удостоверений, указав там также идентификатор клиента Google Web App

Реализация

  1. Настройка Amplify.Auth:
Amplify.configure({
    Auth: {
        identityPoolId: ,
        region: ,
        userPoolId: ,
        userPoolWebClientId: 
    }
});
Вставить скрипт Google API:
const script = document.createElement('script');
script.src = 'https://apis.google.com/js/platform.js';
script.async = true;
script.onload = this.initGapi;
document.body.appendChild(script);
Инициировать Google API:
window.gapi.load('auth2', function() {
    window.gapi.auth2.init({
        client_id: ,
        scope: 'profile email openid'
    });
});
Разрешить пользователю Google петь одним нажатием кнопки:
const ga = window.gapi.auth2.getAuthInstance();
const googleUser = await ga.signIn();
const {id_token, expires_at} = googleUser.getAuthResponse();
const profile = googleUser.getBasicProfile();
Используйте profile, id_token, expires_at выше для создания сеанса учетных данных Cognito:
const user = {
    email: profile.getEmail(),
    name: profile.getName()
};

const credentials = await Auth.federatedSignIn(
    'google',
    {token: id_token, expires_at},
    user
);

В этот момент был возвращен объект CognitoIdentityCredentials, правильно заполненный,с токеном и всем ...

Проблема

К сожалению, aws-amplify добавляет колоссальные 190K к моему пакету веб-пакетов приложения (GZIPped, минимизированный, оптимизированный), который сделаля подавился кофе.

Вопрос 1

Можно ли это как-то уменьшить с помощью плагина Babel, который мне не хватает (наверное, нет, так как AWS, видимо, еще в 1995 году и настраиваетвсе на единичных объектах Amplify и Auth).

Вопрос 2

Я сделал это излишне сложным, и есть гораздо более надежное решение?

Вопрос3 (самое главное)

Можно ли это сделать, используя "старый способ" amazon-cognito-identity-js, который НАМНОГО МЕНЬШЕ?

Я не смог найти среди всех (варианты использования)[https://github.com/aws/aws-amplify/tree/master/packages/amazon-cognito-identity-js/] сценарий использования социальной / федеративной регистрации.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Для меня разница между

import Amplify from 'aws-amplify'

и

import Amplify from '@aws-amplify/core'

оптимизирована и уменьшена на ~ 500 КБ.

Я думаю, вы также хотите

import Auth from '@aws-amplify/auth'

, который добавляет лишь немного больше.

Но я согласен, пакет aws-усиление действительно очень большой, и непросто понять, как напрямую использовать основные компоненты (например, aws-cognito-identity-js / es и aws-cognito-auth-js / es).

0 голосов
/ 07 сентября 2018

Вы можете попробовать использовать модульный экспорт в AWS Ampify

.
...