Потратив некоторое время на чтение об аутентификации и заметив, что это довольно сложно сделать хорошо, я решил использовать аутентификацию firebase для аутентификации моих пользователей в моем приложении vue.
Я перечисляю технологии и потоки, которые я использую в этом приложении, чтобы показать взаимодействие каждой части и прояснить ситуацию:
Итак, в моем приложении Vue я показываю настраиваемую форму входа и использую ее для аутентификации пользователей через firebase. После входа пользователя в систему я получаю некоторые данные со своего собственного сервера (просто json с разными значениями конфигурации пользователя), которые определяют, как пользователь может взаимодействовать с приложением (например, что он может или не может делать в моем приложении ).
Как я могу получить эту информацию и безопасно использовать ее в моем клиентском приложении ?. Я имею в виду, например, что у меня есть часть информации в этом JSON, которая определяет, является ли пользователь обычным пользователем или пользователем с правами администратора. Как я могу избежать того, чтобы пользователи изменяли ответ сервера и повышали привилегии?





Вы ничего не можете сделать, чтобы предотвратить манипуляции с DOM на стороне клиента. Если он доступен через JavaScript, он доступен пользователю. Вы должны реализовать свое приложение таким образом, чтобы конфиденциальная информация и / или функциональность не зависели от безопасности на стороне клиента (если такая вещь действительно существует).
Что вы можете сделать, так это предотвратить несанкционированный доступ к серверу. Это цель определения областей действия, списков контроля доступа и т. д. Если опытный пользователь изменяет данные ответа и, скажем, меняет свою роль с user на admin, ваш ответ не должен содержать ничего, предназначенного только для пользователей-администраторов. Скорее, эта информация должна быть доступна только после, выполняющему успешный вызов API, когда код вашего сервера аутентифицировал / авторизовал запрос.
Никогда доверяет клиенту, когда дело касается безопасности. Это должно быть сделано на сервере.
Те же принципы применимы и к SSR. В конце концов, независимо от того, отображается ли приложение в браузере или через сервер, пользователи будут иметь доступ к DOM. Хорошая вещь в SSR и безопасности заключается в том, что вы можете выполнять часть процесса, не подвергаясь воздействию внешнего мира.
Как вы думаете, SSR (рендеринг на стороне сервера) может улучшить безопасность? Таким образом, клиент - просто тупой терминал