Получение ключа доступа (access_token) для API «ВКонтакте»
«Access_token» – это некий уникальный ключ доступа к API социальной сети «ВКонтакте». Мы с вами уже затрагивали тему взаимодействия с этой социальной сетью, и там мы получали информацию из профиля пользователя без каких либо подтверждений.
Используя уникальный ключ, наши разработки получают больше прав, а именно – с помощью созданных приложений, при использовании токена, мы можем постить сообщения на стену «ВКонтакте», отправлять личные сообщения, загружать фотографии и делать много других интересных штук, о которых, я думаю, мы с удовольствием поговорим более подробно в отдельных статьях.
Но, прежде чем приступить к разработке своих приложений, необходимо получить этот уникальный ключ. Тому, как это правильно сделать, и будет посвящена эта статья.
1. Перейдите по этой ссылке. Если вы не авторизованы в «ВКонтакте» – авторизуйтесь, если уже авторизованы – то перед вами откроется форма для создания приложения:

Заполняем название приложения, при этом обязательно выбираем тип приложения «Standalone-приложение» и нажимаем «Подключить приложение».
После этого вам будет предложено подтвердить создание приложения. Подтверждаете, и переходите к следующему шагу.

2. На открывшейся странице приложения нажимаем «Настройки», затем копируем ID приложения:

и вставляем его в следующую ссылку:
Где «XXXXXXX» – ID вашего приложения.
3. Копируем полученную ссылку и открываем ее в браузере. Перед вами открывается окно с подтверждением доступа:

Просматриваете его, и если все так – нажимаете «Разрешить».
4. На следующей странице, где написано «Пожалуйста, не копируйте данные из адресной строки для сторонних сайтов. Таким образом Вы можете потерять доступ к Вашему аккаунту» копируете ссылку, она у вас будет вида:
и является вашим уникальным ключом, который вы копируете и используете в своих целях.
Обратите внимание, что данный ключ – это лишь пример, и он не является рабочим. Ваш же ключ не рекомендуем передавать третьим лицам во избежание взлома страницы и других неприятных ситуаций.
Извлечение ключа из токена с неизвлекаемым ключом

Довольно часто при оформлении сертификатов ключей электронной подписи можно наблюдать навязчивый пиар токенов с неизвлекаемым ключом. Продавцы из удостоверяющих центров уверяют, что, купив у них СКЗИ КриптоПРО CSP и токен с неизвлекаемым ключом (Рутокен ЭЦП или JaCarta ГОСТ), мы получим сертифицированные СКЗИ, обеспечивающие 100%-ную защиту от кражи ключей с токена. Но так ли это на самом деле? Для ответа на этот вопрос проведем простой эксперимент…
Конфигурация тестового стенда
- ОС MS Windows 7 SP1
- СКЗИ КриптоПРО CSP 3.9.8423
- Драйверы Рутокен для Windows (x86 и x64). Версия: v.4.1.0.0 от 20.06.2016, WHQL-certified
- Единый Клиент JaCarta и JaCarta SecurLogon. Версия 2.9.0 сборка 1531
- КриптоАРМ Стандарт Плюс 5. Версия 5.2.0.8847.
- Рутокен ЭЦП. Версия 19.02.14.00 (02)
- JaCarta ГОСТ. Номер модели JC001-2.F09 v2.1
Методика тестирования
- генерируется контейнер закрытого ключа и запрос на сертификат открытого ключа;
- после прохождения в удостоверяющем центре процедуры сертификации из запроса получается сертификат;
- сертификат в совокупности с контейнером закрытого ключа образует готовую для использования ключевую информацию. Данную ключевую информацию, записанную на носителе, будем называть исходным ключевым документом;
- с исходного ключевого документа изготавливаются копии, которые записываются на отчуждаемые носители (далее будем называть их рабочими ключевыми документами) и передаются уполномоченным пользователям;
- после изготовления необходимого количества рабочих ключевых документовисходный ключевой документ уничтожается или депонируется на хранение в орган криптографической защиты информации.
Проведение тестирования
Для этого с помощью КриптоАРМ создадим в реестре контейнер закрытого ключа test-key-reestr, содержащий самоподписанный сертификат (CN=test)
С помощью штатных средств СКЗИ КриптоПРО CSP (Пуск—>Панель управления—>КриптоПро CSP) скопируем ключевой контейнер test-key-reestr на ключевые носители Рутокен ЭЦП и JaCarta ГОСТ. Ключевым контейнерам на ключевых носителях присвоим имена test-key-rutoken и test-key-jacarta соответственно.
Описание приведено применительно к JaCarta ГОСТ (для Рутокен ЭЦП действия аналогичны):
Таким образом получили рабочие ключевые документы на JaCarta ГОСТ (контейнер test-key-jacarta) и Рутокен ЭЦП (контейнер test-key-rutoken).
Попробуем скопировать ключевые контейнеры test-key-rutoken и test-key-jacarta обратно в реестр.
Описание приведено для JaCarta ГОСТ (для Рутокен ЭЦП действия аналогичны).

Как мы видим, ключевая информация успешно скопирована или, другим языком, извлечена из токенов с неизвлекаемым ключом. Получается, что производители токенов и СКЗИ врут? На самом деле нет, и ситуация сложнее, чем кажется на первый взгляд. Исследуем матчасть по токенам.
Матчасть
То, что на рынке принято называть токеном с неизвлекаемым ключом, правильно называется функциональным ключевым носителем (ФКН) (доп. инфо).
Главным отличием ФКН от обычных токенов (Рутокен S, JaCarta PKI, …) в том, что при выполнении криптографических преобразований (например, формирование электронной подписи) закрытый ключ не покидает устройство. В то время как при использовании обычных токенов закрытый ключ копируется с токена в память комптьютера.
Использование ФКН требует особой организации взаимодействия между прикладным криптографическим ПО и библиотекой СКЗИ (криптопровайдером или, по-другому, CSP).

Здесь важно увидеть, что программная часть библиотеки СКЗИ должна знать о существовании на токене апплета, реализующего криптографический функционал (например, генерация ключа, подпись данных и т.д.) и уметь с ним работать.
По-новому взглянем на наш тестовый стенд
В качестве одного из ключевых носителей использовался Рутокен ЭЦП. Через «Панель управления Рутокен» о нем можно получить следующую информацию:

В последней строке указана фраза «Поддержка КриптоПРО ФКН: Нет», а это значит, что на токене нет апплета, с которым умеет работать СКЗИ КриптоПРО CSP. Таким образом, реализация технологии ФКН с использованием СКЗИ и токенов, описанных в конфигурации тестового стенда, невозможна.
Аналогичная ситуация и с JaCarta ГОСТ. Более того, СКЗИ КриптоПРО CSP, по крайней мере та версия, которая использовалась в тестовом стенде, использует данные ключевые носители как «обычные токены», которые, в свою очередь, являются просто носителями ключа.
Это утверждение очень просто подтвердить. Для этого надо поставить СКЗИ КриптоПРО CSP на чистую машину без драйверов от токенов и подключить токен JaCarta ГОСТ. ОС Windows 7 обнаружит токен JaCarta ГОСТ как «Устройство чтения смарт-карт Microsoft Usbccid (WUDF)». теперь можно попробовать создать ключ на токене и скопировать его в реестр компьютера. Весь функционал СКЗИ успешно отработает.
Как сделать, чтобы все было хорошо?
Чтобы с помощью продуктов ООО “КРИПТО-ПРО” реализовать технологию ФКН, необходимо:
1. Купить специальную версию библиотеки СКЗИ:
— для Рутокен ЭЦП — СКЗИ КриптоПРО Рутокен CSP.
— для JaCarta ГОСТ – СКЗИ КриптоПро ФКН CSP.
2. Одновременно с библиотекой СКЗИ необходимо приобрести специально подготовленные токены, содержащие в себе программные части (апплеты), с которыми умеет работать КриптоПРО Рутокен CSP или КриптоПро ФКН CSP соответственно.
Получается, что Рутокен ЭЦП и JaCarta ГОСТ не являются токенами с неизвлекаемым ключом?
Опять нет. Данные устройства могут реализовывать функционал ФКН (но, возможно, в меньшем объеме, чем при использовании их совместно с СКЗИ КриптоПРО), но для этого нужен софт, который умеет работать с апплетами размещенными на токенах. Таким софтом может быть КриптоАРМ Стандарт 5 Плюс. Он это умеет. При генерации ключевой пары в мастере КриптоАРМ можно выбрать криптопровайдер, который будет использоваться, например, Rutoken ECP или eToken GOST. Это и позволит использовать токен как ФКН.
Как получить токен Вконтакте
При разработке приложений связанных с работой API Вконтакте возникает необходимость получить ключ доступа пользователя (access_token). Для этой цели я использую проверенный временем способ, а именно получение токена через ссылку авторизации в приложении Вконтакте на Android.
Зачем нужен токен Вконтакте
access_token – это специальный ключ доступа, который работает на базе протокола авторизации OAuth 2.0 и генерируется с помощью логина и пароля пользователя. В отдельных случаях токен генерируется прямо в интерфейсе социальной сети, например для получения доступа к приложению или сообществу.
С помощью токена (access_token) вы можете использовать практически весь функционал социальной сети Вконтакте. Узнать полный список методов для работы с API Вконтакте вы можете по ссылке: https://vk.com/dev/methods
Существует несколько типов токенов:
- Ключ доступа пользователя – для доступа к функционалу пользователя
- Ключ доступа сообщества – для доступа к функционалу сообщества
- Ключ доступа приложения – для доступа к функционалу приложения
Как получить ключ доступа пользователя
Мы рассмотрим два способа получения токена (access_token) пользователя:
- С помощью логина и пароля
- С помощью логина, пароля и дфухфакторной авторизацией
Получение ключа доступа пользователя с помощью логина и пароля:
- Открываем ссылку: https://api.vk.com/oauth/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username=НОМЕР-ТЕЛЕФОНА&password=МОЙ-ПАРОЛЬ (предварительно подставив свои данные в переменные username= и password=
- В окне вы увидите следующее сообщение:
- Вам необходимо перейти к адресной строке и скопировать ключ который находится после access_token= и до &user_id
Данный набор букв и цифр это и есть ваш ключ доступа пользователя (access_token).
Получение ключа доступа пользователя с помощью логина, пароля и двухфакторной авторизации:
- Открываем ссылку: https://api.vk.com/oauth/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username=НОМЕР-ТЕЛЕФОНА&password=МОЙ-ПАРОЛЬ (предварительно подставив свои данные в переменные username= и password=
- В окне будет указана ссылка для перехода (redirect_uri):
- Переходи по ссылке и вводим код полученный в виде СМС или сообщения от администрации Вконтакте:
- В следующем окне вы увидите следующее сообщение:
- Вам необходимо перейти к адресной строке и скопировать ключ который находится после access_token= и до &user_id
Данный набор букв и цифр это и есть ваш ключ доступа пользователя (access_token).
Как получить ключ доступа сообщества
- Заходим в сообщество где вы являетесь администратором
- Переходим в раздел “Управление”
- Переходим в раздел “Работа с API”
- Нажимаем “Создать ключ” и выбираем необходимые права доступа:
- Нажимаем “Создать”
- От выбранного типа подтверждения действий вам придет СМС или push – уведомление
- Подтверждаем создание ключа:
- Ключ успешно создан
* Для работы с Callback API и Long Poll API используйте полученный ранее токен сообщества.
Как получить ключ доступа приложения
- Переходим в раздел управления приложениями: https://vk.com/apps?act=manage
- Нажимаем “Создать приложение”
- Заполняем данные:
- Переходим в “Настройки приложения” где видим сервисный ключ доступа
Мы рассмотрели самые популярные способы получения токена (access_token) для работы с API Вконтакте.
Если у вас возникнут трудности при получении токена для работы с API Вконтакте, пишите в комментариях или мне в телеграм.