Как сохранить токены между apis без выписки? - PullRequest
0 голосов
/ 03 апреля 2019

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

  • Front -> (вызов) собственного API входа в систему (если все в порядке, мы создаем собственный токен с именем ownToken) -> (вызов к) стороннего API --> возвращает токен JWT (с именем 1token) ->

После того, как все в порядке:

  • Front -> Пользователь выполняет некоторые задачи -> (С ownTokenВызовите) собственный бизнес-API (если с ownToken все в порядке, сделайте некоторые вещи) -> (с вызовом 1 Token) сторонний API (верните некоторые вещи) -> Показать информацию пользователю.

Мы хотим не вызывать сторонние API-интерфейсы каждый раз, когда нам нужна информация от этого API-интерфейса, но также мы не хотим показывать этот JWT пользователю (я имею в виду localstorage, sessionstorage ...).

Для получения дополнительной информации мы будем использовать язык c # и сервер sql в качестве базы данных.

Наш вопрос:

Как вы поддерживаете 1token между API?

1 Ответ

3 голосов
/ 03 апреля 2019

у вас есть две разные вещи, которыми нужно управлять:

  1. JWT-защищенные вызовы между вашим интерфейсом и вашим сервером
  2. JWT-защищенные вызовы между вашим бэкэндом и третьей стороной.

Что бы я сделал, просто сгенерировал 'sessionId' на бэкэнде, который является частью токена, который вы отправляете на ваш фронтэнд. это может быть int или guid или что-то еще.

Затем я бы связал этот 'sessionId' с токеном, полученным от стороннего производителя, и сохранил бы это каким-то образом - какую-то форму базы данных или файлового хранилища (БД было бы очевидной вещью для использования).

Таким образом, когда бы ни поступал запрос от вашего внешнего интерфейса в вашем внутреннем коде, вы должны:

  1. Извлечение идентификатора сессии из предоставленного ими токена
  2. найдите запись для этого идентификатора в вашей базе данных, чтобы получить связанный с ним токен
  3. используйте этот токен для совершения любых необходимых вызовов и отвечайте

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

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

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