Интеграция Google AppEngine с толстым клиентом
-
18-09-2019 - |
Вопрос
Я хочу создать многопользовательское клиент-серверное решение с Java Swing thick client в качестве интерфейса и Google AppEngine (Java one) в качестве серверной части.
Проблема в том, что GAE предоставляет только веб-формы для входа в систему и выхода из нее, поэтому нет простого способа использовать функции Google Accounts в толстом клиенте.
Можете ли вы дать несколько советов / подсказок / идей о том, как разрешить толстому клиенту входить в веб-приложение GAE и выходить из него?
Решение
Для клиентских приложений существует способ аутентификации в учетных записях Google, но я не знаю, можно ли передать полученный вами токен обратно в AppEngine.Видишь: ClientLogin для установленных приложений
Другие советы
Извините, я могу ответить вам только косвенно.Войти в приложение можно на appspot.com с помощью учетной записи Google.Вам просто нужно делать все, что делает браузер, включая сохранение некоторых файлов cookie и обращение к нескольким серверам, когда они перенаправляют вас.
Я поиграл с этим для мертворожденного проекта пару месяцев назад и в итоге получил сценарий оболочки, который в основном запускает 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 - по крайней мере, пользователям не нужно будет таким образом переключаться между вашим приложением и браузером.