Неправильный токен AWS Cognoto при выходе - PullRequest
0 голосов
/ 02 июля 2018

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

1 Ответ

0 голосов
/ 01 августа 2018

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

Вот эта дискуссия: https://github.com/aws/aws-sdk-js/issues/1241

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

изменяя определенный параметр, вы можете сократить его до минимума 15 минут. Однако вы не можете немедленно аннулировать токен на 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

Здесь можно изменить длительность токена!

...