Простая регистрация + вход с использованием OAuth 2.0


Я немного сбит с толку насчет OpenID OAuth. (по OAuth - я имею в виду OAuth 2.0 здесь и позже)

Моя цель - создать сайт с аутентификацией OpenID (или OAuth), а также с устаревшей электронная почта + пароль аутентификации. Сайт будет на платформе django. (питон) Я понимаю разницу между OAuth и OpenID и разницу между авторизацией и аутентификацией.
Моя основная цель - реализовать вход openid с Google в качестве поставщика удостоверений.

Процесс входа и регистрации должен быть таким же, как на многих сайтах. Как я вижу:

сценарий регистрации:

1) пользователь вводит URL-адрес openid (нажимает кнопку Google)

2) пользователь перенаправляется к провайдеру аутентификации (Google) страница говорит: "Отличный сайт" попросите у вас: электронная почта, язык, страна ...

3) пользователь говорит "да" ... получает перенаправление обратно за кадром "Шикарный сайт" пытается повторить язык электронной почты и другую информацию о пользователе с использованием токена доступа

4) Пользователь заполняет другие данные, необходимые в профиле .. и это все .. он теперь зарегистрирован.

Сценарий входа:

1) пользователь вводит URL-адрес openid (нажимает кнопку Google)

1.a) если пользователь уже вошел в систему на провайдере аутентификации хм ... мне непонятно .. но как-то пользователь войти в систему без отображения страницы поставщика (может быть, она быстро закрывается?)

1.b) если пользователь не вошел в систему поставщика затем провайдер отображает страницу входа и перенаправляет обратно на отличный сайт в случае успеха.

Потому что мне нужно получить некоторые пользовательские данные мне кажется, что я должен использовать: OAuth или гибридный (расширения OpenID + OAuth) протокол.

То, что мне непонятно:

  1. Как мне получить объем информации, которая мне нужна .. я искал, но не могу найти .. нашел в чьем-то блоге https://www.googleapis.com/auth/userinfo#email для электронной почты а как насчет языка пользователя, страны ... и т.д .. где это задокументировано?
  2. Если я буду использовать OAuth - хватит ли делать и то, и другое - регистрацию и логин или мне нужно будет получить данные пользователя через OAuth и войти с OpenID?
  3. Можно ли использовать OAuth 2.0 в моем сценарии? или будет проще использовать 1.0, потому что мне не нужно пользовательских данных больше нет после первоначальной регистрации аккаунта? (я думаю, 1.0 более сложный, потому что он имеет 3 фазы .. но 2.0 более сложен, потому что токен доступа истекает .. но истечение срока не будет проблемой в моем сценарии, так как мне не нужны пользовательские данные после регистрации)
  4. Есть несколько библиотек: при чтении документов google api я обнаружил:
    • Google-api-python-клиент
    • openid-python-openid
    • gdata-python-клиент (предполагается, что это api для служб Google, не знаю, есть ли в нем oauth хм .. согласно этому http://code.google.com/intl/ru/apis/gdata/docs/auth/oauth.html в нем есть oauth )
    • python-oauth-client (http://code.google.com/p/python-oauth-client/)
    • Я хоть и много, но потом обнаружил: http://your-move.appspot.com (исходные файлы: https://github.com/sje397/Chess) который, похоже, использует google.app.engine lib из google.appengine.api импортировать пользователей
    Так что выбрать?
  5. До сих пор я пришел к выводу, что простейшей реализацией будет: Нравится: http://code.google.com/p/google-api-python-client/source/browse/samples/oauth2/django_sample/buzz/views.py Но строки 38-44: в моем случае будут извлекать язык электронной почты пользователя и другие вещи (а также я буду использовать другую область видимости .. строка 29) для нового зарегистрированного пользователя .. или, если это зарегистрированный пользователь, просто проигнорируйте учетные данные и удалите их. (продолжить сеанс сайта) Я ошибаюсь ? Я видел так много реализаций в упомянутых выше библиотеках, что сомневаюсь, что я прав.
  6. И еще вопрос: моя резервная устаревшая аутентификация будет использовать электронную почту как логин .. Если поставщиком удостоверений является поставщик услуг электронной почты (Google) .. Когда пользователь пытается войти в систему, я могу получить электронную почту от провайдера ... и выполнить поиск электронная почта получена от провайдера в базе данных .. так что я могу найти пользователя. Что делать, если поставщик удостоверений не является поставщиком электронной почты: нравится facebook? Как я буду искать пользователя в базе данных?
6
задан Turnaev Evgeny 3 May 2011 в 14:11
поделиться