Аннулировать токен AWS Cognoto при выходе из системы

Я создаю приложение Swift с бэкэндом Python и хочу использовать AWS Cognoto для аутентификации и регистрации.

В настоящее время я использую следующий код для входа в систему

let user = pool?.getUser(email)
user?.getSession(email, password: password, validationData: nil)
    .continueWith { task in
        // handle error/success

        return nil
    }

Пул инициализирован выше с помощью вызова self.pool = AWSCognitoIdentityUserPool.default().

При запуске приложения я проверяю, аутентифицирован ли пользователь, и получаю его access_token:

if AWSSignInManager.sharedInstance().isLoggedIn {
    if let user = pool?.currentUser() {
        user.getSession()
            .continueWith { task in
                token = task.result?.accessToken?.tokenString

                return nil
            }
    }
}

И я передаю этот токен бэкэнду. На бэкэнде я получаю данные пользователя через библиотеку Python Warrant:

from warrant import Cognito

u = Cognito("id", "key", user_pool_region = "us-east-1")
u.access_token = "token"

res = u.get_user(attr_map = {"sub": "user_id", "email": "email"})

Если токен действителен, я получаю данные пользователя, в противном случае возникает исключение. Но после выхода из системы на клиенте этот токен все еще жив. Я использую следующий код выхода:

AWSSignInManager.sharedInstance().logout { (result: Any?, error: Error?) in
    // handle results
}

Я понимаю, что этот токен истечет по истечении некоторого времени ожидания и не будет обновляться, так как при следующем входе в систему пользователь получит еще одну пару токенов accces / refresh, но я хотел бы немедленно аннулировать токен при выходе из системы, возможно ли это? Или я не понимаю Cognito и использую его неправильно?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 872
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Изучив форумы github и AWS, я нашел (полу) ответ на этот вопрос Криса Радека, участника aws-sdk for js.

Вот это обсуждение: https://github.com/aws/aws-sdk-js/issues/1241

Если вы не хотите читать все это, по сути, Крис говорит, что его стандарт для токенов должен быть действителен в течение часа, но

by modifying a certain parameter you can cut that down to a minimum of 15 minutes. You cannot, however, invalidate a token immediately on signout.

Вот документы javascript, в которых описывается, как сократить продолжительность времени: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html#params-property

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/STS.html#assumeRoleWithWebIdentity-property

Документация AWS по теме: https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html

https://forums.aws.amazon.com/thread.jspa?threadID=232652

Вот функция сопоставления, которую можно вызвать в python: https://boto3.readthedocs.io/en/latest/reference/services/cognito-identity.html#CognitoIdentity.Client.get_open_id_token_for_developer_identity

Здесь можно изменить срок действия токена!

Спасибо, я думал, что ответ будет примерно таким, но я надеялся, что будет какое-то решение.

cleg 01.08.2018 16:33

Другие вопросы по теме