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


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

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


45


источник


Ответы:


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

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


33



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

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

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

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


17



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

АВТОРИЗОВАТЬСЯ  - создать ресурс

Запрос:

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

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

Отклик:

http status code 201

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

ВЫЙТИ  - удалить ресурс

Запрос:

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

Отклик:

http status code 200

1



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

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

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

благодаря


0



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

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


-2