#javascript #frontend
#javascript #интерфейс
Вопрос:
Я хочу создать чистое интерфейсное приложение с JavaScript, работающим на стороне клиента, то есть в браузере. Предполагается, что мое приложение отправляет запросы к службам 3-й части, для которых требуется какой-то метод аутентификации.
Внутренние фреймворки предоставляют конфигурационные файлы для такого рода вещей, но поскольку весь код JS интерпретируется на клиентском компьютере, конфигурационные файлы не могут быть частью пакета.
Есть ли какой-либо способ безопасного хранения ключей API-интерфейса, учетных данных и тому подобного в клиенте или мне также нужно серверное решение для этого?
Поиск наиболее популярных фреймворков (Angular и React) для файлов конфигурации привел только к сохранению URL-адресов, специфичных для среды. Я начинаю думать, что я зашел в тупик, и это просто невозможно сделать.
Комментарии:
1. Конечно, это невозможно. Вы не хотите, чтобы интерфейс отправлял запросы третьим сторонам, как вы, поэтому либо попросите пользователя войти в свою учетную запись, либо прокси, которые получают доступ через ваш собственный серверный сервер.
2. Даже если бы это было возможно, вы НИКОГДА не должны хранить конфиденциальные данные безопасности (например, учетные данные) на клиентском сайте, потому что они не могут быть защищены.
3. @jon Итак, в основном нужно создавать собственный сервер для абстракции / делегирования запросов, если только рассматриваемая сторонняя служба не является чем-то, где пользователь может войти в систему, например Twitter. В значительной степени то, что я думал. Спасибо за разъяснение. И если вы дадите этот ответ, я приму его.
4. @Ferya Точно! Вот почему я спросил об этом. Возможно, в вопросе не было ясно. Я добавлю это.
5. Тогда ответ отрицательный. Невозможно безопасно хранить учетные данные на стороне клиента. Варианты хранения на стороне клиента: файлы cookie (которые представляют собой текстовые файлы и легко доступны) или локальное хранилище (опять же, легко доступное). Вы можете зашифровать учетные данные, но любой технический пользователь может выполнить обратное вычисление (особенно если ваш JS-код также доступен конечному пользователю). Так что не тратьте на это свое время.
Ответ №1:
Зависит… Вы не хотите, чтобы пользователь мог вынюхивать какие-либо секреты, которые вы должны отправить третьей стороне, но в случае неявного предоставления с OAuth2 вы можете фактически инициировать и завершить его в браузере.
Вы перенаправите на стороннюю сторону для входа / аутентификации, после чего пользователь будет отправлен вам обратно с токеном доступа, действительным в течение определенного периода времени.
Этот токен фактически отправляется во фрагменте URL-адреса в соответствии со спецификацией, поэтому он отправляется в браузер, а НЕ на ваш сервер. Если вы хотите получить токен доступа к серверу, вам понадобится интерфейсный код для анализа фрагмента URL и отправки его содержимого.
Если API позволит вам подключаться из браузера, вы можете сохранить все в браузере и не нуждаться в внутреннем сервере для обработки учетных данных. Но не каждый API допускает чисто интерфейсную аутентификацию и вызовы API.
Итак, это зависит…
Комментарии:
1. Основываясь на этом ответе и комментариях, сделанных на вопрос Ферьяла и Джона, я могу решить, что и как это сделать. И особенно, чего не следует делать. Спасибо.
Ответ №2:
Можете ли вы хранить учетные данные service api в клиентском кэше или в файлах cookie и т. Д.? ДА. Будет ли безопасно отправлять их по проводам и сохранять в браузере? Нет.
Если обеспечение безопасности учетных данных является частью требований, я бы выполнил работу по аутентификации на серверной части или использовал стороннюю службу, которая делает это за вас.