Аутентификация пользователя в AWS Cognito User / Identity Pool с помощью Google в качестве поставщика удостоверений

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

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

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

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

Настраивать

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

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

  3. Создайте веб-приложение Google в консоли Google

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

  5. Настройте пул пользователей для использования Google в качестве поставщика удостоверений, предоставив ему идентификатор клиента веб-приложения Google и секрет клиента из консоли Google.

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

Реализация

  1. Настройте Amplify.Auth:
Amplify.configure({
    Auth: {
        identityPoolId: ,
        region: ,
        userPoolId: ,
        userPoolWebClientId: 
    }
});
  1. Внедрить скрипт 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);
  1. Инициируйте Google API:
window.gapi.load('auth2', function() {
    window.gapi.auth2.init({
        client_id: ,
        scope: 'profile email openid'
    });
});
  1. Разрешить одним нажатием кнопки пользователю Google подписаться:
const ga = window.gapi.auth2.getAuthInstance();
const googleUser = await ga.signIn();
const {id_token, expires_at} = googleUser.getAuthResponse();
const profile = googleUser.getBasicProfile();
  1. Используйте 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 добавляет колоссальные 190 КБ к моему пакету веб-пакетов приложений (сжатый с помощью GZIP, минимизированный, оптимизированный), из-за чего я подавился кофе.

Вопрос 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/] вариант использования для социального / федеративного входа.


person ZenMaster    schedule 27.05.2018    source источник
comment
Могли бы вы дать мне руку? Я пытаюсь реализовать аналогичное решение, но я застрял в пуле идентификаторов и не знаю, как интегрироваться с пулом пользователей.   -  person    schedule 18.09.2018
comment
@placplacboom В пуле пользователей (после его создания) есть параметр, позволяющий определить пул идентификаторов. В моем случае я настроил Google, поэтому мне пришлось предоставить идентификатор, который я получил из консоли разработчика Google. Вы должны создать там приложение, которое затем позволит вам настроить поставщика удостоверений.   -  person ZenMaster    schedule 19.09.2018


Ответы (2)


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

import Amplify from 'aws-amplify'

а также

import Amplify from '@aws-amplify/core'

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

Я думаю ты тоже хочешь

import Auth from '@aws-amplify/auth'

что добавляет лишь немного больше.

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

person daktaklakpak    schedule 17.01.2019

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

person Devon wijesinghe    schedule 07.09.2018
comment
Уточните подробности, возможно, на примере? Чем больше контекста вы дадите, тем больше он будет понятен другим. - person Richie Thomas; 07.09.2018