Для доступа к API ВКонтакте с Вашего сайта предусмотрен механизм серверной авторизации на базе протокола OAuth 2.0. Этот метод позволяет реализовать безопасную аутентификацию пользователей на Вашем сайте через ВКонтакте и получить доступ к API с сервера Вашего приложения.
Процесс авторизации сайта состоит из 4-х шагов:
- Открытие окна браузера для аутентификации пользователя на сайте ВКонтакте.
- Разрешение пользователем доступа к своим данным.
- Передача сайту значения code для получения ключа доступа.
- Получение сервером приложения ключа доступа access_token для доступа к API ВКонтакте.
Для авторизации пользователя необходимо перенаправить его браузер по адресу:
https://oauth.vk.com/authorize, передав следующие параметры:
- page — форма авторизации в отдельном окне;
- popup — всплывающее окно;
- mobile — авторизация для мобильных устройств (без использования Javascript)
Если пользователь не вошел на сайт, то в диалоговом окне ему будет предложено ввести свой логин и пароль.
Получение идентификатора приложения ID и Secret для Oauth2-авторизации через VK.COM «ВКонтакте»
После успешного входа на сайт пользователю будет предложено авторизовать приложение, разрешив доступ к необходимым настройкам, запрошенным при помощи параметра scope. Полный список настроек доступен в разделе прав доступа приложений.
Параметр code может быть использован в течение 1 часа для получения ключа доступа к API access_token с Вашего сервера.
В случае возникновения ошибки браузер пользователя будет перенаправлен с кодом и описанием ошибки:
Для получения access_token необходимо выполнить запрос с Вашего сервера на https://oauth.vk.com/access_token, передав следующие параметры:
client_id Обязательно | Идентификатор Вашего приложения |
client_secret Обязательно | Защищенный ключ Вашего приложения (указан в настройках приложения) |
redirect_uri Обязательно | URL, который использовался при получении code на первом этапе авторизации. Должен быть аналогичен переданному при авторизации. |
code Обязательно | Временный код, полученный после прохождения авторизации. |
В результате выполнения данного запроса Ваш сервер получит вновь созданный access_token. Вместе с access_token серверу возвращается время жизни ключа expires_in в секундах. Процедуру авторизации приложения необходимо повторять в случае истечения срока действия access_token, смены пользователем своего логина или пароля или удаления приложения из настроек.
Если у пользователя указан email, а приложением были запрошены соответствующие права, сервер также вернет email пользователя.
В случае ошибки будут переданы параметры error и error_description.
Выберите приложение
Инструкция
- Выберите приложение
- Нажмите на него
- Затем нажмите «разрешить»
- Скопируйте часть адресной строки от access_token= до Доступ в любое время», если планируете использовать токен с другого IP адреса, например на хостинге
Как работает OAuth 2 — введение (просто и понятно)
Также обратите внимание, что методы для работы с аудиозаписями и сообщениями работают только с одобренными приложениями. Подробнее: Отключение публичного API для аудио, Ограничение Messages API
Актуальный список прав доступа здесь: Права доступа приложения
Для работы со всеми методами API Вам необходимо передавать в запросе access_token — специальный ключ доступа. Он представляет собой строку из латинских букв и цифр и может соответствовать отдельному пользователю, сообществу или самому Вашему приложению.
В API ВКонтакте для получения ключа доступа используется открытый протокол OAuth 2.0. При этом пользователь не передает логин и пароль приложению, поэтому его аккаунт не может быть скомпрометирован.
Мы поддерживаем три способа получения ключа доступа по OAuth 2.0:
1. Implicit flow — самый короткий и простой вариант. Ключ возвращается на устройство пользователя, где был открыт диалог авторизации (в виде дополнительного параметра URL). Такой ключ может быть использован только для запросов непосредственно с устройства пользователя (например, для выполнения вызовов из Javascript на веб-сайте или из мобильного приложения).
2. Authorization code flow — двухэтапный вариант с дополнительной аутентификацией Вашего сервера. Ключ доступа возвращается непосредственно на сервер и может быть использован, например, для автоматизированных запросов из PHP.
3. Client credentials flow — авторизация по секретному ключу приложения. Этот подход необходимо использовать только для доступа к специальным secure-методам.
Такой ключ требуется для работы со всеми методами нашего API, за исключением методов секции secure.
Ключ доступа — своего рода «подпись» пользователя в Вашем приложении. Он сообщает серверу, от имени какого пользователя осуществляются запросы, и какие права доступа он выдал Вашему приложению.
Получить ключ доступа пользователя можно одним из этих способов:
- Implicit flow. Для работы с API от имени пользователя в Javascript-приложениях и Standalone-клиентах (десктопных или мобильных).
- Authorization code flow. Для работы с API от имени пользователя с серверной стороны Вашего сайта.
В iFrame и Flash-приложениях ключ доступа передается при запуске с остальными параметрами, Вам не нужно самостоятельно реализовывать работу с OAuth.
Такой ключ позволяет работать с API от имени группы, встречи или публичной страницы. Например, с его помощью Вы можете отвечать подписчикам сообщества на сообщения, поступившие в его адрес.
С ключом доступа сообщества можно вызывать те методы, которые имеют специальную пометку в общем списке.
Получить ключ доступа сообщества можно одним из этих способов:
- Implicit flow. Для работы с API от имени сообщества в Javascript-приложениях и Standalone-клиентах (десктопных или мобильных).
- Authorization code flow. Для работы с API от имени сообщества с серверной стороны Вашего сайта.
- В интерфейсе настроек сообщества. Для этого достаточно открыть раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), выбрать вкладку «Работа с API» и нажать «Создать ключ доступа».
Сервисный ключ нужен для запросов, которые не требуют авторизации пользователя или сообщества. Это такие методы, как secure.sendNotification для отправки уведомлений от приложения, или secure.addAppEvent для добавления информации о достижениях, а также, начиная с апреля 2017 года, открытые методы, например, users.get.
Получить сервисный ключ доступа можно в настройках Вашего приложения. Ключ не привязан к IP-адресу при использовании с открытыми методами, срок его действия не ограничен. Если ключ был скомпрометирован, Вы можете сгенерировать новый ключ, при этом старый будет аннулирован.
Сервисный ключ доступа идентифицирует Ваше приложение. Все запросы к API, совершённые с использованием Вашего ключа доступа, будут считаться совершёнными от имени Вашего приложения. Сервисный ключ доступа можно использовать только для запросов с серверной стороны приложения, его нельзя передавать и хранить на клиенте.
Для запросов к методам secure сервисный ключ привязан к IP-адресу, с которого был сгенерирован.
Документация о старой схеме получения сервисного ключа доступа доступна на этой странице: Client credentials flow.
Источник: planshet-info.ru
OAuth ВКонтакте: использования в корыстных целях
Существует множество способов распространения вредоносного спама во ВКонтакте. Но вредители не дремлют, в их головы приходят все больше интересных идей. И поддержка OAuth 2.0 платформой ВКонтакте оказалась как никак кстати. Мошенники научились пользоваться им для обхода страницы предупреждения о вредоносных сайтах.
А все началось с того, что однажды на моей стене появилось такое сообщение:
Из любопытства перешел по ссылке и попал на очередной фишинговый сайт. Но мне показалась странной сама ссылка, она имела вид (половина символов в ASCII):
vkontakte.ru/away.php?to=http%3A%2F%2FApi.vKontakte.Ru%2F%2Fo%2561u%2574%…- vkontakte.ru/away.php — страница с предупреждением о переходе по ссылке;
- Параметр to сама ссылка. В перекодированном виде выглядела так:
Api.vKontakte.Ru/oauth/authorize?client_id=2376***redirect_uri=vgostivk.dyndns** - client_id=2376***redirect_uri=vgostivk.dyndns**
- redirect_uri — адрес, на который будет передан access_token (посредством редиректа);
- display — вид окна авторизации (page, popup, touch и wap).
В этом и заключается весь смысл обхода блек-листа вредоносных сайтов ВКонтакте. Появляется только алерт о переходе на api.vk.com. И в результате перехода мы прямиком попадаем на фишинг сайт, который имеется в черном списке. При переходе по ссылке vkontakte.ru/away.php?to=vgostivk.dyndns**:
Как оказалось, приложение, якобы требующее авторизацию висело на взломанном пользователе:
Да и сам фишинг сайт был устроен довольно интересно. Дизайн по обычаю был контактовский и предлагал авторизоваться. Я прошел авторизацию через рандомные почту и пароль, фейк прекрасно проглотил. Дальше было еще интересней, на главной появилась новость от «Павла Дурова»:
После нажатия на кнопку «Создать персональный счетчик», последовал прекрасный прогресс-бар. Затем было предложено указать свой номер и отправить sms:
По идее после успешной «активации» должно было перекинуть на страницу activ.php, но я не смог попасть туда. Выдержки из JS скриптов фишинг сайта:
.
if (req.status == 200) <
// если статус 200 (ОК) — выдать ответ пользователю
if (req.responseText == ‘ok’ ) //statusElem.innerHTML = ‘Все гуд!’;
get_activation();
>
if (req.responseText == ‘not’ )
//statusElem.innerHTML = «Ответ сервера: «+req.responseText;
.
function get_activation() document .location= «activ.php» ;
>* This source code was highlighted with Source Code Highlighter .
Итог: Мошенники используют обход предупреждений через OAuth 2.0, получают пароль и email пользователя, да еще и пытаются развести на отправку sms (скорее всего используя систему подписок).
Источник: habr.com
VK.com (бывший «Вконтакте»)¶
- Зарегистрируйте новое приложение по адресу VK.com API,
- заполните значения Application Id и Application Secret в настройках:
SOCIAL_AUTH_VK_OAUTH2_KEY = » SOCIAL_AUTH_VK_OAUTH2_SECRET = »
SOCIAL_AUTH_VK_OAUTH2_SCOPE = [. ]Приложение OAuth2¶
Для поддержки аутентификации OAuth2 для приложений VK.com:
- Создайте свое приложение IFrame на VK.com.
- В настройках приложения укажите URL вашего IFrame https://mysite.com/complete/vk-app (текущее значение по умолчанию).
- В настройках приложения укажите первый запрос API. Например:
method=getProfilesv=5.53http://vk.com/js/api/xd_connection.js?2″ type=»text/javascript»>script> script type=»text/javascript»> VK.init(function() VK.addCallback(«onApplicationAdded», requestRights); VK.addCallback(«onSettingsChanged», onSettingsChanged); > ); function startConnect() VK.callMethod(‘showInstallBox’); > function requestRights() VK.callMethod(‘showSettingsBox’, 1 + 2); // 1+2 is just an example > function onSettingsChanged(settings) window.location.reload(); > script> a href=»#» onclick=»startConnect(); return false;»>Click to authenticatea>
Для проверки запустите сервер с помощью sudo ./manage.py mysite.com:80 , чтобы браузер мог загрузить его, когда VK.com вызовет IFrame URL. Откройте страницу вашего приложения VK.com через http://vk.com/app. Теперь вы можете подключиться к приложению и автоматически войти в систему после подключения при посещении страницы приложения.
Более подробную информацию можно найти в разделе authentication for VK.com applications
OpenAPI¶
Вы также можете использовать собственный OpenAPI VK.com для входа в систему, но вам необходимо предоставить HTML-шаблон с кодом JavaScript для аутентификации, пример смотрите ниже.
-
Получите OpenAPI App Id и добавьте его в настройки:
SOCIAL_AUTH_VK_OPENAPI_APP_ID = »
Источник: django.fun