Ich versuche immer noch, die beste Sicherheitslösung für den Schutz der REST-API zu finden, da die Anzahl der mobilen Anwendungen und APIs von Tag zu Tag zunimmt.
Ich habe verschiedene Arten der Authentifizierung ausprobiert, habe aber immer noch einige Missverständnisse. Daher benötige ich den Rat eines erfahrenen Mitarbeiters.
Lassen Sie mich sagen, wie ich das alles verstehe. Wenn ich etwas falsch verstehe, lassen Sie es mich bitte wissen.
Soweit die REST-API wie auch das WEB im Allgemeinen zustandslos ist, müssen wir bei jeder Anforderung einige Authentifizierungsdaten (Cookies, Token ...) senden. Ich kenne drei weit verbreitete Mechanismen zur Benutzerauthentifizierung
Token mit HTTPS. Ich habe diesen Ansatz oft verwendet, es ist gut genug mit HTTPS. Wenn der Benutzer das richtige Kennwort und die richtige Anmeldung angibt, erhält er als Antwort ein Token und verwendet es für die weiteren Anforderungen. Das Token wird vom Server generiert und gespeichert, z. B. in der separaten Tabelle oder in derselben, in der Benutzerinformationen gespeichert sind. Daher prüft der Server für jede Anforderung, ob der Benutzer über ein Token verfügt und dasselbe wie in der Datenbank. Alles ist ziemlich einfach.
JWT-Token. Dieses Token ist selbsterklärend und enthält alle erforderlichen Informationen zum Token selbst. Der Benutzer kann beispielsweise das Ablaufdatum oder einen anderen Anspruch nicht ändern, da dieses Token vom Server mit einem geheimen Schlüsselwort generiert (signiert) wird. Das ist auch klar. Aber ein großes Problem, persönlich für mich, wie man Token ungültig macht.
OAuth 2. Ich verstehe nicht, warum dieser Ansatz verwendet werden sollte, wenn die Kommunikation direkt zwischen Server und Client hergestellt wird. Soweit ich weiß, wird der OAuth-Server verwendet, um Token mit eingeschränktem Gültigkeitsbereich auszugeben, damit andere Anwendungen auf Benutzerinformationen zugreifen können, ohne Kennwort und Anmeldung zu speichern. Dies ist eine großartige Lösung für soziale Netzwerke. Wenn Benutzer sich auf einer Seite anmelden möchten, kann der Server Berechtigungen anfordern, um Benutzerinformationen abzurufen, beispielsweise von Twitter oder Facebook, und Registrierungsfelder mit Benutzerdaten usw. füllen.
Betrachten Sie Mobile Client für Online-Shop.
Erste Frage, sollte ich JWT dem ersten Token vorziehen? Soweit ich einen Benutzer zum Anmelden / Abmelden auf einem mobilen Client benötige, muss ich irgendwo ein Token speichern oder im Falle von JWT sollte das Token beim Abmelden ungültig werden. Zum Ungültigmachen des Tokens werden verschiedene Ansätze verwendet. Eine davon ist das Erstellen einer ungültigen Token-Liste (Blacklist). Hmm. Die Tabelle / Datei ist viel größer als wenn das Token in der Tabelle gespeichert und dem Benutzer zugeordnet und nur beim Abmelden entfernt wurde.
Was sind die Vorteile von JWT-Token?
Zweite Frage zu OAuth: Soll ich sie bei direkter Kommunikation mit meinem Server verwenden? Was ist der Zweck einer weiteren Schicht zwischen Client und Server, um nur Token auszugeben, aber die Kommunikation erfolgt nicht mit einem anderen Server, sondern mit dem Hauptserver? Soweit ich weiß, ist der OAuth-Server nur dafür verantwortlich, Apps von Drittanbietern Berechtigungen (Token) für den Zugriff auf private Benutzerinformationen zu erteilen. Meine mobile Client-Anwendung ist jedoch kein Drittanbieter.