Можно ли использовать конечные точки Google Cloud, встроенные в аутентификацию, с Google+ Domains API?

Конечные точки Google Cloud имеют собственный процесс аутентификации, в котором методу конечной точки серверной части просто передается объект com.google.appengine.api.users.User.

https://cloud.google.com/appengine/docs/java/endpoints/auth

API доменов Google+ определяет собственный процесс аутентификации для получения объекта com.google.api.client.auth.oauth2.Credential. Это позволяет построить объект com.google.api.services.plusDomains.PlusDomain.

https://developers.google.com/+/domains/authentication/

Как бы вы интегрировали эти два процесса аутентификации? Это для веб-приложения (Java Script) с серверной частью Google App Engine (Java).

В идеальной ситуации я хотел бы иметь возможность получать основную информацию о био/профиле пользователей через мое JS-приложение, когда пользователь находится в автономном режиме.

Пример использования. У меня есть цепочка комментариев, в которой автор каждого комментария сохраняется в хранилище данных Google как объект com.google.appengine.api.users.User. Однако, когда я отображаю поток комментариев в своем веб-приложении JS, я хотел бы показать изображение профиля для каждого автора. Если бы я мог сделать вызов из веб-приложения, чтобы получить биографию каждого комментатора, я бы сэкономил серверной части много работы. Веб-приложение будет иметь пользовательский объект как JSON. Что включает в себя идентификатор пользователя и адрес электронной почты.


comment
Можете ли вы добавить некоторые детали вашего варианта использования? Обычно вы передаете объект пользователя в конечную точку, а затем, когда пользователь идентифицирован, в конечной точке используется учетная запись службы, действующая от имени этого пользователя.   -  person Nikita Uchaev    schedule 10.06.2015
comment
@NikitaUchaev У меня настроена стандартная аутентификация конечных точек. Передача объекта пользователя, как вы сказали. Хотите получить биографию пользователя. Что значит сервисный аккаунт, действующий от имени этого пользователя? Можете ли вы связать код или документацию?   -  person Marc M.    schedule 10.06.2015
comment
@NikitaUchaev Я понимаю, что вы имеете в виду, говоря о неясности вопроса. Я обновил вопрос. Надеюсь, это поможет.   -  person Marc M.    schedule 10.06.2015
comment
Рассматривали ли вы возможность использования пользовательского аутентификатора?   -  person jirungaray    schedule 11.06.2015


Ответы (1)


Итак, ваш вариант использования:

  • ваши пользователи аутентифицируются в вашем приложении, предоставляя базовую область userinfo.profile, необходимую для правильного получения объекта com.google.appengine.api.users.User в вашем API конечных точек.
  • вы сохраняете эти объекты User в БД, и когда вы извлекаете их для отображения цепочки, в которой они прокомментировали, вы хотите сделать вызов API google+ метод people.get для получения URL-адреса изображения аватара

Решение: если вашим пользователям был представлен поток oauth, который заставлял их предоставлять область, необходимая для вызова API google+ (область profile) в дополнение к обычной области конечных точек "userinfo.profile", не должно возникнуть проблем с вызовом API Google+ либо из клиент JS или из Java с помощью клиентских библиотек Google API после прохождения этого потока для получения учетных данных.

Во избежание их повторной аутентификации каждый раз следует сериализовать и сохранить объект учетных данных из языка в вопросе, или вы могли бы даже просто отслеживать токен обновления для их предоставления и пройти низкоуровневый танец OAuth, чтобы получить новый токен доступа (вы, вероятно, захотите сделать первый, поскольку он это для тебя).

Как отмечено в другом месте в Интернете (в несколько других мест), идентификатор пользователя из объекта User не совпадает с идентификатором профиля Google+, поэтому имейте это в виду при работе с параметром метода конечных точек User Objects. Поэтому вы не сможете использовать идентификатор пользователя из объекта User для вызова people.get.

Вместо этого вы должны сохранить идентификатор профиля Google+ пользователя на момент его первого входа в систему. или, по крайней мере, пройти через поток oauth, который предоставил необходимую область действия Google+, вместе с объектом User, который вы уже использовали. Вам придется использовать (де)сериализованные объекты учетных данных или токены обновления/доступа для вызова API Google+ после получения идентификатора профиля Google+ из модели данных каждого пользователя в вашем хранилище (какое бы решение вы ни использовали, от Datastore до SQL, и т.д.)

person Nick    schedule 11.06.2015
comment
Благодарим вас за упоминание о том, что идентификатор профиля Google+ не совпадает с идентификатором учетной записи пользователя Google. - person Marc M.; 16.06.2015