Передача имени пользователя и пароля в параметрах запроса HTTP GET
Я создаю RESTful API для своего приложения и хотел бы сделать его максимально чистым и прозрачным.
Мне нужно создать конечную точку аутентификации, и для меня наиболее разумно создать ее так, чтобы пользователи могли проходить аутентификацию следующим образом:
GET https://example.com/
auth?identity=<username_or_email>&password=<password>
Как я уже сказал, передача данных аутентификации пользователя с использованием метода HTTP GET в параметрах запроса мне кажется очень чистой.
Но я хотел бы, чтобы вы спросили о том, насколько это безопасно. Учитывая, что он будет зашифрован с помощью SSL/TLS, вы думаете, что это хорошая идея для передачи учетных данных пользователя, как это?
3 ответа
Как видно из отображаемого имени, оба варианта в основном представляют собой простой текст (даже с использованием кодировки base64). Таким образом, вы должны использовать TLS или другую защиту, такую как HMAC
Но с другой стороны, строка запроса менее безопасна с точки зрения того, как сервер / клиент работает с URL-адресами в целом. Вы можете прочитать об этом здесь или здесь. Вкратце вам стоит побеспокоиться о следующем
- URL хранятся в журналах веб-сервера
- URL хранятся в истории браузера
- URL передаются в заголовках Referrer
Ну, я в основном передаю строку base64 на сервер. Мои имя пользователя и пароль преобразуются в base64, а затем передаются в заголовке авторизации.
Authorization : "Basic --Value"
Я считаю, что это самый чистый способ передачи имени пользователя и пароля на сервер.
С другой стороны, на сервере был модуль под названием passport.Passport предоставляет различные типы авторизации и аутентификации, такие как Basic, однонаправленный канал, токен или даже ваш собственный.
Для вышеуказанной цели я использую Основной модуль.
С точки зрения безопасности не имеет значения, если вы передаете учетные данные в качестве параметров запроса или в Authentication
заголовки. Оба в основном простой текст. Поэтому вы должны использовать TLS.
С точки зрения REST ваш URL выглядит как RPC: вы вызываете метод auth
который принимает два параметра identity
а также password
, Какой ресурс REST представляет этот URL? Что произойдет, если вы сделаете второй GET
запрос с одинаковыми параметрами? Каков ответ?