Все чаще в технических заданиях и на сайтах можно наблюдать возможность войти через ту или иную социальную сеть. Иногда целесообразнее использовать готовый сервис, чем создавать отдельно приложения для каждой социальной сети. Прекрасным, по моему скромному мнению, вариантом является сервис ulogin, он позволяет быстро интегрировать нужное количество социальных сетей, и пока нареканий в работе не вызывал. Но, как оказалось, не все так гладко.
По какому полю вы связываете человека пришедшего через социальную сеть с пользователем зарегистрированным у вас на сайте? Я думаю большинство с первой попытки ухватится за поле которое в 95% является уникальным — Email. uLogin позволяет получить email на который регистрировался аккаунт в социальной сети, и в большинстве случаев пользователь привязывает все аккаунты к одной почте (речь идет о посетителях handmade порталов, разного рода магазинчиков с несколькими тысячами товаров типа детское белье и т.д.). Более того, выделяя среди социальных сетей тройку лидеров приходится сталкиваться с: Вконтакте, Facebook, (Twitter/Google+). И вот тут начинается история.
Социальная сеть Вконтакте никогда не отдаст вам email пользователя, также его не вернет и uLogin. Хотя можно указать сбор email принудительно, в этом случае после авторизации через социальную сеть uLogin запросит email пользователя самостоятельно, для того чтобы потому бережно отдать вам JSON с данными которые вы хотели получить от него. Проблема тут состоит в том, что в это поле можно вбить любой валидный email. То есть СОВСЕМ ЛЮБОЙ.
Таким образом, если авторизация через социальную сеть происходит по сути по полю email, некоему Васе для того чтобы войти на сайт под аккаунтом Пети, достаточно авторизоваться через Вконтакте и указать его email, который может не являться тайной и допустим выводиться в профиле.
Защитой от этой логической дыры является схема в рамках которой регистрация возможна только через те социальные сети которые делятся с нами email'ом. Далее личном кабинете пользователю предлагается привязать аккаунт к социальной сети — авторизоваться через тот же uLogin тем самым привязать аккаунт пользователя не по email, а по полю identity, т.е. идентификатору конкретной социальной сети. Бонусом может служить как иконка с ссылкой на профиль в социальной сети, так и любые поощрения на сайте и как сверх бонус собственно сама возможность авторизации.
При наличии таких полей остается только контролировать уникальность этих данных в базе, чтобы попытки привязать один и тот же аккаунт к разным профилям на сайте пресекался на корню.
По какому полю вы связываете человека пришедшего через социальную сеть с пользователем зарегистрированным у вас на сайте? Я думаю большинство с первой попытки ухватится за поле которое в 95% является уникальным — Email. uLogin позволяет получить email на который регистрировался аккаунт в социальной сети, и в большинстве случаев пользователь привязывает все аккаунты к одной почте (речь идет о посетителях handmade порталов, разного рода магазинчиков с несколькими тысячами товаров типа детское белье и т.д.). Более того, выделяя среди социальных сетей тройку лидеров приходится сталкиваться с: Вконтакте, Facebook, (Twitter/Google+). И вот тут начинается история.
Социальная сеть Вконтакте никогда не отдаст вам email пользователя, также его не вернет и uLogin. Хотя можно указать сбор email принудительно, в этом случае после авторизации через социальную сеть uLogin запросит email пользователя самостоятельно, для того чтобы потому бережно отдать вам JSON с данными которые вы хотели получить от него. Проблема тут состоит в том, что в это поле можно вбить любой валидный email. То есть СОВСЕМ ЛЮБОЙ.
Таким образом, если авторизация через социальную сеть происходит по сути по полю email, некоему Васе для того чтобы войти на сайт под аккаунтом Пети, достаточно авторизоваться через Вконтакте и указать его email, который может не являться тайной и допустим выводиться в профиле.
Защитой от этой логической дыры является схема в рамках которой регистрация возможна только через те социальные сети которые делятся с нами email'ом. Далее личном кабинете пользователю предлагается привязать аккаунт к социальной сети — авторизоваться через тот же uLogin тем самым привязать аккаунт пользователя не по email, а по полю identity, т.е. идентификатору конкретной социальной сети. Бонусом может служить как иконка с ссылкой на профиль в социальной сети, так и любые поощрения на сайте и как сверх бонус собственно сама возможность авторизации.
При наличии таких полей остается только контролировать уникальность этих данных в базе, чтобы попытки привязать один и тот же аккаунт к разным профилям на сайте пресекался на корню.