Вход в Google Apps в Django - PullRequest
       16

Вход в Google Apps в Django

10 голосов
/ 22 февраля 2010

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

Для этого я скачал и начал использовать django_openid_auth (и, следовательно, python-openid).

Сначала, чтобы проверить это, я использовал этот URL в своих настройках:

OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/id'

И с этим мне удалось перенаправить пользователя на страницу учетных записей Google, чтобы войти в систему, а затем вернуться в свой собственный домен, с помощью цикла аутентификации , описанного людьми из Google, успешно завершенного. Однако вход в учетные записи Google для меня бесполезен, поскольку я хотел бы, чтобы пользователи, имеющие учетную запись приложений Google в размещенном домене, но не учетную запись Google, могли войти в систему. Для этого я прочитал статью Google об обнаружении «Обнаружение оконечных точек OpenID для размещенных доменов» и изменил вышеупомянутую настройку на:

OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/site-xrds?hd=<my-domain>.com'

- где, очевидно, <my-domain> - это мой фактический домен;)

Но сервер ответил следующим сообщением:

Сбой аутентификации OpenID: HTTP Статус ответа от идентификационного URL хоста не 200. Получил статус 404

Немного отладив, мне удалось выяснить, что код в python-openid (версия 2.2.4) - это тот, который неправильно интерпретирует ответ от Google, но я в полном недоумении.

Я видел, как аутентификация в моем собственном домене работала в socialwok.com и puffypoodles.com. Поэтому я совершенно уверен, что цикл аутентификации для моего домена приложений Google работает, но почему-то python-openid не может его завершить. (хотя, повторюсь, он отлично работает с простыми старыми аккаунтами Google).

Должен ли я попытаться исправить python-openid или есть другой способ исправить это? Кому-нибудь удалось войти в систему с помощью приложений Google в чистом приложении django (, а не в google app engine )?

Ответы [ 2 ]

8 голосов
/ 04 апреля 2010

Согласно http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains, Google немного изменил способ IdP Discovery и пользовательскую проверку XRDS, чтобы предоставить пользователям Google Apps openid в формате http://example.com/openid?id=108441225163454056756, не прося пользователей создавать свои собственные openid сервера. Для небольших компаний люди могут получить свой openid под своим доменом, используя всего лишь доменное имя, если они используют Google Apps.

Это может быть хорошим подходом, поскольку люди могут использовать свою учетную запись Google Apps для аутентификации, и они все равно могут выдавать openids в своем собственном домене, для которого они могут изменить сервер аутентификации в будущем. Он прост и расширяем, но, к сожалению, он еще не стал стандартом. Поэтому, если вы используете стандартную библиотеку, такую ​​как python-openid, вы столкнетесь с некоторыми проблемами.

Чтобы решить эти проблемы, вам нужно самостоятельно установить python-openid, чтобы следовать подходу Google.

Я сталкивался с той же проблемой раньше, и у меня есть исправленная версия python-openid v2.1.1, которая работает для меня.

Если вам нужно, я могу опубликовать свой код после некоторой очистки. Это был быстрый патч, так что не ждите слишком многого:)

1 голос
/ 09 декабря 2011

Я думаю, вы можете попробовать http://github.com/hudora/django-googleappsauth но я нашел некоторые ошибки , пытаясь их исправить и переводя комментарии

...