У нас были аналогичные требования последнего проекта: GAE бэкенд с GWT фронтэнда и Android/iPhone. Кроме того, мы не хотели хранить учетные данные пользователя.
Итак, мы решили использовать OpenID, который, к сожалению, является веб-стандартом и не очень хорошо работает с мобильными устройствами, но выполним.
На стороне GAE мы просто включили федеративный логин, который дал нам OpenID.
На мобильных устройствах, когда пользователю необходимо войти в систему, мы представляем им список оппонентов OpenID (Google, Yahoo и т. Д.). Затем мы открываем собственный браузер (не встроенный браузер) и напрямую на выбранный сайт аутентификации OpenID. Поверхность заключается в том, что браузер пользователя обычно уже имеет имя пользователя/пароль, поэтому этот шаг требует, чтобы пользователь нажал одну кнопку.
Все это довольно просто. Теперь вот сложная часть: После того, как пользователь подтвердит вход в систему, OpenID перенаправляет обратно на наш возвратный url GAE (вам нужно указать этот URL-адрес, когда запрос сделан). На этот адрес мы создаем пользовательский URL, например:
yourappname://usrname#XXXYYYZZZ
где XXXYYYZZZZ является маркер аутентификации. Мы получаем этот токен с страницы возврата, где он хранится в виде файла cookie ACSID: мы использовали некоторый JSP, чтобы прочитать этот куки-файл и перенести его поверх пользовательского URL-адреса.
Затем мы регистрируем наши приложения для Android и iPhone для обработки URL-адресов yourappname://
, так что, когда пользователь cliskc этой ссылки, наше приложение вызывается и ссылка передается на него. Мы извлекаем имя пользователя и токен из этой ссылки, и мы используем его в запросах REST для бэкэнда GAE.
Если у вас есть еще вопросы, я бы с радостью обновил это сообщение.
Update:
Куки сеанса пользователя по производству AppEngine назван ACSID
, в то время как на развитие AppEngine сервера он называется dev_appserver_login
.
+1 - очень подробно! Что показывает текст пользовательского URL? «Нажмите, чтобы вернуться в приложение»? Или что-то типа того? –
Он может показывать все, что вам нравится. Я использовал ссылку «Продолжить ..», которая выглядит как кнопка. С помощью некоторого javascript вы можете запустить приложение автоматически, не требуя от пользователя щелчка по ссылке - не пробовал это, его нужно было бы протестировать. –