Каков стандарт oAuth для запоминания пользователей?

Я и мои коллеги разрабатываем приложение (как веб-приложение, так и мобильное приложение (iPhone и Android)), которое включает процесс входа в систему. В настоящее время у нас есть собственный механизм входа в систему (где пользователи подписали учетную запись в нашем приложении и сохранили свою информацию в нашей базе данных). Мы рассматриваем возможность интеграции oAuth и предоставления пользователям возможности входа в систему через Facebook, Twitter, LinkedIn и Google.

Теперь, когда пользователи входят в систему с любым из них, насколько я понимаю, процесс входа в систему происходит вне нашего приложения и в основном получает только разрешение на доступ к своим ресурсам.

У меня такой вопрос: через oAuth как мы запоминаем пользователей? т. е. пользователи, которые входят в систему, имеют права чтения/записи и предпочтения. Как мы запоминаем их, если они на самом деле не регистрируются через наше приложение. Можем ли мы сохранить их адреса электронной почты в нашей таблице «Пользователи»??

Каковы наилучшие практики в таком сценарии?

Спасибо за любую информацию, которую вы можете предоставить.


person mustang888    schedule 22.06.2012    source источник


Ответы (1)


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

  1. У вас должна быть таблица пользователей для вашего сайта, которая полностью независима от того, какого провайдера OAuth они использовали для регистрации/входа. Это позволяет пользователям вашего сайта объединять несколько учетных записей под своим основным идентификатором на вашем сайте. (Например, свяжите с собой Facebook и Twitter.)
  2. Когда вы позволяете пользователю зарегистрироваться, вы должны получить от него адрес электронной почты. Независимо от того, просите ли вы Facebook об этом, или вам нужно спросить напрямую. Это позволяет вам позже «обновить» пользователей от зависимости исключительно от стороннего OAuth до установки их собственного пароля на вашем сайте. (Вы просто отправляете им ссылку на страницу сброса пароля, чтобы они начали создавать свой первый пароль.)
  3. Вы не хотите использовать адрес электронной почты в качестве первичного ключа. Я не уверен, что вы на самом деле описываете это или нет, но вы действительно хотите, чтобы у них был локальный идентификатор пользователя, который вы используете для поддержания их сеанса и т. д. Затем вы связываете их идентификатор Facebook или их идентификатор Twitter с этим локальным ID и используйте соответствие между такими идентификаторами, чтобы сопоставить, кого из пользователей вашего сайта считать авторизованными.
person sblom    schedule 22.06.2012
comment
Спасибо за ответ!! Несколько вопросов: Что касается пункта № 1, предназначен ли он для случаев, когда пользователи входят в систему с разными учетными записями OAuth (Facebook, Twitter, ...), но они по-прежнему связаны и рассматриваются как ОДНА фактическая учетная запись? -- Что касается пункта № 2, что вы имеете в виду под обновлением? Не могли бы вы пояснить этот вариант использования. -- Что касается пункта №3, генерируется ли локальный идентификатор пользователя системой/базой данных или он указывается конечным пользователем? - person mustang888; 25.06.2012
comment
Кроме того, как бы вы справились со следующим вариантом использования: пользователь X входит в систему через Facebook. Я сохраняю его идентификатор Facebook и связываю его с локальным идентификатором пользователя. В следующий раз пользователь X авторизуется через Twitter. Как мне определить, что это тот же человек (который ранее вошел в систему через Facebook), чтобы я мог получить его пользовательские настройки... на основе адреса электронной почты (который может быть общим для его учетных записей Facebook и Twitter, а может и не быть)?? Спасибо за помощь! - person mustang888; 25.06.2012
comment
Как это будет работать с Twitter, если они не предоставляют адрес электронной почты? Как можно узнать, является ли пользователь твиттера таким же, как пользователь фейсбука, без уникального идентификатора, такого как электронная почта? - person CMCDragonkai; 10.07.2013
comment
+1 за Вы просто отправляете им ссылку на страницу сброса пароля, чтобы они начали создавать свой первый пароль. - person foxybagga; 16.07.2013