it-swarm.com.de

Welche Methode sollte ich für eine Anmeldeanforderung (Authentifizierung) verwenden?

Ich würde gerne wissen, welche http-Methode ich bei einer Login-Anfrage verwenden soll und warum? Da diese Anforderung ein Objekt (eine Benutzersitzung) auf dem Server erstellt, sollte dies nach meiner Meinung POST sein. Was denken Sie? Aber da die Login-Anfrage idempotent sein sollte, könnte es PUT sein, oder?

Gleiche Frage für eine Abmeldeanforderung. Soll ich die DELETE-Methode verwenden?

56
greg0ire

Wenn Ihre Anmeldeanforderung über einen Benutzer erfolgt, der einen Benutzernamen und ein Kennwort angibt, ist ein POST vorzuziehen, da Details im HTTP-Nachrichtentext statt in der URL gesendet werden. Es wird zwar immer noch Klartext gesendet, es sei denn, Sie verschlüsseln über https.

Die HTTP DELETE-Methode ist eine Anforderung, etwas auf dem Server zu löschen. Ich glaube nicht, dass das Löschen einer In-Memory-Benutzersitzung wirklich das ist, was beabsichtigt ist. mehr, um den Benutzerdatensatz selbst zu löschen. Daher kann das Abmelden möglicherweise nur ein GET sein, z. www.yoursite.com/logout.

42
planetjones

Ich glaube, dass Sie die LOGIN & LOGOUT-Methoden in grundlegende CRUD-Operationen CREATE & DELETE übersetzen können. Da Sie eine neue Ressource mit dem Namen SESSION erstellen und diese beim Abmelden zerstören:

  1. POST/login - erstellt eine Sitzung
  2. DELETE/Logout - zerstört die Sitzung

Ich würde niemals LOGOUT als GET machen, nur weil jemand einen Angriff durchführen könnte, indem er einfach eine E-Mail mit einem IMG-Tag sendet oder auf eine Website verweist, auf der ein solches IMG-Tag existiert. (<img src="youtsite.com/logout" />)

PS Lange Zeit fragte ich mich, wie Sie ein RESTful-LoginAlogout erstellen könnten, und es stellte sich heraus, dass es wirklich einfach ist. Sie machen es genauso, wie ich es beschrieben habe: use/session/-/endpoint mit CREATE- und DELETE-Methoden und Ihnen sind gut. Sie können UPDATE auch verwenden, wenn Sie die Sitzung auf die eine oder andere Weise aktualisieren möchten. 

23
Vytautas Butkus

Hier ist meine Lösung, die auf REST Anleitungen und Empfehlungen basiert:

LOGIN- Eine Ressource erstellen

Anfordern:

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

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

Antwort: 

http status code 201

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

LOGOUT- löscht eine Ressource

Anfordern:

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

Antwort: 

http status code 200
2
Ali Mamedov

Bezüglich der Methode zum Ausloggen:

In der Spring (Java Framework) -Dokumentation wird angegeben, dass eine POST Anforderung bevorzugt wird, da ein GET Sie für CSRF anfällig macht und der Benutzer abgemeldet werden könnte.

Durch das Hinzufügen von CSRF wird LogoutFilter so aktualisiert, dass nur HTTP-POST verwendet wird. Dadurch wird sichergestellt, dass für das Abmelden ein CSRF-Token erforderlich ist und ein böswilliger Benutzer Ihre Benutzer nicht zwangsweise abmelden kann.

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

Beim Einloggen sollte auch POST verwendet werden (Körper kann verschlüsselt werden, siehe die anderen Antworten).

0
DrunkenPope

Für die Login-Anfrage sollten wir die Methode POST verwenden. Weil unsere Login-Daten sicher sind und Sicherheit brauchen. Bei Verwendung der Methode POST werden die Daten in einem Bundle an den Server gesendet. In der GET-Methode werden jedoch Daten an den Server gesendet, gefolgt von der URL wie Anhängen mit URL-Anforderung, die für jeden sichtbar ist.

Für eine sichere Authentifizierung und Autorisierung sollten wir die Methode POST verwenden.

Ich hoffe, dass diese Lösung Ihnen helfen wird.

Vielen Dank

0
Aman Goyal