2017-01-06 3 views
2

Ich habe Rest APIs für meine Android App erstellt. Alle APIs sind mit OAuth2 (password grant_type) geschützt.Sichere Ruhe APIs für vertrauenswürdige Anwendungen

Benutzer stellt den Benutzernamen & Passwort und Server überprüft die Anmeldeinformationen und Fragen access_token und refresh_token, die dann für den Aufruf von APIs verwendet werden können.

Jetzt ist das Problem hier, dass APIs öffentlich und offen für alle sind. Wie kann ich sicherstellen, dass nur von My Apps generierte Anrufe berücksichtigt werden?

Szenario: XYZ ist ein Benutzer von My App und auch ein sehr guter Entwickler. Er war neugierig genug, um herauszufinden, wie meine App und Apis interagieren. Jetzt ist er auch ein bisschen ehrgeizig (ich denke) und beschließt, seine eigene Android-App (ähnlich meiner App) zu erstellen und nutzt meine Rest-APIs. Wie kann ich meine APIs gegen diese Verwendung sichern?

Ich schaute über einige andere Beiträge, aber ich fand nichts nützliches, um meine APIs vor einer solchen Verwendung zu schützen.

+0

Wenn Ihr Server oauth2 implementiert hat, wie Sie sagen, dann würde jede Anwendung eine Client-ID und Client-Secret für den Zugriff auf Ihre API benötigen. – akash93

+0

Da ich nicht zulassen, dass andere Apps basierend auf meinen APIs erstellen. Meine APP wird die clientId haben und diese wird verwendet, um die App zu überprüfen, aber diese clientId kann entdeckt werden, wenn jemand meine APK in den Quellcode dekompiliert. Jetzt, wenn jemand clientId entdeckt hat, kann er eine App erstellen, um dasselbe zu tun, was meine App tut. – behinddwalls

+0

Es ist unmöglich, Ihren Client unzerbrechlich zu machen, aber Sie können sich auf einige Wege beziehen, um es schwieriger zu machen https://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api-keys-in -Android – akash93

Antwort

2

Was Sie versuchen zu tun ist unmöglich, zumindest aus technischer Sicht. Sie können verschiedene Tools verwenden, um die in Ihrer Anwendung gespeicherten Geheimnisse zu verschleiern (z. B. ProGuard). Letztendlich müssen sie unabhängig vom Mechanismus, mit dem Sie Ihre Geheimnisse verschleiern, für das Gerät zugänglich sein, das sie verwendet. Sie können auch andere Schritte unternehmen, um die Zeit für das Reverse-Engineering Ihrer Anwendung zu verlängern, z. B. häufig die API so zu ändern, dass reverse-engineerte Clients möglicherweise nicht mehr funktionieren, oder obligatorische Updates, die die Geheimnisse und Mechanismen zur Verschleierung der Anforderungen ändern Geheimnisse.

Unabhängig davon, was Sie tun, kann ein ausreichend motivierter Benutzer jedes Geheimnis, das Sie in Ihrer Anwendung verteilen, erhalten.

Rechtlich haben Sie mehr Optionen. Sie können es unmöglich machen, legal Zugriff auf Ihre API von einer nicht autorisierten Anwendung mit einem geeigneten EULA; siehe Blizzard v BnetD. Wenn Sie das Urheberrecht an den Daten besitzen, die Ihr Dienst zur Verfügung stellt, können Sie möglicherweise verhindern, dass Dritte ohne Ihre Zustimmung an anderer Stelle reproduziert werden, oder Sie können dafür Gebühren erheben. Es gibt wahrscheinlich auch andere legale Möglichkeiten; Sie müssten einen Anwalt konsultieren.

Aber warum stören? Bevor Sie mit diesem Pfad beginnen, sollten Sie sich vielleicht selbst fragen, warum Sie verhindern möchten, dass andere Anwendungen überhaupt auf Ihre API zugreifen. Wenn Benutzer Ihren Service als wertvoll empfinden, aber mit dem von Ihnen bereitgestellten Client nicht zufrieden sind und bereit sind, eine Anwendung eines Drittanbieters für den Zugriff auf Ihren Service zu installieren, sollten Sie sich auf die Verbesserung Ihres eigenen Clients konzentrieren, anstatt Ihre Benutzer zur Verwendung eines Clients zu zwingen sie bevorzugen es eindeutig nicht.

Verwandte Themen