Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi GoogleSignInApi zur Verifizierung von Back-End Requests / Daraja Framework (https://www.delphipraxis.net/189758-googlesigninapi-zur-verifizierung-von-back-end-requests-daraja-framework.html)

mjustin 17. Jul 2016 13:34

GoogleSignInApi zur Verifizierung von Back-End Requests / Daraja Framework
 
Hallo,

hat FireMonkey (Android) Zugriff auf die GoogleSignInApi Klasse? Darüber kann eine App ein Google Token abrufen, das dann an eigene HTTP Back-End Server übermittelt und dort via Google API validiert und weiter genutzt werden kann:
Code:
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
    GoogleSignInAccount acct = result.getSignInAccount();
    String idToken = acct.getIdToken();
    mIdTokenTextView.setText("ID Token: " + idToken);
    // TODO(user): send token to server and validate server-side
} else {
    mIdTokenTextView.setText("ID Token: null");
}
Ich habe das mit einem Android Studio Beispiel-Projekt getestet und das erzeugte Token dann serverseitig (mit Indy) benutzt, um von Google Informationen zu diesem Token abzurufen.

Wenn das Token gültig ist, erhält der Server von der Google API eine JSON Datei die etwa so aussieht:
Code:
{
 "iss": "https://accounts.google.com",
 "sub": "110169484474386276334",
 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "iat": "1433978353",
 "exp": "1433981953",
 "email": "testuser@gmail.com",
 "email_verified": "true",
 "name" : "Test User",
 "picture": "https://lh4.googleusercontent.com/-kYgzyAWpZzJ/ABCDEFGHI/AAAJKLMNOP/tIXL9Ir44LE/s99-c/photo.jpg",
 "given_name": "Test",
 "family_name": "User",
 "locale": "en"
}
Falls der Java Code in FireMonkey im Prinzip abbildbar ist, kann das Token mit wenig Aufwand für die Verfizierung von Requests an in Delphi geschriebenen Back-End Servern eingesetzt werden.

Beispielcode für die Anfragen zwischen dem Android Gerät und dem Back-End Server einerseits, und zwischen Back-End Server und dem Google OAuth 2 Service andererseits würde ich dann im Daraja Framework einbauen.

Der Back-End Server kann anhand des Tokens prüfen:
* welche app-spezifische Client-ID die App verwendet (diese steht im Feld "aud" des Tokens und kann benutzt werden um gefälschte Token zu erkennen)
* dass das Token von Google erstellt wurde
* dass Google das Token an ein Gerät sendete an dem der Benutzer mit dem Google-Konto angemeldet ist das über die Email Adresse in "email" eindeutig identifiziert ist

Im Gegensatz zu einfacheren Methoden, bei denen ein Gerät sich beim Back-End Server identifizieren muss, wird mit dem Token keine Benutzer-ID wie zum Beispiel die Email Adresse des Google Kontos übermittelt.
Stattdessen sendet der Back-End Server nur das vom Client per HTTPS übermittelte Token an einen Google Service, der daraufhin die Benutzerangaben an den Back-End Server zurückgibt.

Bei Interesse melde ich mich hier wieder wenn es im Daraja Framework etwas Neues zum Thema Google Sign In APIs gibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz