Я разрабатываю сервер Graphql с помощью node.js и использую auth0 для аутентификации.У меня есть проверка подлинности по большей части.Часть, на которой я сейчас сосредоточен, - это токен обновления.Вот мой поток.
У меня есть мобильное приложение в IOS, которое подключается к серверу graphql.Вся логика аутентификации для auth0 обрабатывается через сервер graphql, поэтому стороны аутентификации не зависят от клиента и предпочитают хранить токен обновления на сервере для безопасности.
Проблема возникает, когда я пытаюсь реализовать токены обновления,Сейчас я думаю об этом потоке, чтобы справиться с ним.
- Клиент проходит проверку подлинности и получает токен доступа (сервер получает токен обновления, шифрует и сохраняет в БД)
- (Послечерез некоторое время токен истекает) Клиент пытается получить доступ к запросу или мутации graphql и возвращает ошибку «TOKEN_EXPIRED»
- Здесь я хотел бы, чтобы клиент затем передал свой токен доступа мутации, чтобы обновить токен и получитьновый.
В этот момент возникает мое беспокойство.Я не могу просто обновить сервер автоматически, потому что клиенту нужен токен доступа.Злоумышленник может поразить эту конечную точку, чтобы просто продолжать получать новый токен, поскольку обновление токена никоим образом не делает недействительными предыдущие токены доступа.Поскольку у клиента нет идентификатора или секрета клиента, он менее безопасен, поскольку токен обновления защищен из-за добавления идентификатора и секрета.Auth0 не позволяет вам получить новый токен обновления, если он не зарегистрирован через логин (который, если бы я мог, я просто отменил бы токен обновления и заменил его новым).
Похоже, что Auth0 предлагает хранить секрет клиента, идентификатор клиента и токен обновления, а также токен доступа, хранящийся на мобильном устройстве.Похоже, что много информации, которая не должна быть на устройстве.
Пожалуйста, дайте мне знать, если у вас есть какие-либо предложения, я чувствую, что упускаю что-то простое.