Подтвердить что ты не робот

Какой метод следует использовать для запроса входа (аутентификации)?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

  • POST/login - создает сеанс
  • DELETE/logout - уничтожает сеанс

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

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

Ответ 3

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

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

Запрос:

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

BODY => {'login': '[email protected]', 'password': '123456'}

Отклик:

http status code 201 (Created)

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

ВЫХОД - удалить ресурс

Запрос:

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

Отклик:

http status code 204 (No Content)

Ответ 4

Что касается способа выхода из системы:

В документации 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 (тело может быть зашифровано, см. Другие ответы).

Ответ 5

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

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

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

Спасибо

Ответ 6

Но так как запрос на вход должен быть идемпотентным, это может быть PUT, не так ли?

Обычно это плохая идея из-за склонности регистрировать учетные данные пользователя. POST - предпочтительный способ обработки конфиденциальных данных.