Вход в Google Apps в Django
Я занимаюсь разработкой приложения 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)?
2 ответа
Согласно http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains, Google изменил способ обнаружения IdP, и пользовательская проверка XRDS немного изменилась, чтобы дать Пользователи Google Apps открывают в формате http://example.com/openid?id=108441225163454056756, не прося пользователей создавать свои собственные серверы openid. Для небольших компаний люди могут получить свой openid под своим доменом, используя всего лишь доменное имя, если они используют Google Apps.
Это может быть хорошим подходом, потому что люди могут использовать свою учетную запись Google Apps для аутентификации, и они все равно могут выдавать openids под своим собственным доменом, для которого они могут изменить сервер аутентификации в будущем. Он прост и расширяем, но, к сожалению, он еще не стал стандартом. Итак, если вы используете стандартную библиотеку, такую как python-openid, вы столкнетесь с некоторыми проблемами.
Чтобы решить эти проблемы, вы должны сами установить python-openid, чтобы следовать подходу Google.
Я столкнулся с той же проблемой и раньше, и у меня есть исправленная версия python-openid v2.1.1, которая работает для меня.
Если вам нужно, я мог бы опубликовать свой код после некоторой очистки. Это был быстрый патч, так что не ждите слишком многого:)
Я думаю, что вы можете попробовать http://github.com/hudora/django-googleappsauth но я обнаружил некоторые ошибки, пытающиеся исправить их и перевести комментарии