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?
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.
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:
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 ...
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
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.
La connexion doit également utiliser POST (le corps peut être chiffré, voir les autres réponses).
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