Установка aws - усиление сеанса пользователя вручную - PullRequest
0 голосов
/ 06 мая 2020

У меня есть один пул пользователей когнитивного анализа, который используется несколькими приложениями. У меня есть центральное приложение для аутентификации, в котором пользователи могут войти / зарегистрироваться / resetPasswords / et c все, что связано с авторизацией.

У меня есть пять других приложений, к которым пользователи могут получить доступ. Вместо того, чтобы заставлять их входить в каждое приложение, я встраиваю приложение аутентификации в iframe. Если пользователь вошел в систему, он отправляет сообщение postMessage в родительский документ, или если токен недействителен после входа пользователя в систему, он выполняет postMessage с объектом сеанса когнито.

Есть ли что-то вроде Auth.setUserSession (сеанс), что можно сделать в родительском документе? Прямо сейчас мне нужно создать кучу строк со значениями токена и имени пользователя и сохранить их вручную в localStorage.

Я просматривал код aws -amplify auth, но не вижу все, что может сделать sh это.

Спасибо.

В родительском документе:

    const eventMethod = window.addEventListener ? 'addEventListener' : 'attachEvent';
        const eventListener = window[eventMethod];
        const messageEvent = eventMethod === 'attachEvent' ? 'onmessage' : 'message';
        eventListener(messageEvent, async evt => {
          const session = _.get(evt, 'data.session');
          if (session) {
              this.saveUserSession(session);
          }
        }, false);

        private saveUserSession(session) {
// this is the code that I would like to simplify with something
// Auth.setUserSession(session)

            const cognitoClientId = environment.COGNITO.Auth.userPoolWebClientId;

            const userName = _.get(session, 'idToken.payload.email', '');
            const makeKey = (name) => `CognitoIdentityServiceProvider.${cognitoClientId}.${userName}.${name}`;

            localStorage.setItem(makeKey('accessToken'), JSON.stringify(_.get(session, 'accessToken', '')));
            localStorage.setItem(makeKey('idToken'), JSON.stringify(_.get(session, 'idToken', '')));
            localStorage.setItem(makeKey('refreshToken'), JSON.stringify(_.get(session, 'refreshToken', '')));
            localStorage.setItem(makeKey('clockDrift'), JSON.stringify(_.get(session, 'clockDrift', '')));
            localStorage.setItem(`CognitoIdentityServiceProvider.${cognitoClientId}.LastAuthUser`, userName);
          }

In the auth application, after a user successfully logs in:

    const session = await Auth.currentSession();
          window.parent.postMessage({session}, '*');
...