Wie sollte man einen Webservice mit Authentifizierung zur Kommunikation mit Android-Geräten bauen?

  • Hallo zusammen!


    Ich arbeite zur Zeit an einer Websoftware und möchte bestimmte Funktionen der Software auf Smartphones bereitstellen. Diese Funktionen sollen nur Usern bereit stehen, die sich mit dem Smartphone authentifiziert (Login) haben. Ebenso soll die Kommunikation zum Webservice, der die Methoden bereitstellt, verschlüsselt sein.


    Von Seiten der Websoftware sind mir keine Grenzen gesetzt. Ob ich nun JSON, XML und ne REST-API, oder SOAP nutze und dann WSDL bereitstelle, ist egal.


    Ich würde nur gerne wissen, was bei euch die best-practices sind, oder womit ihr gute Erfahrungen gemacht habt und wie ihr den Login / Authentifizierung realisiert habt (vielleicht sogar mit gespeicherten Login Daten => verschlüsselt? Oder nur Token gespeichert?).


    Wie würdet ihr die Kommunikation zwischen Smartphone/Android-App und einem Webservice handeln?


    Viele Grüße
    Patrick

  • Hi whitenexx,


    du hast hier mehrere Möglichkeiten, wobei ich mich Persönlich für das Kombinierte Verfahren in meinen Apps entschieden habe. Bei der Übertragung eines Symmetrischen Keys kann es schnell passieren, dass der Key abhanden kommt und missbraucht wird (Bei Symmetrischer Übertragung). Hierbei haben beide Seiten den gleichen Schlüssel. Das Verfahren ist zwar relativ schnell, aber unter den Verschlüsselungsverfahren eher noch am unsichersten :) Mittels einer Asymmetrischen Verbindung hast du dieses Problem nicht, allerdings ist dies Verfahren sehr langsam. Für eine Asymetrische Verschlüsselung benötigst du folgendes:


    Server besitzt Private Key
    Gerät besitzt nur Public Key


    Hierfür verwendest du den Public Key und der Server kann die eingehende Verb. mit dem Private Key entschlüsseln.


    Meine bevorzugte Methode, das kombinierte Verfahren ist eine Gute Mischung aus beiden Welten (daher kombiniert). Dabei
    hat der Server wieder den Private Key und dein Mobiles Gerät nur den Public Key. Im nächsten Schritt generierst du innerhalb der App einen Symetrischen Schlüssel nimmst den und Verschlüsselst diesen mit deinem Public Key. Diesen kannst du nun zum Server senden. Auf dem Server verwendest du dann den Private Key um den Symetrischen Schlüssel wieder zu entschlüsseln.


    Nun haben beide Seiten einen Symetrischen Schlüssel der vorher nicht abgefangen werden konnte ;) Somit kannst du nun für die weitere Verbindung die Symetrische Verschlüsselung nutzen ;)


    Ich hoffe dieser kleine Ausflug ist dir bei deinem Vorhaben behilflich und hat dich nicht zu sehr verwirrt (Meine Kollegen sind immer verwirrt, wenn ich Ihnen diesen Weg erkläre. Das Problem ist hier einfach die vielen Wege. So etwas Grafisch zu erklären ist natürlich deutlich verständlicher)


    P.S: Über https:// wäre es natürlich auch möglich. Allerdings erzeugt dieser Weg massig overhead wie ich finde. (Erst Serverzert. prüfen, checksummen vergleich etc. pp)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!