Firebase + пользовательский бэкэнд: я должен получить токен jwt на Клиенте перед каждым запросом http? - PullRequest
0 голосов
/ 04 сентября 2018

Я создаю приложение для Android, в котором я хочу использовать Firebase только для аутентификации и мой собственный бэкэнд для остальных.

Я следил за этой документацией по Firebase , где я узнал, как получить токен jwt. Мне удалось отправить токен в мои остальные API через метод POST и проверить его там с помощью библиотеки php JWT Firebase, и теперь я немного застрял.

Когда правильное время для получения токена? Должен ли я:

  1. Получите токен при запуске приложения (или зарегистрируйтесь / войдите в систему и т. Д.), Сохраните его в переменной, чтобы мне не приходилось извлекать его снова, а затем отправляйте токен при каждом http-запросе для авторизации пользователя.
  2. Получите токен один раз и сохраните его в SharedPreferences.
  3. Перед каждым http-запросом я извлекаю токен, чтобы он был свежим, и я могу быть уверен, что он действителен.
  4. Проверяйте токен только при запуске приложения и, если он действителен, извлекайте идентификатор пользователя из токена в клиенте, сохраняйте его в переменной и используйте идентификатор в будущих http-запросах, чтобы узнать, какой пользователь выполняет запросы.

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

Я боюсь использовать первый и второй вариант, потому что время истечения токена. Я могу выяснить, что токен недействителен в бэкэнде, но тогда мне нужно будет сообщить клиенту, что он недействителен, сгенерировать новый токен, а затем повторить запрос, что мне кажется очень сложным.

Существуют ли общие практики, которым я должен следовать? Один из моих примеров хоть немного прав или я совершенно не прав?

Я очень новичок в этой области развития своей новой работы и не могу найти много информации о том, как мне поступить в подобных ситуациях. Буду очень благодарен за любой ответ!

1 Ответ

0 голосов
/ 04 сентября 2018

Вы должны получить идентификационный токен перед каждым HTTP-вызовом и включить его в запросы. Вам не обязательно каждый раз обновлять идентификационный токен (т.е. не нужно передавать true в getIdToken()). Фактически это может замедлить работу приложения.

Опции 1 и 2 сложно реализовать правильно, так как токены ID меняются каждый час или около того. Вариант 4 небезопасен.

...