Ich erstelle eine Anwendung, die auf einem Server gehostet wird. Ich möchte eine API für die Anwendung erstellen, um die Interaktion mit jeder Plattform (Web App, Mobile App) zu erleichtern. Was ich nicht verstehe, ist, dass wir den Benutzer bei Verwendung der REST-API authentifizieren.
Zum Beispiel, wenn sich ein Benutzer angemeldet hat und dann ein Forenthema erstellen möchte. Woher weiß ich, dass der Benutzer bereits angemeldet ist?
Authorization
Header + zB Browser localStorage VSCookie
Header + Standard-Browser-Cookie-Speicher.Antworten:
Sie können die HTTP Basic- oder Digest-Authentifizierung verwenden. Sie können Benutzer sicher mit SSL darüber authentifizieren, dies verlangsamt jedoch die API ein wenig.
OAuth ist das Beste, was es bekommen kann. Die Vorteile, die oAuth bietet, sind widerrufliche oder ablaufbare Token. Informationen zur Implementierung finden Sie im Folgenden: Arbeitslink aus Kommentaren: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
quelle
Zum Beispiel, wenn ein Benutzer angemeldet ist. Angenommen, der Benutzer möchte ein Forenthema erstellen. Woher weiß ich, dass der Benutzer bereits angemeldet ist?
Denken Sie darüber nach - es muss einen Handshake geben, der Ihrer API "Forum erstellen" mitteilt, dass diese aktuelle Anforderung von einem authentifizierten Benutzer stammt. Da REST-APIs normalerweise zustandslos sind, muss der Status irgendwo beibehalten werden . Ihr Client, der die REST-APIs verwendet, ist für die Aufrechterhaltung dieses Status verantwortlich. Normalerweise handelt es sich um ein Token, das seit der Anmeldung des Benutzers weitergegeben wird. Wenn das Token gut ist, ist Ihre Anfrage gut.
Überprüfen Sie, wie Amazon AWS Authentifizierungen durchführt. Dies ist ein perfektes Beispiel für das "Weitergeben des Geldes" von einer API an eine andere.
* Ich dachte daran, meiner vorherigen Antwort eine praktische Antwort hinzuzufügen. Probieren Sie Apache Shiro (oder eine beliebige Authentifizierungs- / Autorisierungsbibliothek) aus. Fazit: Vermeiden Sie benutzerdefinierte Codierungen. Sobald Sie Ihre Lieblingsbibliothek integriert haben (ich verwende übrigens Apache Shiro), können Sie Folgendes tun:
/api/v1/login
undapi/v1/logout
JSESSIONID
), das an den Client zurückgesendet wird (Web, Mobile, was auch immer)./api/v1/findUser
Das ist alles. Hoffe das hilft.
quelle
Verwenden Sie HTTP Basic Auth , um Clients zu authentifizieren, behandeln Sie Benutzername / Kennwort jedoch nur als temporäres Sitzungstoken .
Das Sitzungstoken ist nur ein Header, der an jede HTTP-Anforderung angehängt wird , z. B.:
Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0
Die obige Zeichenfolge Ym9ic2Vzc2lvbjE6czNjcmV0 ist nur die in Base64 codierte Zeichenfolge "bobsession1: s3cret" (ein Benutzername / Kennwort).
Um das oben genannte temporäre Sitzungstoken zu erhalten, geben Sie eine API-Funktion (z. B.
http://mycompany.com/apiv1/login
:) an, die den Master-Benutzernamen und das Master-Kennwort als Eingabe verwendet, einen temporären HTTP-Basisauthentifizierungs-Benutzernamen / das temporäre Kennwort auf der Serverseite erstellt und das Token zurückgibt (z. Ym9ic2Vzc2lvbjE6czNjcmV0). Dieser Benutzername / dieses Passwort sollte vorübergehend sein und nach etwa 20 Minuten ablaufen.Stellen Sie für zusätzliche Sicherheit sicher, dass Ihr REST-Service über HTTPS bereitgestellt wird, damit Informationen nicht im Klartext übertragen werden
Wenn Sie Java verwenden, bietet die Spring Security-Bibliothek eine gute Unterstützung für die Implementierung der oben genannten Methode
quelle
Ich denke, der beste Ansatz ist die Verwendung von OAuth2. Google es und Sie werden viele nützliche Beiträge finden, die Ihnen beim Einrichten helfen.
Dies erleichtert die Entwicklung von Clientanwendungen für Ihre API aus einer Web-App oder einer mobilen App.
Hoffe es hilft dir.
quelle
Ich habe die JWT-Authentifizierung verwendet. Funktioniert gut in meiner Anwendung.
Es gibt eine Authentifizierungsmethode, für die die Benutzeranmeldeinformationen erforderlich sind. Diese Methode überprüft die Anmeldeinformationen und gibt bei Erfolg ein Zugriffstoken zurück.
Dieses Token muss an jede andere Methode in meiner Web-API im Header der Anforderung gesendet werden.
Es ist ziemlich einfach zu implementieren und sehr einfach zu testen.
quelle