2009-10-09 20 views
8

Estoy tratando de integrar el inicio de sesión de Google Federated con una cuenta de aplicaciones premier, pero estoy teniendo algunos problemas.Google Inicio de sesión federado (OpenID + Oauth) para aplicaciones alojadas: ¿cambiar los puntos finales?

Cuando envío la solicitud a: https://www.google.com/accounts/o8/ud con todos los parámetros (ver a continuación), obtengo un request_token y una lista de los atributos solicitados por Attribute Exchange. Esto es perfecto, ya que necesitamos el correo electrónico a través del intercambio de atributos (AX) para almacenar al usuario en nuestra base de datos de aplicaciones, y necesitamos el token de solicitud para el futuro API requests to scopes (es decir, calendario, contactos, etc.).

Sin embargo, utilizando esa URL (en adelante denominado como el endpoint) no guarda el usuario sesión en sus aplicaciones alojadas (Gmail, Calendar, et al), que es un problema.

Cambiar el punto final a https://www.google.com/a/thedomain.com/o8/ud?be=o8 cambia todo. Estoy conectado automágicamente a otras aplicaciones de Google (gmail, etc.). Sin embargo, utilizando ese punto final, solo obtengo el token de solicitud o los atributos a través de AX. Obviamente, eso no es particularmente híbrido. Es muy uno o el otro.

Ejemplo solicitud al punto final https://www.google.com/accounts/o8/ud

parameters = { 
    'openid.ns': 'http://specs.openid.net/auth/2.0', 
    'openid.claimed_id': 'http://specs.openid.net/auth/2.0/identifier_select', 
    'openid.identity': 'http://specs.openid.net/auth/2.0/identifier_select', 
    'openid.return_to':'http://our.domain.com/accounts/callback/', 
    'openid.realm': 'http://our.domain.com/', 
    'openid.assoc_handle': assoc_handle, 
    'openid.mode': 'checkid_setup', 

    'openid.ns.ext2': 'http://specs.openid.net/extensions/oauth/1.0', 
    'openid.ext2.consumer': 'our.domain.com', 
    'openid.ext2.scope': 'https://mail.google.com/mail/feed/atom', 

    'openid.ns.ax':'http://openid.net/srv/ax/1.0', 
    'openid.ax.mode':'fetch_request', 
    'openid.ax.required':'firstname,lastname,email', 
    'openid.ax.type.firstname':'http://axschema.org/namePerson/first', 
    'openid.ax.type.lastname':'http://axschema.org/namePerson/last', 
    'openid.ax.type.email':'http://axschema.org/contact/email',  
} 
return HttpResponseRedirect(end_point + '?' + urllib.urlencode(parameters)) 

(assoc_handle se establece previamente con éxito por la solicitud inicial openid)

He estado luchando durante días tratando de conseguir este enfoque Hybird de trabajo, la lucha contra la la mayoría de los mensajes de error opacos (This page is invalid ... gracias Google) y la falta de documentación consistente. Arrastré cada muestra de código que pude para llegar a este punto. Cualquier ayuda sería apreciada ...

Respuesta

7

Para el registro, la posteridad y cualquier otra persona que pueda separarse de esto, documentaré la (ridícula) respuesta.

En última instancia, el problema estaba llamando:

return HttpResponseRedirect(
    'https://www.google.com/a/thedomain.com/o8/ud?be=o8' 
    + '?' 
    + urllib.urlencode(parameters) 
) 

Se puede detectarlo? Sí, fue la inclusión explícita del signo de interrogación lo que causó el problema. Dos cadenas de consulta nunca existen a la vez.

Cuestiones relacionadas