Интеграция Google AppEngine с толстым клиентом
Я хочу создать многопользовательское клиент-серверное решение с толстым клиентом Java Swing в качестве внешнего интерфейса и Google AppEngine (Java) в качестве внутреннего.
Проблема в том, что GAE предоставляет только веб-формы для входа и выхода, поэтому нет простого способа использовать функции учетных записей Google в толстом клиенте.
Можете ли вы дать несколько советов / советов / идей о том, как разрешить толстому клиенту входить и выходить из веб-приложения GAE?
3 ответа
У клиентских приложений есть способ аутентификации в учетных записях Google, но я не знаю, можно ли передать полученный токен обратно в AppEngine. Смотрите: ClientLogin для установленных приложений
Извините, я могу ответить вам только косвенно. Можно войти в приложение на appspot.com с помощью учетной записи Google. Вам просто нужно сделать все, что сделал бы браузер, в том числе сохранить некоторые куки-файлы и связаться с несколькими серверами, пока они вас не отослали.
Я поиграл с этим для мертворожденного проекта пару месяцев назад и закончил со сценарием оболочки, который в основном запускает cURL для входа в систему. Возможно, вы могли бы извлечь из него то, что вам нужно.
#!/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
Как предлагает @Jason DeFontes, процесс авторизации ClientLogin решает эту проблему.
В качестве альтернативного подхода с минимальными усилиями вы можете встроить веб-формы (html) в толстый клиент, то есть использовать компонент Java, который поддерживает рендеринг html (например, JEditorPane
с HTMLEditorKit
установлен) и представить этот компонент в вашем Swing-приложении - по крайней мере, пользователям не нужно будет переключаться между вашим приложением и браузером таким образом.