2009-10-09 7 views
8

Ich versuche, die Google Federated-Anmeldung mit einem führenden App-Konto zu integrieren, aber ich habe einige Probleme.Google Federated Login (OpenID + Oauth) für gehostete Anwendungen - Endpunkte ändern?

Wenn ich die Anfrage an: https://www.google.com/accounts/o8/ud mit allen Parametern sende (siehe unten), bekomme ich sowohl eine request_token und Liste der Attribute von gefragt. Dies ist perfekt, da wir die E-Mail über das Attribut exchange (AX) benötigen, um den Benutzer in unserer Anwendungsdatenbank zu speichern, und wir benötigen das Anforderungs-Token für zukünftige API requests to scopes (dh Kalender, Kontakte usw.).

jedoch, dass URL (hier als endpoint bezeichnet) nicht hält die signierten Benutzer in ihre gehosteten Anwendungen (gmail, Kalender, et al), was ein Problem ist.

Durch Ändern des Endpunkts auf https://www.google.com/a/thedomain.com/o8/ud?be=o8 wird alles geändert. Ich bin automatisch bei anderen Google Apps (Google Mail usw.) angemeldet. Unter Verwendung dieses Endpunkts erhalte ich jedoch nur die Anforderungstokens oder die Attribute über AX. Offensichtlich ist das nicht besonders Hybrid. Es ist sehr das eine oder das andere.

Beispiel Anforderung an den Endpunkt 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 zuvor erfolgreich durch die openid ursprüngliche Anforderung eingestellt ist)

Ich habe seit Tagen zu kämpfen versuchen, diesen Hybird Ansatz zum Laufen zu bringen, die Bekämpfung des am meisten undurchsichtige Fehlermeldungen (This page is invalid ... danke Google) und Mangel an konsistenter Dokumentation. Ich habe jedes Code-Sample durchsucht, das ich kann, um zu diesem Punkt zu gelangen. Jede Hilfe wäre willkommen ...

Antwort

7

Für die Aufzeichnung, die Nachwelt, und alle anderen, die davon getrennt sein könnten, werde ich die (lächerliche) Antwort dokumentieren.

Letztlich war das Problem Aufruf:

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

Können Sie es vor Ort? Ja, es war die explizite Aufnahme des Fragezeichens, die das Problem verursacht hat. Zwei Abfragezeichenfolgen sind niemals gleichzeitig vorhanden.

Verwandte Themen