Невозможно ограничить доступ к AWS API даже после вызова метода globalsignout с использованием javascript - PullRequest
0 голосов
/ 09 ноября 2018

Я использую AWS API gateway для API и cognito UserPool для безопасности. После аутентификации пользователя мы получим токены, и я использую этот токен для авторизации моего API.

Теперь я пытаюсь разрешить выход авторизованным пользователям cognito, используя javascript. Использовал приведенный ниже код.

if (cognitoUser != null) {
          cognitoUser.globalSignOut({   
                           onFailure: e =>   console.log(e), 
                           onSuccess: r =>   
               console.log('Logout success: ' + r)  
})} 

Я получаю ответ как успешный, но все же я могу получить доступ к своему API с предыдущими токенами. Пожалуйста, предложите мне, как деактивировать все токены, выданные этому пользователю Cognito.

1 Ответ

0 голосов
/ 09 ноября 2018

Идентификационный токен, который API-шлюз использует для аутентификации вызовов API, остается действительным некоторое время.

Я бы проверил токен доступа. Срок его действия истекает сразу после того, как вы вызвали глобальный выход.

Ключевое слово должно выше. Пожалуйста, смотрите этот выпуск . Это постоянная борьба за то, чтобы заставить AWS осуществить немедленный отзыв. Вот соответствующая цитата:

Я работал с командой AWS Cognito, чтобы позаботиться об этом, и получил исправление через CLI следующим образом.

aws cognito-identity update-identity-pool --identity-pool-id --identity-pool-name --allow-unauthenticated-identities --cognito-identity-providers ProviderName=,ClientId=,ServerSideTokenCheck=<true|false>

Установив для параметра ServerSideTokenCheck значение true для идентификатора Cognito Пул, который Identity Pool проверит с Cognito User Pools, чтобы сделать убедитесь, что пользователь не был глобально выписан или удален ранее Identity Pool предоставляет токен OIDC или учетные данные AWS для пользователь. Теперь мы сталкиваемся с другой проблемой кэширования этого токена. в API Gateway в течение 10 минут, который позволил бы этому токену OID все еще быть активен в течение 10 минут, даже если пользователь вышел из системы.

Вот что я имею в виду под тестом для accessToken (у меня был успех с методом # 2):

1.) Вы можете разработать собственный авторизатор для API Gateway ;

2.) Вы можете выполнить проверку в начале ваших лямбда-функций или на ваших серверах, используя:

const AWS = require('aws-sdk');
const awsConfig = require('./awsConfig');

const cognito = new AWS.CognitoIdentityServiceProvider(awsConfig);

// accessToken provided from API Gateway

new Promise((resolve, reject) => {
  cognito.getUser({ accessToken }, (errorCallback, response) => {
    if (errorCallback) {
      reject(errorCallback);
    } else {
      resolve(response);
    }
  });
});

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

...