Часто на сайтах вам могут предложить войти с помощью Google, Facebook или ВКонтакте. Если у вас есть аккаунт в одном из этих сервисов, вам не нужно будет регистрироваться с нуля: заполнять имя, почту и ставить свою фотографию — всё это будет сделано автоматически. Разберёмся, как это работает и насколько это безопасно.
Это история о технологии OAuth2.
В Яндекс можно войти через Гугл. Как тебе такое, юзернейм?
Для чего это нужно
Каждый сайт заинтересован в новых посетителях, потому что им можно потом продать платную подписку или показать рекламу. Поэтому сайтам выгодно, чтобы регистрация была как можно проще, в идеале — по нажатию одной кнопки (а то и вообще без регистрации). Если пользователи должны регистрироваться вручную и вводить все свои данные, есть шанс, что они отвалятся.
Параллельно с этим в интернете есть сервисы, которыми пользуются все: Яндекс, Гугл, фейсбук или Вконтакте. Почему бы не брать данные о пользователе с этих сервисов?
Для этого и придумали OAuth.
Как найти человека в Одноклассниках без регистрации и авторизации
OAuth — это как договор между сайтами
Яндекс, Гугл или любой другой сервис, который разрешает пользоваться своим пропуском, должны принять единый протокол обмена данных. Если по-простому, то они должны договориться:
«Мы даём друг другу данные вот в таком формате, мы принимаем их в этом формате, мы друг другу доверяем».
Эти договорённости закрепили в едином стандарте авторизации — OAuth. В нём написано, как выдавать пропуска, как их проверять и что делать в разных случаях.
Как работает единая авторизация
Для пользователя всё выглядит просто: нажал «Войти через Яндекс», подтвердил Яндексу своё желание войти на нужный сайт, и всё — вы уже зарегистрировались на новом сайте и можете им пользоваться. Но что происходит под капотом?
Когда посетитель, например, сайта о программировании, нажимает «Войти через Яндекс», этот сайт отправляет в Яндекс запрос и говорит: «Тут кто-то хочет войти на мой сайт через ваш сервис, можете разобраться?»:
Когда Яндекс получает такой запрос, ему нужно понять, что за посетитель пришёл на сайт и есть ли у него аккаунт Яндекса. Для этого он показывает всплывающее окно, где посетитель может войти в свой Яндекс-аккаунт. Это нужно, чтобы сервис понимал, на чьё имя выдавать пропуск для сайта. Если пользователь уже залогинен в Яндексе, его сразу узнают.
Как только посетитель вводит свой логин и пароль, Яндекс узнаёт его и спрашивает, доверяет ли он этому сайту о программировании и может ли Яндекс поделиться с сайтом данными о его имени и почте:
Дальше Яндекс отдаёт ваши данные сайту, он вас узнаёт, и готово:
Насколько это безопасно
Каждый сайт, который использует OAuth, сам определяет, какие данные о пользователе они хотят увидеть. Например, одному сайту достаточно знать ваше имя и почту, а другому хочется скачать вашу фотографию и узнать дату рождения.
Когда вы будете входить через OAuth, сервис вам скажет: «Вот какие данные у меня запрашивают. Давать доступ?». Когда вы разрешите доступ, эти данные перейдут на сайт. Откажетесь — не перейдут.
Разблокируем Вконтакте, Одноклассники, Mail.ru, Яндекс
✅ Сайты, которые используют OAuth, не смогут прочитать вашу почту или личные сообщения. Но есть и другие технологии — например приложения в социальных сетях, — и уже они могут делать гораздо больше.
✅ Через OAuth нельзя отправить сообщения от вашего имени или сделать пост в вашей ленте новостей. Но, опять же, если это не OAuth, а отдельное приложение для фейсбука или VK, то возможно и такое. Помните все эти игры, которые постят от имени игроков «Я собрал капусту на своей ферме»? Вот это они.
✅ Через OAuth точно не передаётся ваш пароль от Яндекса, Гугла и других сервисов. Сервисы хранят пароли в зашифрованном виде, поэтому даже при всём желании не смогли бы его передать.
Можно ли этому доверять?
Скорее нет, чем да. С OAuth есть проблема: вы никогда не знаете, действительно ли это OAuth или это хакеры сделали штуку, похожую на OAuth, которая хочет украсть ваш пароль. На всякий случай вот техника безопасности:
⚠️ Во всех важных сервисах включайте двухфакторную авторизацию: чтобы не только вводить пароль, но и получать СМС.
⚠️ Если сервис поддерживает приложение-аутентификатор — используйте его. Например, в Яндексе есть «Ключ», а в Гугле — Authenticator. Это специальные приложения, которые создают дополнительный слой защиты поверх вашего логина и пароля.
⚠️ Если вы только что пользовались сервисами Яндекса или Гугла и тут вас просят вновь ввести логин и пароль — закройте эту страницу. Яндекс и Гугл помнят вас и не попросят пароль лишний раз.
Источник: dzen.ru
Безопасна ли авторизация на сайте через ВКонтакте и другие соцсети?

Буквально вчера добавил полезную для постоянных посетителей блога функцию – возможность зайти в качестве подписчика, воспользовавшись кнопками социальных сетей. Это значительно удобнее, чем внедрять отдельную форму регистрации. Если же сравнивать с анонимным комментированием (пока ещё доступным), то плюс кроется в удобстве отслеживания ответов на свои сообщения другими пользователями, в просмотре истории, смене аватара и т. д.
Первый вопрос, возникающий у не сталкивавшегося с этим человека: «Безопасна ли авторизация на сайте через ВКонтакте?». Согласно мировой статистике, наибольшее опасение за сохранность своих конфиденциальных данных выражают люди в возрасте 35-40+, а молодёжь уже давно привыкла к данному способу идентификации. Чтобы разобраться в нём, необходимо понять, какие сведения передаются.
Итак, мы жмём на кнопку «Войти через VK» (или с помощью любой другой соцсети, коих добавил множество), что происходит далее? На экране отображается подтверждение со стороны соцсети. После этого скрипт при помощи API-протокола спрашивает у социалки, действительно ли пользователь там зарегистрирован.
Ответ положительный? Всё, процедура завершена. Никакой передачи паролей и тому подобного. Присутствует сложное шифрование, исключающее перехват. В этом случае фишинг невозможен, поскольку речь о прямом запросе.
Обращайте внимание на адресную строку в новом окне, где подтверждается доступ к данным. Там должен висеть замок, характерный для HTTPS-сайтов. При нажатии на него отобразится уровень безопасности и видна информация о сервисе. Уж надеюсь, что отличить ВК или ОК от маскирующегося под него веб-сайта вы способны, достаточно взглянуть на адресную строку.
Как работает авторизация через социальные сети? Основной функционал API
Принцип Application Programming Interface заключается в использовании библиотек, предоставляемых третьими лицами. Взаимодействие происходит методом запросов и ответов. Попросили вход на веб-сайт? Увидели интерфейс для подтверждения, затем получили «зелёный свет» на вход. Быстро, просто и безопасно.
Важно отметить, что для получения доступа к API-интерфейсу каждого отдельного сервиса необходимо пройти процедуру создания своего приложения, подписать соглашение разработчика и т. д. Сами порталы со всей ответственностью относятся к возможности идентификации через них, требуя от владельцев сайтов соблюдения требований.
Надеюсь в той краткой статье удалось ответить на вопрос, безопасна ли авторизация на сайте через ВКонтакте. Да, совершенно.
Источник: gamenewsblog.ru
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
Я заинтересовался как сделать авторизацию, почитав официальную документацию понял, что ничего не понял. и так давайте приступим.
Если Вы заинтересованы в этом вопросе, как же все-таки сделать авторизацию используя ВК, то у Вас уже есть сайт, или как минимум вы обладаете базовыми знаниями. Для начала нам нужно создать приложение Вконтакте, самый простой шаг.
1. Переходим на сайт https://vk.com/apps?act=manage и создаем новое приложение:
2. Заполняем следующие данные:
Название: Любое, его видно только во время авторизации, например авторизовавшись на нашем сайте с помощью ВК, Вы видите это, без количества участников.
Адрес сайта: Ссылка на ваш сайт
Базовый домен: Ссылка на ваш сайт

Отлично, нажимаем подключить сайт.
3. Переходим в настройки приложения, копируем ID приложения и Защищенный ключ, сохраняем куда-нибудь и на этом работа на стороне ВК окончена, переходим к написанию скрипта.
4. Теперь самое интересное, нам нужно написать скрипт (обработчик), давайте создадим на нашем сервере в корне сайта файл auth.php и приступим к его редактированию. Хочу отметить, что на локальном сервере (OpenServer) авторизация работать не будет! 
Открываем файл, я использую для этого PHPStorm и давайте создадим несколько переменных с пояснениями:
$client_id = 7157110; // ID приложения $client_secret = ‘ESlBJHmVMbeh8IVLiBDv’; // Защищённый ключ $redirect_uri = ‘http://royera.ru/auth.php’; // Адрес сайта

Тут все понятно, подставляем параметры из нашего приложения, ссылку указывать полностью, где лежит сам скрипт.
Далее формируем ссылку, которая будет ввести на сайт ВК с передаваемыми параметрами:
$url = ‘http://oauth.vk.com/authorize’; // Ссылка для авторизации на стороне ВК $params = [ ‘client_id’ => $client_id, ‘redirect_uri’ => $redirect_uri, ‘response_type’ => ‘code’]; // Массив данных, который нужно передать для ВК содержит ИД приложения код, ссылку для редиректа и запрос code для дальнейшей авторизации токеном

Теперь можно открыть сайт скопировав $redirect_uri

Ссылка сформирована, теперь нужно получить и обработать ответ от ВК, после того как пользователь перешел по ссылке:
if (isset($_GET[‘code’])) < $result = true; $params = [ ‘client_id’ =>$client_id, ‘client_secret’ => $client_secret, ‘code’ => $_GET[‘code’], ‘redirect_uri’ => $redirect_uri ]; $token = json_decode(file_get_contents(‘https://oauth.vk.com/access_token’ . ‘?’ . urldecode(http_build_query($params))), true); if (isset($token[‘access_token’])) < $params = [ ‘uids’ =>$token[‘user_id’], ‘fields’ => ‘uid,first_name,last_name,screen_name,sex,bdate,photo_big’, ‘access_token’ => $token[‘access_token’], ‘v’ => ‘5.101’]; $userInfo = json_decode(file_get_contents(‘https://api.vk.com/method/users.get’ . ‘?’ . urldecode(http_build_query($params))), true); if (isset($userInfo[‘response’][0][‘id’])) < $userInfo = $userInfo[‘response’][0]; $result = true; >> if ($result) < echo «ID пользователя: » . $userInfo[‘id’] . ‘
‘; echo «Имя пользователя: » . $userInfo[‘first_name’] . ‘
‘; echo «Ссылка на профиль: » . $userInfo[‘screen_name’] . ‘
‘; echo «Пол: » . $userInfo[‘sex’] . ‘
‘; echo «День Рождения: » . $userInfo[‘bdate’] . ‘
‘; echo ‘‘; echo «
«; > >

После того как пользователь перешел по ссылке и подтвердил передачу данных, Вам на сервер в GET запросе вернется code, используя его мы запрашиваем у ВК токен пользователя, отправляем запрос в ВК с параметрами указанные в массиве
$params = [ ‘client_id’ => $client_id, ‘client_secret’ => $client_secret, ‘code’ => $_GET[‘code’], ‘redirect_uri’ => $redirect_uri ];
ВК возвращает нам токен пользователя, его можно сохранить в базу данных.
Теперь следующим запросом мы получаем данные о пользователе, используя его токен и обращаясь к API VK https://api.vk.com/method/users.get мы получаем json от VK, который мы можем распарсить. Давайте попробуем авторизоваться, заходим на нашу страницу и нажимаем авторизация:

Разрешаем и у нас на сайте появляются данные об аккаунте:

Авторизация работает. Далее можете сохранить ID в сессию и проверять авторизован пользователь или нет. Давайте доработаем код:
В самый конец добавляем:
$_SESSION[‘id’] = $userInfo[‘id’];
А ссылку заменяем на:
$client_id, ‘redirect_uri’ => $redirect_uri, ‘response_type’ => ‘code’]; // Массив данных, который нужно передать для ВК содержит ИД приложения код, ссылку для редиректа и запрос code для дальнейшей авторизации токеном if(empty($_SESSION[‘id’])) < echo «Вы уже авторизованы»; >else < echo $link = ‘
Аутентификация через ВКонтакте
‘; > if (isset($_GET[‘code’])) < $result = true; $params = [ ‘client_id’ =>$client_id, ‘client_secret’ => $client_secret, ‘code’ => $_GET[‘code’], ‘redirect_uri’ => $redirect_uri ]; $token = json_decode(file_get_contents(‘https://oauth.vk.com/access_token’ . ‘?’ . urldecode(http_build_query($params))), true); if (isset($token[‘access_token’])) < $params = [ ‘uids’ =>$token[‘user_id’], ‘fields’ => ‘uid,first_name,last_name,screen_name,sex,bdate,photo_big’, ‘access_token’ => $token[‘access_token’], ‘v’ => ‘5.101’]; $userInfo = json_decode(file_get_contents(‘https://api.vk.com/method/users.get’ . ‘?’ . urldecode(http_build_query($params))), true); if (isset($userInfo[‘response’][0][‘id’])) < $userInfo = $userInfo[‘response’][0]; $result = true; >> if ($result) < echo «ID пользователя: » . $userInfo[‘id’] . ‘
‘; echo «Имя пользователя: » . $userInfo[‘first_name’] . ‘
‘; echo «Ссылка на профиль: » . $userInfo[‘screen_name’] . ‘
‘; echo «Пол: » . $userInfo[‘sex’] . ‘
‘; echo «День Рождения: » . $userInfo[‘bdate’] . ‘
‘; echo ‘‘; echo «
«; > > $_SESSION[‘id’] = $userInfo[‘id’];

Авторизация через ВК готова! Скачать исходник можно ниже
Остались вопросы? Задавай в комментарии, всегда рады помочь!

- Сергей Котов
- 03.10.2019
- 33 431
- 24
- 14
Источник: kotoff.net