Wenn Sie überprüfen möchten, ob der Nutzer eine legitime Kopie Ihrer App im Google Play Store gekauft oder heruntergeladen hat, sollten Sie die Lizenzüberprüfung auf einem von Ihnen verwalteten Server durchführen.
In diesem Leitfaden wird der schrittweise Prozess zum Durchführen der serverseitigen Lizenzüberprüfung beschrieben. Außerdem werden einige Best Practices für diese Prüfung vorgestellt.
Prozessübersicht
Abbildung 1 zeigt, wie Informationen zwischen Ihrer App, Google Play und Ihrem privaten Server übertragen werden:
- Ihre App sendet eine Anfrage an Google Play und fragt, ob ein bestimmter Nutzer eine rechtmäßige Kopie Ihrer App gekauft oder heruntergeladen hat.
- Google Play antwortet, indem ein Antwortdatenobjekt (ein Objekt vom Typ
ResponseData
) an deine App gesendet wird. Dieses Objekt ist eine signierte Information, die angibt, ob der Nutzer eine legitime Kopie deiner App gekauft oder heruntergeladen hat. - Ihre Anwendung sendet eine Anfrage an einen von Ihnen verwalteten privaten Server und überprüft den Inhalt der Antwortdaten.
- Der Server antwortet mit einem Status an Ihre Anwendung, der angibt, ob der Nutzer tatsächlich eine legitime Kopie Ihrer Anwendung gekauft oder heruntergeladen hat. Wenn der Server eine Erfolgsmeldung ausgibt, überprüfen Sie die Antwort und gewähren Sie dem Nutzer dann Zugriff auf die Ressourcen, für die eine Lizenz erforderlich ist.
Da die Antwortdaten von Google Play signiert und dann auf Ihrem Server geprüft werden, gibt es keine Möglichkeit, das Objekt auf dem Gerät zu ändern, auf dem Ihre App ausgeführt wird. Wenn Ihre App auf den Server angewiesen ist und Ressourcen nur legitimen Nutzern zur Verfügung stellt, ist Ihre App wesentlich besser vor nicht autorisierten Nutzern geschützt.
In den folgenden Abschnitten finden Sie weitere Hinweise, die Sie bei der serverseitigen Lizenzüberprüfung beachten sollten.
Schutz vor Replay-Angriffen
Nachdem Google Play eine Antwort zum Lizenzstatus des Nutzers erhalten hat, kann der Nutzer die Antwortdaten kopieren und mehrmals verwenden oder an andere Nutzer weitergeben, die dann eigene Anfragen an den privaten Server Ihrer App fälschen können. Diese Art von Aktion wird als Replay-Angriff bezeichnet.
Um die Wahrscheinlichkeit zu verringern, dass Nutzer Replay-Angriffe erfolgreich ausführen, sollten Sie die folgenden Maßnahmen ergreifen, bevor Sie eine Anfrage an den Anwendungsserver senden:
Prüfen Sie den Zeitstempel in den Antwortdaten und achten Sie darauf, dass Google Play die Antwort kürzlich generiert hat.
Begrenzen Sie die Serveranfrage, z. B. mit exponentiellem Backoff, und reduzieren Sie so die Häufigkeit, mit der Ihre Anwendung versucht, dieselben Antwortdaten an den Anwendungsserver zu senden.
Bevor Sie den Inhalt der Antwortdaten von Google Play auf Ihrem privaten Server prüfen, müssen Sie eine erste, auf Authentifizierung basierende Anfrage an Ihren privaten Server senden. Senden Sie in dieser ersten Anfrage Nutzeranmeldedaten an Ihren Server. Dieser antwortet dann mit einer Nonce oder einer Zahl, die nur einmal verwendet wird. Sie können diese Nonce dann in Ihre nächste Anfrage an Ihren privaten Server aufnehmen, um Daten zur Lizenzüberprüfung anzufordern. Weitere Informationen zur Auswahl eines guten Werts für die Nonce finden Sie im Abschnitt Geeigneten Nonce-Wert generieren.
Geeigneten Nonce-Wert generieren
Verwenden Sie eine der folgenden Methoden, um einen Nonce-Wert zu erstellen, der schwer zu erraten ist:
- Einen Hashwert basierend auf der Nutzer-ID generieren.
- Hiermit wird ein Zufallswert pro Nutzer generiert. Speichern Sie diesen Zufallswert auf dem Anwendungsserver als Teil eines bestimmten Nutzerattributs.
Antwortdaten von deinem Server überprüfen
Achte beim Überprüfen der Antwortdaten, die der Server deiner App an deine App sendet, darauf, dass die Antwort der Lizenzüberprüfungsbibliothek nicht gefälscht ist. Die Signatur in den Antwortdaten des Anwendungsservers lässt sich mit dem Schlüssel vergleichen, den deine App in einem vorherigen Schritt von Google Play erhalten hat.
Der Block für die Lizenzüberprüfungsbibliothek (License Verification Library, LVL) ist der einzige Teil, der signiert wird. Daher ist es der einzige Teil der Antwortdaten Ihres Anwendungsservers, dem Ihre Anwendung vertrauen sollte.