Я думаю хранить некоторый зашифрованный секрет в файле JS, то только пользователи, которые имеют правильный код будет в состоянии расшифровать его, и правильный код может быть введенным или сохраненным в файле cookie или что-то в этом роде.
То, о чем вы просите, определенно возможно, но я не уверен, что это действительно будет полезно для вас.
Вам необходимо использовать функцию вывода ключа, такую как PBDFK2 («Функция деривации ключа на основе пароля 2»). Пользователь вводит пароль, затем KDF преобразует пароль в ключ. Затем вы используете ключ для работы сильного симметричного шифра, такого как AES (и убедитесь, что используете безопасный режим работы, например CBC). Этот подход достаточно безопасен, но он по-прежнему уязвим для ключевых регистраторов (уровень ОС и уровня браузера) и проверки состояния памяти.
Важным моментом здесь является то, что пользователь должен ввести пароль, чтобы зашифровал секрет в первую очередь. Вы не можете отправить пользователю секрет, а затем потребовать пароль. Пользователь может использовать пароль для шифрования сообщения, а затем для этого потребуется пароль для будущего доступа.
В качестве альтернативы вы можете самостоятельно выбрать пароль, сгенерировать ключ и зашифрованные данные, а затем отправить свой выбранный пароль (вместе с зашифрованными данными) пользователю, чтобы он запоминал или хранил безопасно.
Практически говоря, CryptoJS - это реализация JavaScript, которая поддерживает как AES, так и PBKDF2.
Проблема в том, что пользователь может манипулировать всем и всем на стороне клиента. Никогда не будет безопасной для проверки подлинности на стороне клиента. Что произойдет, если эти куки будут украдены и наложены на другую машину? – crush
Аутентификация без сервера проста. Вопрос в том, «что вы собираетесь делать с такой аутентификацией». Если вы собираетесь предоставить пользователям ресурсы на стороне сервера после их аутентификации на стороне клиента, у вас будет плохое время. –
Любой полукомпетентный кодер сможет обойти любую так называемую «безопасность», если вы дадите пользователю возможность аутентифицироваться исключительно на клиенте. Если эта ненадежная защита достаточно хороша для вашего приложения, то на самом деле не имеет значения, как вы это делаете. Лучшие практики говорят: «Не делайте этого.«Если вы полны решимости идти вперед, то выбирайте способ, который дает вам чувство добра, достаточное, чтобы вы считали нужным. –