2009-10-09 6 views
8

J'essaie d'intégrer Google Federated Login avec un compte d'applications de premier ordre, mais j'ai quelques problèmes.Connexion fédérée Google (OpenID + Oauth) pour les applications hébergées - modification des points de terminaison?

Lorsque j'envoie la demande à: https://www.google.com/accounts/o8/ud avec tous les paramètres (voir ci-dessous), je reviens à la fois une request_token et la liste des attributs demandés par Attribute Exchange. C'est parfait, car nous avons besoin de l'email via l'attribut exhange (AX) pour stocker l'utilisateur dans notre base de données d'application, et nous avons besoin du jeton de demande pour le futur API requests to scopes (ie: calendrier, contacts, etc.).

Cependant, en utilisant cette URL (ci-après appelée la endpoint) ne tient pas à l'utilisateur connecté à leurs applications hébergées (gmail, calendrier, et al), ce qui est un problème. La modification du point de terminaison en https://www.google.com/a/thedomain.com/o8/ud?be=o8 change tout. Je suis automatiquement connecté à d'autres applications google (gmail, etc.). Cependant, en utilisant ce point de terminaison, je reçois uniquement le jeton de demande ou les attributs via AX. Évidemment ce n'est pas particulièrement hybride. C'est vraiment l'un ou l'autre.

Exemple demande à l'extrémité 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 est préalablement réglée avec succès par la demande initiale Openid)

J'ai lutté pour les jours essayer d'obtenir cette approche Hybird de travail, la lutte contre la messages d'erreur les plus opaques (This page is invalid ... merci Google) et le manque de documentation cohérente. J'ai trawled chaque échantillon de code que je peux pour arriver à ce point. N'importe quelle aide serait appréciée ...

Répondre

7

Pour le compte rendu, la postérité, et n'importe qui d'autre qui pourrait se séparer de ceci, je documenterai la réponse (ridicule).

En fin de compte, le problème a été Vocation:

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

Pouvez-vous repérer? Oui, c'était l'inclusion explicite du point d'interrogation qui a causé le problème. Deux chaînes de requête n'existent jamais à la fois.

Questions connexes