Объединенный логин Google (OpenID + Oauth) для размещенных приложений - изменение конечных точек? - PullRequest
8 голосов
/ 09 октября 2009

Я пытаюсь интегрировать федеративный вход Google с учетной записью главного приложения, но у меня возникли некоторые проблемы.

Когда я отправляю запрос по адресу: https://www.google.com/accounts/o8/ud со всеми параметрами (см. Ниже), я получаю как request_token, так и список атрибутов, запрошенных Attribute Exchange. Это прекрасно, так как нам требуется электронная почта через атрибут exhange (AX) для хранения пользователя в нашей базе данных приложения, и нам нужен токен запроса на будущее API requests to scopes (т.е. календарь, контакты и т. Д.).

Однако использование этого URL (в данном документе именуемого endpoint) не позволяет пользователю войти в свои размещенные приложения (gmail, calendar, и др. ), что является проблемой.

Изменение конечной точки на https://www.google.com/a/thedomain.com/o8/ud?be=o8 меняет все. Я автоматически вошел в другие приложения Google (Gmail и т. Д.). Однако, используя эту конечную точку, я получаю только маркер запроса или атрибуты через AX. Очевидно это не особенно Гибрид. Его очень много, один или другой.

Пример запроса к конечной точке 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 ранее был успешно установлен начальным запросом openid)

Я несколько дней боролся за то, чтобы этот подход Hybird работал, боролся с самыми непрозрачными сообщениями об ошибках (This page is invalid ... спасибо Google) и отсутствием согласованной документации. Я просмотрел все примеры кода, которые смог, чтобы добраться до этой точки. Любая помощь будет оценена ...

1 Ответ

7 голосов
/ 30 октября 2009

Для записи, потомков и всех, кто мог бы прийти к такому выводу, я запишу (смешной) ответ.

В конце концов, проблема была в звонке:

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

Вы можете это заметить? Да, проблема заключалась в явном включении знака вопроса. Две строки запроса никогда не существуют одновременно.

...