OAuth + Aeoid +Python + документы Google Google App Engine +

Я пытаюсь завершить систему присвоения истории для своей школьной газеты в Google App Engine. Это отследит крайние сроки для устройств записи, позволит устройствам записи забирать истории и давать "сразу" представление недельных историй. Мой партнер и я пытаемся полностью интегрировать его с нашей установкой газет Google Apps. О, и мы должны использовать 3 OAuth на ножках, потому что у нас нет Google Apps Premier.

В том усилии я наткнулся на Aeoid и смог следовать инструкциям, чтобы заставить объединенный в федерацию вход в систему работать. Это очень прохладно!

То, где я сталкиваюсь с проблемой, использует OAuth для получения списка пользователей документы Google. Мне настраивали тестовую страницу здесь: mustrun.cornellsun.com/test. Это дает мне ошибки - я скопировал их у основания этой почты. Я не знаю, имеет ли это отношение к моему потребительскому секрету (я должен использовать ключ, который я получаю от рынка Google? или я должен использовать ключ, который я получаю от управлять страницы доменов?). Прямо сейчас я использую ключ, который я получил от управлять страницы доменов

Также усложнение этого состоит в том, что фактический appspot домен является mustrun2sun [] .appspot [слишком новый, не может отправить больше чем одну ссылку] .com, но я настроил его в приложениях Google так, чтобы только пользователи от моего домена могли войти в систему и также так, чтобы приложение было развернуто на моем домене. (приложение развертывается как must[]run[].corn[]ellsun[].[]com И все относится к нему как таковой, даже в управлять вещи доменов.)

Я использую классы GDClient 2.0, таким образом, я абсолютно уверен, что все должно работать как запланировано..., т.е. я не использую старый сервисный материал или что-либо. Я использовал htt[]p:/[]/k[]ing[]yo-bachi.blog[]spot.c[]om/2010/05/gaego[]ogleoauth.ht[]ml как что-то вроде шаблона для моего OAuth "танцуют", потому что примеры Google устарели и используют старые данные Google 1,0 библиотеки - я думаю.

Ошибка, которую я получаю, когда я перехожу к своей тестовой странице,

Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 511, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/mustrun2sun/1.341947133742569880/main.py", line 170, in get
    feed = client.GetDocList(auth_token=gdata.gauth.AeLoad(users.get_current_user().user_id())) #auth_token=TOKEN
  File "/base/data/home/apps/mustrun2sun/1.341947133742569880/gdata/docs/client.py", line 141, in get_doclist
    auth_token=auth_token, **kwargs)
  File "/base/data/home/apps/mustrun2sun/1.341947133742569880/gdata/client.py", line 635, in get_feed
    **kwargs)
  File "/base/data/home/apps/mustrun2sun/1.341947133742569880/gdata/client.py", line 308, in request
    response, Unauthorized)
Unauthorized: Unauthorized - Server responded with: 401, <HTML>
<HEAD>
<TITLE>Token invalid - Invalid AuthSub token.</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Token invalid - Invalid AuthSub token.</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

Кроме того, так как это - твердый w/o, любой исходный код, ниже является соответствующими нормами:

import gdata.auth
import gdata.gauth
import gdata.docs.client
import gdata.docs.data
import gdata.docs.service
import gdata.alt.appengine

from aeoid import middleware, users

class GetOauthToken(webapp.RequestHandler):
    def get(self):
        user_id = users.get_current_user().user_id()
        saved_request_token = gdata.gauth.AeLoad("tmp_"+user_id)
        gdata.gauth.AeDelete ("tmp_" + user_id)
        request_token = gdata.gauth.AuthorizeRequestToken(saved_request_token, self.request.uri)
        #upgrade the token
        access_token = client.GetAccessToken(request_token)
        #save the upgraded token
        gdata.gauth.AeSave(access_token, user_id)
        self.redirect('/test')     

class Test(webapp.RequestHandler):
    def get(self):
        TOKEN = gdata.gauth.AeLoad(users.get_current_user().user_id())
        if TOKEN:
            client = gdata.docs.client.DocsClient(source=SETTINGS['APP_NAME'])
            client.auth_token = gdata.gauth.AeLoad(users.get_current_user().user_id()) #could try to put back as TOKEN?

            self.response.out.write('moo baby')
            client.ssl = True
            feed = client.GetDocList(auth_token=gdata.gauth.AeLoad(users.get_current_user().user_id())) #auth_token=TOKEN
            self.response.out.write(feed)
            self.response.out.write('moo boobob')
            self.response.headers['Content-Type'] = 'text/plain'
            for entry in feed.entry:
                self.response.out.writeln(entry.title.text)
        else:
            # Get unauthorized request token
            gdata.gauth.AeDelete(users.get_current_user().user_id())
            client = gdata.docs.client.DocsClient(source=SETTINGS['APP_NAME'])
            client.ssl = True # Force communication through HTTPS

            oauth_callback_url = ('http://%s/get_oauth_token' %
                                  self.request.host)

            request_token = client.GetOAuthToken(
                SETTINGS['SCOPES'], oauth_callback_url, SETTINGS['CONSUMER_KEY'],
                consumer_secret=SETTINGS['CONSUMER_SECRET'])
            gdata.gauth.AeSave(request_token, "tmp_"+users.get_current_user().user_id())
            # Authorize request token
            domain = None#'cornellsun.com'
            self.redirect(str(request_token.generate_authorization_url(google_apps_domain=domain)))

Я выглядел высоким и низким в сети для ответа, и я не смог найти тот.

5
задан Jason Plank 31 October 2011 в 12:21
поделиться

2 ответа

Я лично не работал с OAuth, но несколько вещей, которые я заметил, могут (или не могут) помочь:

  1. Ошибка 401 - это, скорее всего, ошибка HTTP 401, которая означает, что url был действительным, но требовал аутентификации. Это, очевидно, объясняется неудачной попыткой OAuth, но это также может быть важно для перенаправления пользователей, которые не вошли в систему, на другую страницу.

  2. Ошибка возникает при назначении переменной feed. Должен ли параметр auth_token быть просто именем пользователя?

3.Вы используете строку.

gdata.gauth.AeLoad(users.get_current_user().user_id())

часто. Даже если это и не связано с вашими проблемами с аутентификацией, вам, вероятно, будет лучше сделать этот запрос один раз и сохранить его в переменной. Затем, когда он снова понадобится, получить доступ к нему таким образом. Это улучшит скорость работы вашего приложения.

Еще раз прошу прощения, что у меня нет конкретного опыта работы с OAuth. Я просто попытался просканировать и найти некоторые вещи, которые могут натолкнуть вас на правильный путь.

0
ответ дан 15 December 2019 в 00:53
поделиться

У меня есть работающее приложение App Engine на Python, которое использует OpenID и OAuth для получения ваших контактов Google:

http://github.com/sje397/Chess

Оно работает по адресу:

http: //your-move.appspot.com

Обратите внимание, что Aeoid больше не нужен, так как App Engine имеет встроенную поддержку OpenID .

3
ответ дан 15 December 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: