#amazon-web-services #authentication #jwt #amazon-cognito #claims-based-identity
Вопрос:
- Пользователи в приложениях имеют разрешения, основанные на группах, в которых они находятся
- Мы хотели бы сохранить список групп, в которых находится пользователь, в токене JWT
- Когда пользователь добавляется или удаляется из групп, это фактически означает изменение разрешений, и именно это должно произойти в конце пользователя:
Если они были полностью удалены из системы, пользователь немедленно возвращается на экран входа в систему
Например, если они только что были удалены из группы, пользователь не будет выгнан
Они получают уведомление о том, что их права были обновлены, им предлагается, пожалуйста, обновить страницу
когда пользователь обновляется, он остается на странице, которую просматривает
Если пользователь находится на экране, к которому у него больше нет доступа, он отправляется на домашнюю страницу
1. До сих пор мы писали API-интерфейсы REST, которые все не имеют состояния, но это, похоже, нарушает это. Каков наилучший способ достичь этого? 2. Если бы мы хотели упростить это и обеспечить безгражданство, каков наилучший подход?
Ответ №1:
При аутентификации без сохранения состояния ваш идентификационный токен, содержащий информацию о вашей группе, не обновляется до истечения срока его действия (обычно через час). Вы можете сократить эту продолжительность до 5 минут. Это был бы самый простой способ убедиться, что любое обновление для группы быстро отражается на интерфейсе. Эти токены независимы и не могут быть отозваны после их выпуска. Даже если вы запустите вызов API глобального выхода из системы или вызов API забыть устройство, будет отозван только маркер обновления, в то время как идентификатор и маркеры доступа остаются действительными до истечения срока их действия.
Упомянутые вами требования несовместимы с методом проверки подлинности без сохранения состояния. Конечно, вы можете создать «хакерский» поток, в котором у вас есть база данных, в которой записываются идентификаторы пользователей, которых выгнали, и перед каждым вызовом она проверяет базу данных, но это было бы много ненужной работы, и вы бы отказались от всего смысла использования аутентификации без сохранения состояния.
Мое предложение, если вы хотите продолжать использовать cognito, состоит в том, чтобы сократить время истечения срока действия всех токенов до минимума. Вы также можете исключить токены обновления из своего потока, но это будет означать, что пользователю необходимо входить в систему каждые 5 минут. Но если вам действительно нужно это реализовать, я бы предложил использовать методы аутентификации с сохранением состояния.
Комментарии:
1. Если бы я использовал IoT, была бы это тема для каждого арендатора, или тема для группы для каждого арендатора, или тема для каждого пользователя?