Как после AccountManager..getAuthToken отправить этот токен своему провайдеру для аутентификации чего-либо?

Мы пишем приложение с представлением Android и веб-сайтом. Нашему приложению необходимо связать некоторые данные с Facebook, Google или Twitter (назовем их «FGT»), а затем нажать связанную службу, чтобы вернуть true, если эти данные аутентифицированы. поток управления - это...

  1. Android генерирует некоторые данные
  2. Пользователь выбирает учетную запись FG или T
  3. getAuthToken
  4. загрузить данные+токен через HTTPS POST на наш сайт
  5. Наш веб-сайт (в Django, не то чтобы это имеет значение) отправляет токен аутентификации в FGT.
  6. FGT возвращает true, если ему нравится этот токен, и false, если нет.

Цель состоит в том, чтобы не дать злоумышленнику состряпать данные и передать их на наш сайт с помощью curl. И нам / не нужно / загружать данные полностью в F, G или T. Нам не нужно проходить весь путь до гибридного приложения, где наш веб-сервис аутентифицирует себя до F, G или T. , а затем использует API F, G или T для публикации, отправки электронной почты или твита от имени пользователя.

Очевидно, где-то есть простой ответ на этот вопрос; надеюсь, всего три URI, по одному для F, G или T, в которые я могу вставить токен аутентификации. Вот почему я бы предпочел НЕ загружать и устанавливать SDK для каждого из Facebook, Google и Twitter, а затем писать тонны кода для конкретного сервиса для каждого случая. Это загромождает код и оставляет меня в тупике, когда клиент запрашивает Tumblr или MSN.

(Связанный с этим вопрос: какой второй параметр getAuthToken()? "а"? "почта"?)

Итак, пока я продолжаю читать книги, исходный код и сообщения SO, показывающие, как делать сложные вещи трудным путем, может ли кто-нибудь подсказать мне, как делать простые вещи простым способом?


person Phlip    schedule 13.10.2013    source источник


Ответы (2)


Поток "проверка authToken Android на стороннем сервере" ответил на запрос -вопрос "какой простой URI нажать для проверки токена?"

Магический uri для Google: https://accounts.google.com/o/oauth2/tokeninfo?access_token=%token_here%

Следующий вопрос: как выбить токен доступа из getAuthToken. Объем там должен быть минимально возможным, чтобы показать, что пользователь действительно живет здесь:

String SCOPE = "oauth2:https://www.googleapis.com/auth/userinfo.profile";
am.getAuthToken(a, SCOPE, false, this, null);

Мой класс this реализует AccountManagerCallback<Bundle> и предоставляет метод run(AccountManagerFuture<Bundle> result). Это согласно документации, такой как "Android AccountManagerFuture getResult дает IOEXcelption при попытке получить токен авторизации", может вызвать startActivity(), чтобы предложить пользователю авторизовать это действие, или может использовать токен, который уже хранится в AccountManager. (И обратите внимание, что реализация класса только для обратного вызова себя пагубна, особенно если целевой метод назван просто run(), так что делайте, как я говорю, а не как я, дети!)

Результирующий токен имеет длину 52 байта, начиная с 'ya29.', так что это _ вероятно _ access_token, а не 331 символ, который, вероятно, является id_token.

Результирующий токен не привязан к какому-либо конкретному каналу (где «канал» — это один уникальный набор клиента, сервера и области действия). Итак, из простого завитка я могу использовать этот /tokeninfo URI и получить эту (очищенную) мудрость JSONic:

{
  "issued_to" : "442575845966-mde4be7eingpb5pntfs839jipsetro6s.apps.googleusercontent.com",
  "audience" : "424242424242-mde4ab7defghi5jklmn839opqrstuv6s.apps.googleusercontent.com",
  "user_id" : "424242424242424242424",
  "scope" : "https://www.googleapis.com/auth/userinfo.profile",
  "expires_in" : 2272
}

И поэтому этот ответ стал бы для меня недостающим звеном между всей другой документацией, которую я пытался прочитать. И теперь мне нужно сделать все это снова для Facebook и Twitter...

person Phlip    schedule 15.10.2013

Есть простой URL. Каждый токен авторизации предоставляется для области действия. Каждая область позволяет маркеру авторизации выполнять определенные действия. Если вы попытаетесь сделать что-то, что разрешено областями действия, это действие завершится неудачно или успешно в зависимости от действительности токена авторизации.

Простейшая область запроса, вероятно, «электронная почта».

Если вы перейдете на игровую площадку Oauth2 по адресу https://developers.google.com/oauthplayground/, вы можете поэкспериментируйте с областями действия и вызовами, чтобы получить то, что вам подходит. Вы сможете увидеть URL-адреса, которые затем необходимо реплицировать в своем приложении.

person pinoyyid    schedule 14.10.2013