1

Я запускаю webapp, который проверяет, вошел ли пользователь в систему с UserService, а затем показывает им свою домашнюю страницу, если они есть, или перенаправляет их на экран входа в систему, если нет. Как только на странице, я хотел бы иметь возможность обновлять определенные части, используя AJAX, когда они нажимают на определенные элементы. Теперь я уже написал API REST в одном проекте GAE с использованием Cloud Endpoints, который получает всю необходимую информацию, и поэтому в духе DRY я предпочитаю использовать свой собственный API, чем писать новые сервлеты для обработки этих запросов.UserService, OAuth и AJAX в App Engine

Проблема в том, что мне нужно сгенерировать токен OAuth для доступа к API. Я легко могу сделать это из клиентской библиотеки JavaScript API JavaScript, но тогда мой пользователь должен повторно аутентифицироваться для остального API, что не только плохо с точки зрения UX, но и более важно предоставляет мой идентификатор клиента в javascript страницы и передает токен через HTTP (не SSL).

Единственный вариант, который я вижу, это написать сервлет для каждого запроса и иметь дублирующую работу. Но концептуально, Я уже вошел в Google, поэтому я должен просто иметь доступ к API. Как обычно об этом идет речь? Я думаю, что все это неправильно?

ответ

2

UserService и OAuth - два разных механизма аутентификации (и авторизации), и вы не можете их комбинировать.

Если вам нужен OAuth для доступа к некоторым из API, а также используйте server side OAuth. Таким образом, вы можете получить доступ к API и заменить UserService всего за один раз.

+0

Я бы сказал, что конечные точки объединяют эти две службы: он использует OAuth для аутентификации пользователя google, в результате чего появляется экземпляр пользователя (такой же, как вы бы получили от UserService.getCurrentUser.) – Tom

+0

Он проводит различие между 'OAuthService' класса и 'UserService'. Который, хотя оба генерируют экземпляр 'User', не могут одновременно использоваться для аутентификации. Я на самом деле просто закончил создание чистого веб-клиента с помощью «Angular.js», который вызывает вызовы API и ничего больше. Таким образом, больше никакой аутентификации не требуется на стороне сервера, кроме одной, запеченной в «Cloud Endpoints». – willlma

Смежные вопросы