Подтвердить что ты не робот

Реагирование на экспресс-частные маршруты

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

Некоторые основные преимущества этого включают возможность получения данных и передачи их клиенту без раскрытия общедоступного маршрута. Таким образом, возможность сохранить эти данные скрытыми и только разоблачить их, когда захочу. Я знаю, что другие приложения, такие как Facebook, имеют данные, которые могут быть получены ТОЛЬКО их приложениями (iOS, Android, веб-приложениями), например, данные временной шкалы не являются общедоступным и могут быть получены только их собственными приложениями.

Как я могу добиться чего-то подобного с помощью React? С рендерингом на стороне сервера я могу заблокировать эти функции/маршруты и разрешить их только вызывать из внутреннего кода и не выставлять их, я также могу делать такие вещи, как проверка, чтобы убедиться, что пользователь зарегистрирован и т.д.

Как я могу достичь этого с помощью React?

4b9b3361

Ответ 1

Как я понимаю, вы хотите ограничить определенные маршруты для входа в систему.

Для входа в систему с поставщиком удостоверений, например Facebook, goto является паспортом. js. Вопрос об использовании реакции/экспресс/паспорт был задан раньше в SO, например здесь.

Редактирует в ответ на комментарии:

Итак, у вас есть некоторые функции, которые выводят данные. Если вы передаете серверную часть, эти функции не отображаются. Но, если вы разоблачите их через API... Они разоблачены. И поскольку код JavaScript отправляется клиенту, вы не можете просто помещать секрет в заголовок, потому что вы должны отправить этот секрет клиенту.

Что я сказал выше, если вы ограничиваете эти API-интерфейсом зарегистрированными пользователями, тогда проблема решается OAuth и/или JWTs, a la this. JWTs coukd также работает для вас без входа в систему.

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

  • Использовать HTTPS
  • Установить политики CORS, чтобы разрешить только ваш домен (ы)
  • Используйте пакет, например Helmet

Еще одна вещь, которую стоит проверить, что я не использовал, но выглядит хорошо, Microgateway

Ответ 2

Это обычно решается с использованием различных концепций аутентификации/авторизации, например, определенных в протоколе OAuth2.

Позвольте мне описать это на очень высоком и абстрактном уровне:

Вы можете сказать, что есть разные клиенты, которые обращаются к вашему API. API может определить, какой клиент может получить доступ к этому маршруту. Каждый клиент имеет идентификатор клиента и секрет клиента, чтобы идентифицировать себя на сервере аутентификации и обменивать идентификатор и секрет на токен. Этот токен (например, Json Web Token) кодирует разрешения для этого клиента, что может, например, означать доступ к определенным маршрутам, а не другим, в вашем API.

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

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

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