Я создаю приложение 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 и использую его неправильно?






Изучив форумы 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
Здесь можно изменить срок действия токена!
Спасибо, я думал, что ответ будет примерно таким, но я надеялся, что будет какое-то решение.