Google Federated OAuth / OpenID с Tornado: почему он игнорирует мои области видимости? - PullRequest
0 голосов
/ 21 марта 2011

Я пытаюсь использовать библиотеку Tornado для федеративного входа в систему для аутентификации пользователей и получения доступа к их календарю, контактам и почте.Тем не менее, когда я получаю сообщение «mydomain.dyndns.info запрашивает некоторую информацию из вашей учетной записи Google», единственная точка в списке - «Адрес электронной почты».Впоследствии, когда я проверяю возвращенный пользовательский объект после того, как одобряю запрос, у пользовательского объекта нет свойства access_token.

Вот код:

def get(self):
    scope_list = ['https://mail.google.com/','http://www.google.com/m8/feeds/','http://www.google.com/calendar/feeds/']
    ...
    self.authorize_redirect(scope_list, callback_uri=self._switch_command('auth_callback'), ax_attrs=["name","email"])
def _on_auth(self, user):
    print 'in on auth'
    if user:
        self.set_the_user(user['email'])
        session.set_data('usertoken_' + user['email'], user['access_token'])
    self.redirect('/')

URI, который это выплевывает:

https://www.google.com/accounts/o8/ud
?openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0
&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select
&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select
&openid.return_to=http%3A%2F%2Fmydomain.dyndns.info%3A333%2Fauth%2Fauth_callback%3Fperms%3Dgmail%26perms%3Dcontacts%26perms%3Dcalendar
&openid.realm=http%3A%2F%2Fmydomain.dyndns.info%3A333%2F
&openid.mode=checkid_setup
&openid.ns.oauth=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Foauth%2F1.0
&openid.oauth.consumer=mydomain.dyndns.info
&openid.oauth.scope=https%3A%2F%2Fmail.google.com%2F+http%3A%2F%2Fwww.google.com%2Fm8%2Ffeeds%2F+http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2F
&openid.ns.ax=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0
&openid.ax.type.fullname=http%3A%2F%2Faxschema.org%2FnamePerson
&openid.ax.type.lastname=http%3A%2F%2Faxschema.org%2FnamePerson%2Flast
&openid.ax.type.firstname=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffirst
&openid.ax.mode=fetch_request
&openid.ax.type.email=http%3A%2F%2Faxschema.org%2Fcontact%2Femail
&openid.ax.required=firstname%2Cfullname%2Clastname%2Cemail

Идеи: 1. возможно, это как-то связано с тем, что ябегу на местной машине за форвардером dyndns?2. Документация Торнадо гласит: «Нет необходимости регистрировать приложение, чтобы использовать Google для аутентификации или для доступа к ресурсам Google от имени пользователя» - но, может быть, это больше не так?

Если у кого-то возникнут мысли, я быдействительно ценю это - это сводит меня с ума!

1 Ответ

0 голосов
/ 21 марта 2011

Разобрался.Вы должны установить свойства приложения google_consumer_key и google_consumer_secret.

application = tornado.web.Application(urlhandlers, cookie_secret=cookie_secret, google_consumer_key=google_consumer_key, google_consumer_secret=google_consumer_secret)

Вы получите их, зайдя сюда: https://www.google.com/accounts/ManageDomains

...