web-dev-qa-db-fra.com

Quelle méthode dois-je utiliser pour une demande de connexion (authentification)?

J'aimerais savoir quelle méthode http je devrais utiliser pour faire une demande de connexion, et pourquoi? Puisque cette requête crée un objet (une session utilisateur) sur le serveur, je pense que cela devrait être POST, qu'en pensez-vous? Mais puisque la demande de connexion doit être idempotente, elle pourrait être PUT, n'est-ce pas?

Même question pour une demande de déconnexion, devrais-je utiliser la méthode DELETE?

56
greg0ire

Si votre demande de connexion se fait via un utilisateur fournissant un nom d'utilisateur et un mot de passe, il est préférable d'utiliser un POST, car les détails seront envoyés dans le corps du message HTTP plutôt que dans l'URL. Bien que le texte en clair soit envoyé, à moins que vous ne chiffriez via https.

La méthode HTTP DELETE est une requête pour supprimer quelque chose sur le serveur. Je ne pense pas que la suppression d’une session utilisateur en mémoire soit vraiment ce à quoi elle était destinée; plus c'est pour supprimer l'enregistrement de l'utilisateur lui-même. Donc, potentiellement, la déconnexion peut être juste un GET, par exemple. www.votresite.com/logout.

42
planetjones

Je pense que vous pouvez traduire les méthodes LOGIN & LOGOUT en opérations CRUD de base CREATE & DELETE. Puisque vous créez une nouvelle ressource appelée SESSION et que vous la détruisez lors de la déconnexion:

  1. POST/login - crée une session
  2. DELETE/logout - détruit la session

Je ne ferais jamais LOGOUT en GET simplement parce que n'importe qui pourrait faire une attaque simplement en envoyant un email avec un tag IMG ou un lien vers un site Web où un tel tag IMG existe. (<img src="youtsite.com/logout" />)

PS Je me demandais depuis longtemps comment créer un login/déconnexion RESTful et il s’est avéré que c’est très simple, vous le faites exactement comme je l’ai décrit: utilisez / session / endpoint avec les méthodes CREATE et DELETE et vous allez bien. Vous pouvez également utiliser UPDATE si vous souhaitez mettre à jour la session d'une manière ou d'une autre ... 

23
Vytautas Butkus

Voici ma solution qui repose sur les guides et recommandations de REST:

LOGIN- créer une ressource

Demande:

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

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

Réponse: 

http status code 201

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

D&EACUTE;CONNEXION- supprimer une ressource

Demande:

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

Réponse: 

http status code 200
2
Ali Mamedov

En ce qui concerne la méthode de déconnexion:

Dans la documentation Spring (Java Framework), ils indiquent qu’une demande POST est préférable, puisqu’un GET vous rend vulnérable à CSRF et l’utilisateur peut être déconnecté.

L'ajout de CSRF mettra à jour le LogoutFilter pour n'utiliser que HTTP POST. Cela garantit que la déconnexion nécessite un jeton CSRF et qu'un utilisateur malveillant ne peut pas déconnecter de force vos utilisateurs.

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

La connexion doit également utiliser POST (le corps peut être chiffré, voir les autres réponses).

0
DrunkenPope

Pour la demande de connexion, nous devrions utiliser la méthode POST. Parce que nos données de connexion sont sécurisées, ce qui nécessite une sécurité. Lorsque vous utilisez la méthode POST, les données sont envoyées au serveur dans un ensemble. Mais dans la méthode GET, les données sont envoyées au serveur, suivies de l'URL, comme l'ajout de la demande d'URL qui sera visible par tout le monde.

Donc, pour l'authentification sécurisée et le processus d'autorisation, nous devrions utiliser la méthode POST.

J'espère que cette solution vous aidera.

Merci

0
Aman Goyal