Аутентификация в Google Talk (XMPP, Smack) с помощью authToken

Приложение, которое я пишу, подключается к серверу XMPP, и, если пользователь выберет, я хочу дать ему возможность подключиться к своей учетной записи чата Google без необходимости вводить учетные данные...

Для этого я получу разрешение на использование учетной записи google, получу токен и аутентифицируюсь в google talk (сервер XMPP, используя Smack) с помощью токена.

Проблема в том.. как мне это сделать? Я имею в виду, как мне пройти аутентификацию на сервере GTalk, если я знаю логин и токен?

Есть идеи, инсайты? :)
Если нет, может быть, кто-нибудь знает, где я могу найти кого-то, кто знает? (Контакты Google, кто-нибудь? :P)


person Artiom Chilaru    schedule 01.06.2011    source источник


Ответы (1)


Вы ищете документацию по механизму X-GOOGLE-TOKEN SASL. Это должно быть началом. Использовать сервис = почта:

https://www.google.com/accounts/ClientLogin?
    accountType=GOOGLE&
    [email protected]&
    Passwd=YOURPASSWORD&
    service=mail

Который вернет 200 OK и три значения:

SID=<long string>
LSID=<long string>
Auth=<long string>

Разберите строку Auth, затем создайте строку в следующей форме:

jidAndToken ="\0" + UTF8([email protected]) + "\0" + Auth

(где "\0" означает один октет с нулевым значением). Используйте это в начальной аутентификации SASL:

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' 
      mechanism='X-GOOGLE-TOKEN'>Base64(jidAndToken)</auth>
person Joe Hildebrand    schedule 02.06.2011
comment
Учитывая, что я пишу код на Android, я думаю, что смогу получить токен авторизации с помощью Android SDK (иначе это не имеет смысла - для этого первого запроса нужен пропуск: P). Сегодня я проверю вторую часть, и если он работает так, как мне нужно - это будет идеально ^_^ - person Artiom Chilaru; 02.06.2011
comment
Это было совершенно точно! Именно то, что мне было нужно! Большое спасибо :) - person Artiom Chilaru; 03.06.2011
comment
Один вопрос: есть ли способ заставить его работать с служебным разговором, а не с почтой? Кажется, разговор был бы более уместным, но, похоже, он не позволяет мне войти в систему. - person Artiom Chilaru; 04.06.2011
comment
Это как раз то, что требует GoogleTalk. Думайте о почте как о непрозрачной строке, которая должна состоять только из четырех октетов 0x6d, 0x61, 0x69, 0x6c. - person Joe Hildebrand; 05.06.2011
comment
лол, черт возьми.. Тем не менее, это кажется странным, учитывая, что если я использую Talk, он на самом деле отображает Google Talk.. так что служба разрешена, но не разрешает разрешения =/ В любом случае, спасибо.. это работает, и я счастлив ) - person Artiom Chilaru; 06.06.2011
comment
@artiom-chilaru Я тоже пытаюсь использовать это, но я кое-чего не понимаю: вам все еще нужно запрашивать имя пользователя и пароль при правильном получении токена? это не совсем Oauth 2.0, не так ли? есть ли способ войти в чат, используя токен oauth и секретный токен? Благодарность - person Guillaume; 12.09.2011
comment
Я не думаю, что Google каким-либо образом утверждает, что это OAuth. - person Joe Hildebrand; 13.09.2011
comment
@Guillaume Нет-нет, вам не нужно запрашивать у пользователя пароль в приложении для Android. Вы должны использовать AccountManager, чтобы получить токен (тот же токен, который вы получили бы из запроса GET в ответе Джо), и вы используете его для создания значения jidAndToken, которое вы передадите механизму SASL. Напишите мне, если вам нужна дополнительная информация :) - person Artiom Chilaru; 14.09.2011
comment
@artiom-chilaru не так просто найти вашу электронную почту где угодно! Я действительно думал, что вы используете Oauth, но это всего лишь старый клиент Auth или что-то еще от Google, а это не то, что я ищу. Facebook хорошо работает с Oauth, но не смог найти никого, кто использовал бы Oauth с Google Talk. Не могли бы вы показать мне, как вы подключаетесь к этому jidAndToken и шлепаетесь? мой адрес электронной почты [email protected]. Спасибо - person Guillaume; 14.09.2011