Передача имени пользователя и пароля в параметрах запроса 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 запрос с одинаковыми параметрами? Каков ответ?

Другие вопросы по тегам