AWS Cognito getSession в Swift, в результате чего 401 не авторизован из API GW - PullRequest
0 голосов
/ 27 апреля 2020

Когда наше приложение запускается, мы проверяем, есть ли у нас действительные AWS Cognito токены (id, refre sh, доступ). Если они больше не действительны, мы извлекаем их вручную, используя метод getSession cognito IDP.

Поскольку для извлечения этих токенов требуется немного времени, наше приложение продолжает выполнять вызовы API и получает 401 несанкционированный ответ от API Gateway. Мы выполняем эти действия, показывая пользователю индикатор загрузки.

Есть ли у нас способ убедиться, что мы получили действительный токен перед выполнением вызова API? Наш хак сейчас заключается в том, что мы повторяем попытку, если получим 401 несанкционированный ответ. Это неэффективно, так как мы теряем один (иногда больше) вызов API, пока токены обновляются.

Я изучил использование DispatchGroups (GCD) и DispatchQueue, но это не помогло нам. Ищем предложения о том, как мы можем улучшить это дальше. Ниже приведен код, который мы используем для обновления sh токенов:

func getTokens(){
        self.user?.getSession().continueOnSuccessWith { (task) -> AnyObject? in
            DispatchQueue.main.async(execute: {
                let idTok = task.result?.idToken?.tokenString ?? "ERR"
                    ... handle received tokens ...
            })
            return nil
        }
    }

Примечание: мы импортируем «AWSCognitoIdentityProvider» в наше приложение, и я понимаю, что оно должно автоматически обновлять токены, но я не видя этого поведения. Однако, когда мы запустим функцию getTokens (), она когда-нибудь получит новейшие токены из Cognito, а в другое время предоставит кэшированные результаты.

1 Ответ

0 голосов
/ 30 апреля 2020

Мне удалось решить эту проблему, вызвав мою следующую функцию внутри AWSTask. Не идеально, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...