2011-05-01 9 views
7

Estoy utilizando un proxy inverso para habilitar ssl en un dominio personalizado. El proxy funciona bien en las páginas públicas, sin embargo, cuando el usuario intenta acceder a un directorio de login_required, la URL de inicio de sesión las cambia a mi dominio de appspot después del inicio de sesión.Google App Engine: Reverse Proxy + OpenID, los usuarios se redirigen a dominio de appspot después de iniciar sesión

¿Hay alguna manera de mantener a los usuarios en el dominio personalizado?

Aquí es mi manejador de entrada:

class OpenIDLoginHandler(webapp.RequestHandler): 
    def get(self): 
     domain = self.request.get('domain') 
     continue_url = self.request.GET.get('continue') 

     if not continue_url: 
      continue_url = 'https://my_domain/login_required_directory/'  

     if domain: 
      self.redirect(users.create_login_url(dest_url=continue_url, 
       _auth_domain=None,federated_identity=domain)) 
     else:    
      login_url = users.create_login_url(dest_url=continue_url, 
       federated_identity='https://www.google.com/accounts/o8/id')   
      self.redirect(login_url) 

application = webapp.WSGIApplication(
        [          
         ('/_ah/login_required', OpenIDLoginHandler)], 
        debug=True)  

def main(): 
    run_wsgi_app(application) 

if __name__ == "__main__": 
    main() 

He intentado sobrescribir la URL de destino de la llamada users.create_login_url - la función sigue devolviendo un login_url con el dominio appspot como el parámetro 'continuar', como esto:

"https: // appspot_domain/_ah/login_redir ClaimID = https: //www.google.com/accounts/o8/id & continúan = https: // appspot_domain"

intenté simplemente reescribiendo la vuelta login_url y re colocando el parámetro 'continuar' con mi dominio personalizado, pero esto dio como resultado un error 404.

¿Alguna idea?

¡Gracias de antemano!

+2

Puede establecer la URL continua en una página en el dominio de aplicaciones que emite un redireccionamiento final al dominio proxy. Sin embargo, es posible que tengas un problema con las cookies. Su cookie de autenticación siempre se establecerá en appspot.com; el cliente no pasará la cookie a su dominio proxy. –

+0

@Drew, lamentablemente tiene razón acerca de la cookie de autenticación. Cuando se utiliza el dominio proxy, la sesión del usuario no se reconoce, por lo que me temo que una redirección después del inicio de sesión daría lugar a un bucle de redirección infinito. Parece que podría solucionar este problema manejando los redireccionamientos de inicio de sesión directamente desde el servidor proxy, pero no puedo encontrar ninguna documentación sobre '/ _ah/login_redir' que me ayude a duplicar, o nunca entender completamente, su funcionalidad. –

Respuesta

1

No estoy seguro de que esta sea una opción para usted, pero la próxima versión del motor de la aplicación afirma tener soporte para ssl en dominios personalizados (http://code.google.com/appengine/business/). Si su aplicación no estará en producción por un tiempo, tal vez sería más fácil esperar hasta que oficialmente agreguen soporte. Parecen tener un ciclo de lanzamiento de ~ 3 meses (http://code.google.com/appengine/docs/revision_history.html)

+1

Esta es mi opción preferida y espero pacientemente el lanzamiento. Después de todo, ¿quién quiere lidiar con la complejidad adicional de administrar el proxy inverso, sin mencionar otro posible punto de falla? –

0

puede manejarlo usted mismo en app.yaml con un controlador comodín que redirige a todos solicitudes a ssl. Si no desea manejar todas las solicitudes de esa manera, puede usar regex para restringir el comodín.

app.yaml:

application: yourthing 
version: 1 
runtime: python 
api_version: 1 

handlers: 

- url: .* 
    script: redirect_to_ssl.py 

Esto también se limpian todos los pedidos no HTTPS que puedan surgir en el de los usuarios que escriba la dirección URL.

Cuestiones relacionadas