2017-03-20 4 views
0

Ich bin dabei, eine mobile Anwendung zu entwerfen, die für ihre Geschäftslogik und Datentransaktionen eine Verbindung zu einem serverseitigen Prozess herstellen muss. Ich schreibe meinen serverseitigen Code in Java mithilfe von Spring Boot, und ich beabsichtige, eine Rest-API zu erstellen, damit die mobile App eine Verbindung mit dem Server herstellen kann.Rest API-Sicherheit für mobile Anwendungen

Ich mache im Moment nur eine Recherche, um die Verbindung zwischen der mobilen App und dem Server zu sichern. Ich möchte, dass sich der Benutzer in der mobilen App nach dem Öffnen der App anmeldet und dass er die App so lange nutzen kann, wie er möchte, und für den Zugriff auf eine Zeitüberschreitung nach einer bestimmten Zeit der Inaktivität.

Kann mir jemand eine sehr einfache Lektüre empfehlen? Ich habe OAuth2 angeschaut, aber das scheint sich für die Anmeldung bei Web-Diensten zu eignen, die ein anderes Konto verwenden (wie Google, GitHub usw.).

Wäre es akzeptabel, sich über https (SSL) anzumelden, indem Sie Benutzername und Passwort an einen Rest-Endpunkt übergeben und eine Art Token (eine GUID?) Zurückgeben. Dann muss der Client (mobile App) diese GUID mit jedem weiteren Anruf weiterleiten, damit der Server den Anruf bestätigen kann? Ist es besser, in diesem Szenario einfach alles über SSL zu machen?

Ich habe ein bisschen Nachforschungen angestellt, aber ich finde anscheinend nichts, was dem entspricht, was ich versuche zu tun.

Hoffnung jemand kann

Dank

Antwort

1

hilft Was ich in der Regel tun, um ein JSON Web-Token Crafting (https://jwt.io/) und behandelt die Sitzungen auf eigener Faust.

JWT ist wirklich nett, da Sie nur einen geheimen Schlüssel auf der Serverseite definieren müssen. Solange Ihre Clients die von Ihnen erstellte Zeichenfolge übergeben können (beispielsweise in den Headern), und solange niemand Ihren geheimen Schlüssel abrufen kann, sind Sie sicher, dass alle Daten, die Sie beim Erstellen des Tokens gesendet haben, von Ihnen generiert wurden. (Zögern Sie nicht, den stärksten Verschlüsselungsalgorithmus zu verwenden)

+0

Danke für den Beitrag, das scheint genau das zu sein, was ich suche – user1387735

1

Für eine sichere Verbindung verwenden Sie HTTPS auf Stufe TLS 1.2. Stecken Sie dann das Serverzertifikat in die App, um MITM-Angriffe zu verhindern.

Es ist sicher, den Benutzernamen und das Passwort zu übergeben. Sie können ein zeitlich begrenztes Token für die weitere Authentifizierung zurückgeben, das benötigt/gewünscht wird.

Mit HTTPS wird alles außer dem Adressabschnitt der URL verschlüsselt. Aber seien Sie vorsichtig mit der Abfragezeichenfolge, es kann in den Serverprotokollen landen.

0

Nochmals vielen Dank für diese Antworten. Ich habe meinen Dienst implementiert, um unter https zu laufen, indem ich server.ssl.key-store-Parameter benutze und es sieht so aus, als würde es funktionieren. Ich habe keytool.exe verwendet, um einen Trust Store zu erstellen, und ich verwende meine SpringBoot-App (mit Tomcat) mit diesem Trust Store. Ich kann einen Browser zu meinem REST-Endpunkt öffnen (diesmal mit https, nicht mit http), der Browser fragt nach Authentifizierung und wenn ich meine Benutzerdetails eintrage, vergleicht er sie mit meinem Datenbankbenutzer und erlaubt mir, die Antwort vom Server zu sehen.

Eine Frage aber, was ist der Sinn eines Truststores auf der Serverseite (Java), wenn ich einfach mit einem alten Browser auf den REST-Endpunkt zugreifen kann und einfach meinen Benutzernamen und mein Passwort eintrage? Letztendlich wird auf diesen REST-Endpunkt nicht über einen Browser zugegriffen. Der Zugriff auf diesen REST-Endpunkt erfolgt mithilfe einer mobilen App programmgesteuert. Daher nehme ich an, dass ich mich mit dem Benutzernamen und dem Passwort über https anmelden werde. Ich dachte, ich müsste auf der Client-Seite ein Zertifikat haben, um zu kommunizieren, oder funktioniert das nicht so?

Danke wieder

Verwandte Themen