2016-04-24 5 views
1

Я создаю API RESTful для своего приложения, и я хотел бы сделать его максимально прозрачным и прозрачным.Передача имени пользователя и пароля в HTTP Параметры запроса GET

Мне нужно создать конечную точку аутентификации, и это делает большинство смысла для меня, чтобы построить его, так что пользователи могут проходить проверку подлинности в следующим образом:

GET https://example.com/ 
    auth?identity=<username_or_email>&password=<password> 

Как я уже сказал, передавая данные аутентификации для пользователей с помощью HTTP GET метод в параметрах запроса кажется мне очень чистым.

Но я хотел бы, чтобы вы спросили, насколько это безопасно. Учитывая, что он будет зашифрован через SSL/TLS, считаете ли вы, что это хорошая идея для передачи учетных данных пользователя, как это?

ответ

4

Отображаемое имяsaid, оба варианта в основном представляют собой обычный текст (даже с использованием кодировки base64). Поэтому вы должны использовать TLS или другую защиту, например HMAC

Но с другой стороны, строка запроса менее безопасна с точки зрения того, как сервер/клиент работает с URL-адресами в целом. Вы можете прочитать об этом here или here. Вкратце Вы должны быть беспокоиться о следующих

  • URL, которые хранятся в журналах веб-сервере
  • URL, которые хранятся в истории браузера
  • URL-адрес передается в заголовках реферер
+0

Он строит API REST; не то, что будет посещено из веб-браузера конечного пользователя, но вместо этого будет вызвано с другого сервера. Таким образом, нет истории браузера, и нет реферера. Кроме того, кто-то, строящий API, должен также настроить настройки журнала сервера, чтобы конфиденциальные данные не регистрировались (например, https://stackoverflow.com/questions/9467405/is-it-possible-to-exclude-specified -get-параметры-в-апаш доступа-журналы/9473943 # 9473943). В любом случае вы должны думать об этих вещах за пределами имен пользователей и паролей, особенно с сегодняшними законами о конфиденциальности данных. – Arthur

0

С точки зрения безопасности не имеет значения, передаете ли вы учетные данные в качестве параметров запроса или в заголовках Authentication. Оба являются в основном обычным текстом. Итак, вы должны использовать TLS.

С точки зрения REST ваш URL-адрес выглядит как RPC: вы вызываете метод auth, который принимает два параметра: identity и password. Что представляет собой ресурс REST, который представляет этот URL? Что произойдет, если вы сделаете второй запрос GET с идентичными параметрами? Каков ответ?

+0

Спасибо за ваш ответ. Говоря о точке зрения REST, запросы этого типа должны возвращать данные аутентификации, такие как: '{" authToken ":" x7kkoal1vf4uk34ikzep "}'. Повторение запроса requestst должно, вероятно, аннулировать все предыдущие 'authToken' и отвечать аналогичными JSON-форматированными данными. –

0

Ну, я в основном передаю строку base64 на сервер. Мое имя пользователя и пароль, преобразуются в base64, а затем передаются в заголовке Authorization

Authorization : "Basic --Value" 

Я считаю, это самый чистый способ передачи имени пользователя и пароля на сервер.

С другой стороны, сервер имел модуль, называемый паспортом. Паспорт предоставляет различные типы авторизации и аутентификации, такие как Basic, bearer, токен или даже ваш собственный пользовательский интерфейс.

Для вышеуказанной цели я использую базовый модуль.

+1

Вопрос в том, насколько безопасно это на самом деле. Заголовок 'Authorization' в основном представляет собой обычный текст. Он может быть защищен только при использовании TLS. –