Estoy intentando completar un sistema de asignación de historias para el periódico de mi escuela en Google App Engine. Seguirá los plazos para los escritores, permitirá a los escritores recoger historias y ofrecerá una visión "a simple vista" de las historias de las semanas. Mi compañero y yo estamos tratando de integrarlo completamente en la instalación de Google Apps de nuestros periódicos. Ah, y tenemos que usar Oauth de 3 patas porque no tenemos Google Apps Premier.Oauth + Aeoid + Python + Google App Engine + Documentos de Google
En ese esfuerzo, me encontré con Aeoid y pude seguir las instrucciones para hacer que el inicio de sesión federado funcione. ¡Es muy genial!
Donde estoy teniendo problemas es usar Oauth para obtener una lista de los usuarios de documentos de google. Tengo una página de prueba configurada aquí: mustrun.cornellsun.com/test. Me está dando errores. Los he copiado en la parte inferior de este correo. No sé si esto tiene que ver con mi secreto de consumidor (¿debería utilizar la clave que obtengo del mercado de google? O ¿debería utilizar la clave que obtengo de la página de administración de dominios?). En este momento estoy usando la clave que obtuve de la página Administrar dominios
Esto también complica el hecho de que el dominio actual de la aplicación es mustrun2sun [] .appspot [demasiado nuevo no puede publicar más de un enlace] .com, pero Lo configuré en las aplicaciones de Google para que solo los usuarios de mi dominio puedan iniciar sesión y también para que la aplicación se implemente en mi dominio. (la aplicación se implementa como must[]run[].corn[]ellsun[].[]com
& todo se refiere a ella como tal, incluso en la administración de dominios.)
Estoy usando clases GDClient 2.0, así que estoy bastante seguro de que todo debería funcionar como lo planeé ... es decir, No estoy usando el viejo material de servicio ni nada. He usado htt[]p:/[]/k[]ing[]yo-bachi.blog[]spot.c[]om/2010/05/gaego[]ogleoauth.ht[]ml
como un poco de plantilla para mi "baile" de Oauth porque los ejemplos de Google están caducados. & usa la antigua biblioteca de datos de Google 1.0, creo.
El error que estoy recibiendo cuando voy a mi página de prueba es
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>
Además, dado que esto es difícil w/o cualquier código fuente, a continuación se muestra el código correspondiente:
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)))
He estado buscando en la web una respuesta & No he podido encontrar ninguna.
Aeoid (u otro lib openid) podrían ser necesarios para OAuth + OpenID combinado. – iamgopal
@iamgopal - ¿Has leído mi respuesta? – sje397