L'intégration de Google AppEngine avec un client lourd
-
18-09-2019 - |
Question
Je veux faire une solution client-serveur multi-utilisateurs avec Java Swing client lourd comme une extrémité avant et Google AppEngine (Java), comme un back-end.
Le problème est que GAE ne fournit que des formulaires Web pour se connecter et, donc il n'y a aucun moyen trivial d'utiliser des comptes Google fonctionnalités dans un client lourd.
Pouvez-vous donner quelques conseils / conseils / idées sur la façon de permettre une connexion client épaisse et d'une webapp déconnexion GAE?
La solution
Il existe un moyen pour les applications clientes pour authentifient les comptes Google, mais je ne sais pas si le jeton que vous recevez peut être repassée à AppEngine. Voir: ClientLogin pour les applications installées
Autres conseils
Je suis désolé, je ne peux que vous répondre indirectement. Il est possible de se connecter à une application sur appspot.com avec un compte Google. Il suffit de faire tout ce qui serait un navigateur, y compris le maintien des cookies et de contacter plusieurs serveurs comme ils vous rebondissent.
J'ai joué avec cela pour un projet mort-né quelques mois et a fini avec un script shell qui fonctionne la plupart du temps cURL pour se connecter. Peut-être que vous pourriez prendre de ce que vous avez besoin.
#!/bin/bash
my_app="set-this-to-my-app-id"
url="http://$my_app.appspot.com"
curl='curl --cookie-jar cookies'
if [ -z "$EMAIL" -o -z "$PASS" ]; then
echo -n 'Email: '
read EMAIL
echo -n 'Pass: '
read PASS
fi
rm -f cookies auth
echo 'Login'
$curl https://www.google.com/accounts/ClientLogin --output auth \
-d "Email=$EMAIL" -d "Passwd=$PASS" \
-d accountType=HOSTED_OR_GOOGLE \
-d source=$my_app \
-d service=ah
. auth # XXX Be careful here. The output of the above
# command happens to be Bash syntax too!
rm -f auth
echo 'Logging into app and getting cookie'
$curl "$url/_ah/login?continue=$url/console/&auth=$Auth"
echo
echo 'Example POST query'
$curl -X POST --cookie cookies "$url/some/path" -d 'foo=bar'
echo
rm -f cookies
comme suggéré par le processus DeFontes @ Jason d'autorisation ClientLogin se penche sur cette question.
comme une approche alternative minimale d'effort, vous pourriez intégrer le Web (html) forme dans votre client d'épaisseur, à savoir utiliser un composant Java qui prend en charge HTML-rendu (comme un JEditorPane
avec un HTMLEditorKit
installé) et de présenter ce composant à l'intérieur de votre application swing -. au moins les utilisateurs aurait pas besoin de revenir-et-vient entre votre application et le navigateur de cette façon