2010-08-28 20 views
14

¿Es posible obtener SSO con el OpenId incorporado en App Engine? He intentado integrar una aplicación de Marketplace y lograr que el usuario inicie sesión cuando proviene de Google Apps (el panel de administración o la navegación universal). Fallé miserablemente, entonces ahora encontré esto:Inicio de sesión único con Google Apps + App Engine

"La única excepción a esto son las aplicaciones que hacen OpenID/OAuth híbrido: la lista blanca no funciona actualmente con este enfoque." (desde here)

Supongo que tengo que implementar OpenId usando una biblioteca en lugar de usar la función incorporada para lograr SSO con Google Apps en mi aplicación. O si es posible con OpenId incorporado, ¿hay algún ejemplo que muestre cómo hacerlo?

+0

No dice específicamente si confirmó que la aplicación del mercado que está integrando hace híbridos OpenID/OAuth o qué aplicación de mercado es. –

Respuesta

6

Más tarde Google publicó un artículo acerca de cómo hacerlo en Python:

http://code.google.com/googleapps/marketplace/tutorial_python_gae.html

El resumen es:

  • Debe lista blanca de su "entorno OpenID" (la aplicación dominio) en el XML de manifiesto de Marketplace.
  • El punto de entrada utilizado para la navegación universal de Google debe contener el dominio actual de Google Apps.
  • El punto de entrada en su aplicación redirige al usuario que pasa el dominio de Google Apps como federated_identity.

Por ejemplo:

from google.appengine.api import users 

# [...] 

login_url = users.create_login_url(dest_url='http://my-app.appspot.com/', 
            _auth_domain=None, 
            federated_identity=google_apps_domain_name) 
self.redirect(login_url) 
1

Err, no tengo toda la información sobre esta característica, pero sí uso tanto JanRain Engage (que usa Stackoverflow) con las aplicaciones GAE. Creo que openid4java también podría hacer el trabajo.

1

¿Ya sabe this link?

UserService userService = UserServiceFactory.getUserService(); 

if (userService.isUserLoggedIn()) { 
    User user = userService.getCurrentUser(); 
    /* ...Do something with user.getFederatedIdentity(), which is the OpenID URL. */ 
} 
2

Esto funcionó para mí en Java:

Set<String> attributesRequest = new HashSet<String>(); 
String loginRealm = "http://myapp.appspot.com"; //Important that it is exactly the same as in application-manifest.xml, watch out for trailing slashes. 
String destinationURL = req.getRequestURI() + "?" + req.getQueryString(); 
String federatedIdentity = null; 
String authDomain = req.getParameter("hd"); //hd is the default parameter name. Contains the google apps domain name of the user logging on. example.com for example. 
String loginUrl = userService.createLoginURL(destinationURL, federatedIdentity, authDomain, attributesRequest);  

Asegúrese de incluir

<Edition id="free"> 
    <Name>Cloud App Studio</Name> 
    <Extension ref="navLink" /> 
    <Extension ref="realm" /> 
</Edition> 

en la solicitud manifest.xml. Es decir, si es gratis. La parte importante es incluir la referencia al reino.

+1

Gracias Paul, ¡esto funciona genial! Nota para los demás: colóquelo en el servlet que se asigna a/_ah/login_required como se menciona aquí: http://code.google.com/appengine/articles/openid.html – Stefan

Cuestiones relacionadas