Могу ли я использовать Android AccountManager для получения токена доступа OAuth для AppEngine?
У меня есть клиент Android для моего сервера AppEngine, используя оба аккаунта Google. Я хотел бы использовать AccountManager для получения доступа к Token для OAuth. Пока я использую ClientLogin, но я хотел бы переключиться на OAuth.
Настройка OAuth на AppEngine проста - я следил за в этой статье. Но клиентская сторона - загадка, в частности я не знаю, что использовать для области, в терминах AccountManager authTokenType. Для ClientLogin я использую "ah" для authTokenType. Но как насчет OAuth?
Ответы
Ответ 1
На сегодняшний день вы можете использовать API сервисов Google Play для Android для аутентификации Oauth 2.0 на Android. Затем вы можете использовать метод, описанный @nivco, чтобы получить userinfo для appengine. Я еще этого не делал, но я планирую сделать то, о чем вы говорите.
https://developers.google.com/android/google-play-services/authentication
Ответ 2
Я не уверен, что вы пытаетесь сделать это через App Engine OAuthService, который используется в статье, о которой вы говорите. Также утверждается, что AppEngine OAuthService поддерживает только OAuth 1, но Android поддерживает только OAuth 2:), поэтому вы ввернуты.
Если вы хотите сделать перекрестный Android-аутентификатор App Engine, я бы сделал следующее:
- В Android: получить токен доступа для API UserInfo (scope =
https://www.googleapis.com/auth/userinfo.email
и https://www.googleapis.com/auth/userinfo.profile
) из AccountManager.
- Передайте токен доступа в App Engine в параметре URL запроса, который вы делаете с Android на AppEngine (убедитесь, что используете HTTPS, чтобы избежать перехвата!).
- На стороне App Engine: используйте токен доступа, чтобы прочитать идентификатор пользователя, используя UserInfo API. Это в основном используется OpenID Connect!
- Затем вы можете использовать информацию, полученную вами из API UserInfo для аутентификации пользователя. Идентификатор электронной почты и идентификатор пользователя, который вы получите из API UserInfo, эквивалентны идентификатору электронной почты и идентификатора пользователя, который вы получите из AppEngine UserService = > , которому вы можете доверять!
PS: Я описал получение токенов OAuth 2 с помощью AccountManager Android в в этой статье. Это было написано до мороженого сэндвич, но я прыгаю, это все еще действует. В основном authTokenType
должен быть oauth2:{scopes}
, поэтому, например, oauth2:https://www.googleapis.com/auth/tasks
для API задач. Могут быть некоторые более эффективные способы сделать это сейчас.