Wie @ Morons in seiner Antwort erwähnt hat, ist es sehr schwierig, die Entität am anderen Ende der Verbindung zu überprüfen.
Der einfachste Weg, ein gewisses Maß an Authentizität bereitzustellen, besteht darin, den Server ein Geheimnis überprüfen zu lassen, das nur die reale Entität kennen würde. Für einen Benutzer kann dies ein Benutzername und ein Kennwort sein. Für eine Software, für die es keinen Benutzer gibt, können Sie ein Geheimnis einbetten.
Das Problem bei diesen Ansätzen ist, dass Sie dem Kunden etwas Vertrauen schenken müssen. Wenn jemand Ihre App zurückentwickelt oder Ihr Passwort stiehlt, kann er sich als Sie ausgeben.
Sie können Schritte unternehmen, um das Extrahieren der geheimen Informationen zu erschweren, indem Sie sie in der ausführbaren Datei verschleiern. Tools wie ProGuard, ein Obfuscator für Java, können dabei helfen. Ich weiß nicht so viel über die Verschleierung in anderen Sprachen, aber es gibt wahrscheinlich ähnliche Tools. Durch die Verwendung einer TLS-Verbindung können Sie verhindern, dass Personen Ihren Datenverkehr ausspähen, jedoch keinen MITM-Angriff. Das Fixieren kann dabei helfen, dieses Problem zu beheben .
Ich arbeite für ein Unternehmen namens CriticalBlue (Full Disclosure!) Mit einem Produkt namens Approov , das versucht, dieses Vertrauensproblem anzugehen. Es funktioniert derzeit für Android / iOS und bietet unseren Servern einen Mechanismus, um die Integrität der Client-App zu überprüfen. Dies geschieht, indem der Client eine Antwort auf eine zufällige Herausforderung berechnet. Der Client muss die Antwort unter Verwendung von schwer zu fälschenden Attributen des installierten App-Pakets berechnen und enthält einige ausgefeilte Manipulationsschutzmechanismen.
Es wird ein Token zurückgegeben, das Sie als Echtheitsnachweis an Ihre API senden können.
Der wichtige Unterschied bei diesem Ansatz besteht darin, dass die Authentizitätsprüfung auf dem Client zwar deaktiviert werden kann, Sie jedoch nicht das Authentifizierungstoken erhalten, das Sie zur Überprüfung Ihrer App beim Server benötigen. Die Bibliothek ist außerdem eng an die Eigenschaften der ausführbaren Datei gekoppelt, in der sie sich befindet. Daher wäre es sehr schwierig, sie in eine gefälschte App einzubetten und funktionsfähig zu machen.
Es gibt eine Kosten-Nutzen-Analyse, die jeder API-Entwickler durchführen muss, um zu entscheiden, wie wahrscheinlich es ist, dass jemand versucht, seine API zu hacken, und wie teuer dies sein könnte. Eine einfache geheime Prüfung in der Anwendung verhindert triviale Angriffe, aber sich gegen einen entschlosseneren Angreifer zu schützen, ist wahrscheinlich erheblich komplizierter und möglicherweise kostspieliger.