Gibt es eine Möglichkeit, meine Android App in Java-Code eindeutig zu identifizieren? Vielleicht eine Kombination aus dem Paketnamen und etwas anderem? Ich weiß, dass es eine Möglichkeit gibt, ein einzigartiges Android Gerät zu identifizieren, aber das ist nicht was ich suche.
Ich möchte meine Android-App, die ich erstellt habe, eindeutig identifizieren können, damit ich diese Informationen an meine eigene private RESTful-API weitergeben kann. Dies würde es mir ermöglichen zu überprüfen, dass der Anruf von meiner Android App kommt und nicht von einem anderen, nicht autorisierten. Ich möchte, dass meine RESTful-API nur mit der von mir erstellten App funktioniert und niemand kann sie fälschen oder unberechtigt darauf zugreifen.
Oder ist das eine Unmöglichkeit? Ich frage mich nur, wie Apps wie Snapchat ihren eigenen Login haben und was nicht. Offensichtlich gibt es etwas, das es sichert.
Wenn Sie Google Maps in Ihrer App verwenden möchten, müssen Sie bei jeder Anfrage einen API-Schlüssel angeben. Google Maps Android-Entwickler-Website Soweit ich weiß, ist das der gleiche Mechanismus, mit dem sie auch Ihre App für Werbung identifizieren. Dieser Schlüssel wird im Klartext übertragen, damit er abgefangen werden kann. Sie tun Betrugserkennung, um Missbrauch zu verhindern, also, wenn Ihr RESTful-Service der gleichen Art wie Karten oder Anzeigen ist, ist dies der Weg, um für Android-Apps zu gehen.
Wenn Sie hochwertige Daten wie Snapchat (Akte von Personen) haben, müssen die Benutzer ein geheimes aka Passwort angeben, um die Verbindung zu sichern. Wenn Sie den Aufwand für den Benutzer gering halten möchten, können Sie Facebook oder Google Authentifizierungsmechanismen verwenden.
Sieh dir auch Restsicherheits-Spickzettel an, um einen schönen Überblick über das Thema zu erhalten. (Vor allem der Abschnitt Authorization.)
Dies ist ein recht breites Themenfeld, das mehr mit dem tatsächlichen Design des RESTful-Dienstes als Android zu tun hat. Im Allgemeinen sollten REST-konforme Dienste mit der Idee entworfen werden, dass jeder auf sie zugreifen kann, und Sie schaffen Sicherheit, um sicherzustellen, dass Ihre Benutzerdaten privat und nur für Personen zugänglich sind, die die Berechtigung haben, darauf zuzugreifen, wie es die Realität des Internets ist Sobald der Endpunkt da draußen ist, können und werden Leute versuchen, darauf zuzugreifen.
Persönlich verwende ich normalerweise JSON Web Tokens (JWT). Sie können ein Token, das vom Server mithilfe der vom Benutzer bereitgestellten Anmeldeinformationen validiert wird, in einen Header einschließen. Auf diese Weise können Sie Anmeldeinformationen überprüfen und nicht autorisierten Zugriff ablehnen, da sie auf OAuth basieren, sowie einige zusätzliche Möglichkeiten zum Sichern des Dienstes, einschließlich Tokenablauf, enthalten, sodass die Anwendung das Token alle X Minuten / Stunden / Tage erneuern muss usw., falls jemand böswillig das Token ergreift. Dies bietet Ihnen auch einen einfachen Mechanismus, um den aktuellen Benutzer direkt vom Token zu identifizieren. Hier ist eine gute Einführung in JWTs und was sie zusammensetzen .
Zusammenfassend ist die Natur von Web-Services, dass jedes internetverbundene Gerät theoretisch durch Spoofing, Paket-Inspektion usw. in Verbindung gebracht werden kann Authentifizierung auf Geräteebene, bei der jedes einzelne Gerät, das eine Verbindung mit dem Dienst herstellen wird, bekannt sein muss. Was ich stattdessen glaube, ist eine starke Authentifizierung auf Service-Ebene. Eine gute REST-API ist plattformunabhängig und wird zwischen Apps und Websites gleichermaßen verwendet, wobei die Sicherheit auf Anfrageebene und nicht auf Geräteebene Priorität hat.
Vielleicht möchten Sie das Einmalpasswort überprüfen. Wenn Ihre Anwendung installiert wird, authentifizieren Sie Ihren Benutzer und geben Ihrer Anwendung einen Startwert . Wenn Ihre Anwendung Ihren Restdienst aufruft, stellen Sie zusammen mit Dienstargumenten auch ein einmaliges Kennwort bereit, das von diesem Seed erstellt wird.
Der wichtigste Vorteil von OTPs besteht darin, dass Im Gegensatz zu statischen Passwörtern sind sie nicht anfällig für Wiederholungen Anschläge. Dies bedeutet, dass ein potentieller Eindringling, der es schafft, ein OTP, das bereits zur Anmeldung bei einem Dienst oder zur Durchführung eines Transaktion wird nicht in der Lage sein, es zu missbrauchen, da es nicht mehr sein wird gültig.
Es existiert ein offener HMAC-basierter Einmalpasswort-Algorithmus mit dem bereitgestellten Java-Code für Sie von beginnen.
Wie andere bereits erwähnt haben, wird das Senden einer statischen Kennung nicht sicherstellen, dass Sie nur den Zugriff von Ihrer App aus abrufen.
Sie benötigen einen Weg, um einen Handshake zwischen Ihrer API und Ihrer App zu erstellen. Eine einfache, aber dennoch sichere Möglichkeit besteht darin, einen Schlüssel zu haben, den Ihre App und Ihre API teilen. Wenn Sie eine erste Verbindung zur API herstellen, erstellen Sie eine zufällige Zeichenfolge, verschlüsseln sie mit dem freigegebenen Schlüssel und übergeben die Zeichenfolge und die verschlüsselte Zeichenfolge an die API. Die API verschlüsselt dann Ihre zufällige Zeichenfolge mit ihrem gemeinsamen Schlüssel und vergleicht sie mit Ihrer verschlüsselten Zeichenfolge.
Zum Beispiel:
%Vor%Senden Sie RS und ES an Ihre API, die dann dieselbe Verschlüsselung mit demselben gemeinsamen Schlüssel durchführt. Wenn die verschlüsselten Zeichenfolgen nicht übereinstimmen, weist die API die Anforderung zurück und protokolliert die RS, sodass sie nicht erneut verwendet werden kann Wenn es zutrifft, wird der RS weiterhin protokolliert, aber der Zugriff auf die API wird akzeptiert. Sie können die erneute Authentifizierung jedes Mal erzwingen, wenn die App verwendet wird. Sie können die RS auch mit weiteren API-Anfragen senden, da die Authentifizierung erfolgreich abgeschlossen wurde. Sie müssen jedoch sicherstellen, dass Sie die RS nach kurzer Zeit abschalten. p>
Tags und Links android restful-authentication