REST-Webdienst mit Token (Java) sichern

Diese Frage hängt in gewisser Weise mit der unten verlinkten Frage zusammen. Ich benötige jedoch ein wenig mehr Klarheit in Bezug auf einige Aspekte und einige zusätzliche Informationen. Verweisen:Implementierung des REST-Webdienst-Authentifizierungstokens

Hintergrund:

Ich muss die Sicherheit für einen REST-Webdienst mithilfe eines Tokens implementierenDer Webservice ist zur Verwendung mit dem Java-Client vorgesehen. Daher sind Formularauthentifizierung und Popups für Anmeldeinformationen nicht hilfreich.Ich bin neu in REST-Sicherheit und Verschlüsselung

Das habe ich bisher verstanden:

Für die erste Anfrage:

Der Benutzer stellt eine https-Verbindung her (oder der Container stellt sicher, dass https mit 301 verwendet wird)Benutzer POSTet Benutzername und Passwort für den AnmeldedienstWenn die Anmeldeinformationen gültig sind, werden wir:Erzeugen Sie ein zufälliges temporäres TokenSpeichern Sie das zufällige Token auf dem Server und ordnen Sie es dem tatsächlichen Benutzernamen zuVerschlüsseln Sie das Token mit einem symmetrischen Schlüssel, der nur dem Server bekannt istHash das verschlüsselte TokenSenden Sie das verschlüsselte Token und den Hash an den Client

Für spätere Anfragen:

Der Client sendet diese Kombination aus verschlüsseltem Token und Hash (unter Verwendung des Felds "Benutzername" von basic?)Wir stellen sicher, dass das verschlüsselte Token nicht mit dem Hash manipuliert wird, und entschlüsseln es dannWir überprüfen das entschlüsselte Token in der Session-Tracking-Tabelle auf einen nicht abgelaufenen Eintrag und erhalten den tatsächlichen Benutzernamen (Ablauf wird durch Code verwaltet?)Wenn der Benutzername basierend auf zulässigen Rollen gefunden wird, werden zulässige Vorgänge konfiguriert

Mehr Details:

Da der Client ein Java-Client ist, kann die erste Anforderung ein POST sein, der die Anmeldeinformationen enthält. Es sieht jedoch so aus, als ob die Anmeldeinformationen verfügbar gemacht werden, bevor https eingerichtet wird. Sollte es also einen Dummy-GET für eine gesicherte Ressource geben, damit zuerst https eingerichtet wird?Unter der Voraussetzung, dass das oben Gesagte erforderlich ist, handelt es sich bei der zweiten Anforderung um einen LoginAction-POST mit Anmeldeinformationen. Diese Anfrage wird manuell bearbeitet (ohne die Autorisierung des Containers). Ist das richtig?Die obige LoginAction gibt dem Benutzer die Kombination aus verschlüsseltem Token + Hash zurückDer Benutzer legt den Header fest, der vom BASIC-Authentifizierungsmechanismus verwendet wird (Feld Benutzername).Wir implementieren ein JAASRealm, um das Token zu entschlüsseln, zu validieren und die zulässigen Rollen zu ermittelnDen Rest des Autorisierungsprozesses erledigt der Container mit der in der web.xml definierten WebResourceCollection

Ist das der richtige Ansatz?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage