Ich habe ein SPRING Backend mit einer REST-API. Es ist durch Benutzername und Passwort gesichert. Wenn ich es mit meinem PC-Browser öffne, wird zuerst der Login-Bildschirm angezeigt und nachdem ich die Zugangsdaten hinzugefügt habe, kann ich direkt auf die API zugreifen.
Wenn ich das selbe über eine Android APP versuche, bekomme ich jedes mal auf den Login-Bildschirm verwiesen. Zur Authentifizierung auf der Android-Seite verwende ich eine REST-API-Anfrage, auf die standardmäßig zugegriffen werden kann. Ist der interne Android App Browser zum Speichern von Session-Cookies nicht kompatibel? Jedes Mal, wenn eine neue HTTP-Sitzung erstellt wird. Ich benutze Volley für die Anfragen
spring-security.xml
%Vor%der Code in der Steuerung aus dem Rest api
%Vor%Spring Security DEBUG
%Vor%Volley
%Vor%Ich vermute, dass das Problem darin besteht, dass Sie Ihren eigenen benutzerdefinierten Authentifizierungs-Controller-Endpunkt implementieren und nicht die gesamte Feder-Sicherheitskette verwenden.
Die normale Filterkette wird immer noch bei allen Anfragen gemäß Ihrer XML-Konfiguration aufgerufen, aber indem Sie einfach die authenticate () -Methode in einem Controller aufrufen, tun Sie das nur, und nicht den Rest des Authentifizierungsvorgangs, z. Sie werden mit Ihrer Adhoc-Controller-Authentifizierung keinen Cookie auf die Antwort setzen.
Der einfachste Weg, dies zu testen, ist einfach die URL direkt zu curlen oder etwas wie postman (chrome plugin for rest apis) zu verwenden, um den API-Endpoit zu testen und zu sehen, ob irgendwelche Cookeins auf die Antwort gesetzt werden.
Wenn Sie die Kontrolle über den serverseitigen Code haben (z. B. können Sie ihn ändern und arbeiten nicht nur an der Android-App), hier ein paar Gedanken:
Ich würde benutzerdefinierte Authentifizierungsendpunkte vermeiden und versuchen, das Sicherheitssachen in die Hand zu nehmen - die Federsicherheit ist wirklich gut darin.
Angenommen, Sie möchten nicht mit oauth und der Komplexität dieser Lösungen für die API gehen, dann werfen Sie einen Blick auf Empfohlener Ansatz von Google zum Sichern von APIs für mobile Apps . Es ähnelt der Vorgehensweise, die Sie vorgenommen haben, aber für den Login betten Sie einfach eine Webansicht in die Android-App ein und verwenden sie, um sich direkt auf dem Standard-Sicherheitsformular einzuloggen (nutzen Sie also das Spring-Sicherheitsstandardverhalten, z Cookies usw.), dann greifen Sie in der App einfach ein Benutzer-Token aus der Web-Antwort und speichern dieses dann - was dann in allen API-Anfragen als Anforderungs-Header verwendet werden kann (damit sich der Benutzer nicht länger bei der mobilen App anmelden muss)
Ich habe hier einen Überblick über den Ansatz geschrieben:
Sichern Sie Ihre API für den mobilen Zugriff
und haben auch hier eine Federsicherheitsimplementierung zusammengestellt.
Habe deinen Vorschlag versucht und es funktioniert.
Nachdem ich überprüft habe, dass das Backend den benötigten Cookie transportiert, stelle ich volley so ein, dass es das übertragene Cookie speichert und es bei jeder Anfrage danach erneut als Token überträgt. Der Cookie wird in den Einstellungen gespeichert.
%Vor%wie von vmirinov auf angegeben, gehen Sie hier mit gliderly Änderung
%Vor%Tags und Links java android spring rest spring-mvc