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.