Простая регистрация + вход в систему с использованием OAuth 2.0 - PullRequest
5 голосов
/ 03 мая 2011


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

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

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

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

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

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

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

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

Сценарий входа в систему:

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

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

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

Потому что мне нужно получить пользовательские данные мне кажется, что я должен использовать: OAuth или Hybrid (расширения 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 docs я нашел: Так какой же выбрать?
  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?Как я буду искать пользователя в базе данных?

Ответы [ 2 ]

0 голосов
/ 11 июля 2015

По моему мнению, OpenID и OAuth 2.0 - это две разные концепции.

  1. OpenID, как его название объясняется, в основном сфокусирован на управлении идентификацией.Таким образом, это больше похоже на структуру или протокол для управления идентификацией пользователя.

  2. OAuth 2.0 был разработан для предоставления протокола, который позволяет интернет-приложениям управлять авторизацией с некоторыми сторонними поставщиками авторизации.Я советую вам пройти спецификацию IEFT OAuth 2.0 , прежде чем испачкать руку.Вы также можете найти полезную информацию в этой статье Упрощенное объяснение OAuth2.0

Похоже, вы хотите, чтобы ваш собственный веб-сайт мог самостоятельно обрабатывать авторизацию пользователей, чтоозначает, что в области OAuth 2.0 ваш собственный веб-сайт является сервером авторизации.

К вам вопрос: 1. Объем предоставлен поставщиком авторизации, пожалуйста, обратитесь к их документации.

OAuth предоставляет только основу для авторизации вашего веб-приложения для доступа к защищенной информации владельца ресурса.Для примера Google конечный пользователь, который разрешает вашему приложению доступ к его / ее защищенной информации, все еще остается пользователем Google, если только ваше веб-приложение автоматически не создаст для него учетную запись пользователя в вашей собственной базе данных учетных записей пользователей.Вы имеете в виду регистрацию.OAuth ничего не касается регистрации, поскольку выходит за рамки авторизации.

В вашем сценарии у вас все еще есть собственная база данных учетных записей, и вы хотите, чтобы пользователи могли проходить аутентификацию с помощью имени пользователя и пароля.,OAuth 2.0 действительно может справиться с этим сценарием, если вы реализуете свой собственный AuthorizationServer и используете поток аутентификации «Учетные данные владельца ресурса».

Я не Python парень, но я могу сказать вам, прежде чем выоценивая эти библиотеки, вы должны понимать различные роли, определенные в спецификации OAuth 2.0.Некоторые из них играют роль сервера авторизации, некоторые играют роль сервера ресурсов.

0 голосов
/ 03 мая 2011

Почему бы просто не использовать библиотеку, которая выполняет всю тяжелую работу по интеграции с поставщиками open-id.

Вы можете использовать SocialAuth или любой другой пакет аутентификации с аналогичной функциональностью.

...