Я начал разрабатывать веб-приложение с angularJS, и я не уверен, что все правильно защищено (клиентская и серверная). Безопасность основана на одной странице входа в систему, если учетные данные проверены в порядке, мой сервер отправляет уникальный токен с пользовательской временностью. Все остальные REST api доступны через этот токен. Приложение (клиент) просматривает мою учетную запись ex: https://www.example.com/home.html пользователь вводит учетные данные и получает обратно уникальный токен. Этот уникальный токен хранится в базе данных сервера с помощью AES или других безопасных методов, он не сохраняется в ясном формате.
С этого момента мое приложение AngluarJS будет использовать этот токен для аутентификации для всех REST Api.
Я думаю о временном хранении токена в пользовательском http cookie; в основном, когда сервер проверяет учетные данные, он отправляет обратно новый файл cookie Ex.
app-token : AIXOLQRYIlWTXOLQRYI3XOLQXOLQRYIRYIFD0T
В файле cookie установлены флаги secure и Только HTTP. Протокол Http напрямую управляет новым файлом cookie и сохраняет его. Последовательные запросы будут содержать cookie с новым параметром, без необходимости управлять им и хранить его с помощью javascript; при каждом запросе сервер аннулирует токен и генерирует новый и отправляет его клиенту → предотвращать повторные атаки с помощью одного токена.
Когда клиент получает неавторизованный ответ HTTP-статуса 401 от любого REST Api, контроллер angular очищает все файлы cookie и перенаправляет пользователя на страницу входа.
Должен ли я рассмотреть другие аспекты? Лучше ли хранить токен в новом файле cookie или в localStorage? Любые советы о том, как создать уникальный сильный токен?
Изменить (улучшения):
- Я решил использовать HMAC-SHA256 в качестве генератора токен сеанса с 20-минутной достоверностью. Я генерирую случайный 32-байтовый GUID, прикрепляю временную метку и вычисляю HASH-SHA256, предоставляя ключ 40 байтов. Совершенно невозможно получить столкновения, так как срок действия токена весьма минимален.
- Cookie будет иметь атрибуты домена и пути для повышения безопасности.
- Разрешено использование нескольких логинов.