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