Какой метод я должен использовать для запроса входа (аутентификации)? - PullRequest
68 голосов
/ 03 мая 2011

Я хотел бы знать, какой метод http следует использовать при выполнении запроса на вход в систему и почему?Так как этот запрос создает объект (сеанс пользователя) на сервере, я думаю, что это должен быть POST, как вы думаете?Но поскольку запрос на вход в систему должен быть идемпотентным, это может быть PUT, не так ли?

Тот же вопрос для запроса на выход из системы, должен ли я использовать метод DELETE?

Ответы [ 5 ]

48 голосов
/ 03 мая 2011

Если ваш запрос на вход в систему осуществляется от пользователя, предоставляющего имя пользователя и пароль, то предпочтительнее использовать POST, поскольку подробности будут отправляться в теле сообщения HTTP, а не в URL. Хотя по-прежнему будет отправляться простой текст, если только вы не шифруете через https.

Метод HTTP DELETE - это запрос на удаление чего-либо на сервере. Я не думаю, что УДАЛЕНИЕ сессии пользователя в памяти действительно то, что она предназначена; больше это для удаления самой записи пользователя. Таким образом, потенциальный выход из системы может быть просто GET, например. www.yoursite.com/logout.

26 голосов
/ 21 февраля 2014

Я считаю, что вы можете перевести методы LOGIN & LOGOUT в базовые операции CRUD CREATE & DELETE. Поскольку вы создаете новый ресурс с именем SESSION и уничтожаете его при выходе из системы:

  1. POST / login - создает сеанс
  2. УДАЛИТЬ / Выйти - уничтожает сессию

Я бы никогда не сделал LOGOUT как GET только потому, что любой мог совершить атаку, просто отправив электронное письмо с тегом IMG или ссылкой на веб-сайт, где существует такой тег IMG. (<img src="youtsite.com/logout" />)

P.S. Долгое время мне было интересно, как бы вы создали RESTful логин / выход из системы, и оказалось, что это действительно просто, вы делаете это так, как я описал: используйте конечную точку / session / с методами CREATE и DELETE, и вы в порядке. , Вы также можете использовать UPDATE, если вы хотите обновить сеанс тем или иным способом ...

5 голосов
/ 10 июня 2018

Вот мое решение, основанное на руководствах и рекомендациях REST:

ВХОД - создать ресурс

Запрос:

POST => https://example.com/sessions/

BODY => {'login': 'login@example.com', 'password': '123456'}

Ответ:

http status code 201 (Created)

{'token': '761b69db-ace4-49cd-84cb-4550be231e8f'}

LOGOUT - удалить ресурс

Запрос:

DELETE => https://example.com/sessions/761b69db-ace4-49cd-84cb-4550be231e8f/

Ответ:

http status code 204 (No Content)
2 голосов
/ 05 февраля 2019

Относительно метода выхода из системы:

В документации Spring (Java Framework) говорится, что предпочтительным является запрос POST, поскольку GET делает вас уязвимым для CSRF, и пользователь может выйти из системы.

Добавление CSRF обновит LogoutFilter для использования только HTTP POST.Это гарантирует, что для выхода требуется токен CSRF и что злонамеренный пользователь не сможет принудительно выйти из системы ваших пользователей.

См .: https://docs.spring.io/spring-security/site/docs/current/reference/html/web-app-security.html#csrf-logout

При входе в систему также следует использовать POST (body canбыть зашифрованным, см. другие ответы).

0 голосов
/ 22 февраля 2018

Для запроса входа в систему мы должны использовать метод POST. Потому что наши данные для входа безопасны и нуждаются в безопасности. При использовании метода POST данные отправляются на сервер в комплекте. Но в методе GET данные отправляются на сервер с последующим добавлением в виде URL-адреса с запросом URL-адреса, который будет виден всем.

Итак, для безопасной аутентификации и авторизации мы должны использовать метод POST.

Я надеюсь, что это решение поможет вам.

Спасибо

...