Подпись
Потихоньку начинаем приближать нашу api к vkma. Основное требование безопасности – это подпись параметров. Многие не понимают как принцип, так и смысл реализации подписи, об этом я и расскажу. Когда вы входите в ваш сервис, в него передаются некие данные для реализации проверки подлинности запросов пользователя. Основная цель подписи – узнать id пользователя и другие параметры в зависимости от задачи. Вот пример параметров (они могут быть другими, в зависимости от платформы, версий приложения и тд.): vk_user_id – основной параметр, ID пользователя; vk_app_id – ID приложения, которое было запущенно; vk_is_app_user – установлен ли сервис; vk_are_notifications_enabled – показывает, разрешены ли уведомления; vk_language – язык пользователя; vk_ref – откуда был совершён переход; vk_access_token_settings – права доступа; vk_group_id – ID сообщества; vk_viewer_group_role – роль пользователя из сообщества; vk_platform – на какой платформе запущен сервис; vk_is_favorite – индикатор добавления в избранное сервиса; vk_ts – время генерации параметров запуска; sign – сама подпись. Как видите, все нужные параметры начинаются с vk и сама подпись это sign.
Устанавливаем нужные зависимости:
NPM :
npm i -s querystring crypto
YARN:
yarn add querystring crypto
Далее открываем папку module и создаем в ней sign.js:
'use strict';
const qs = require('querystring');
const crypto = require('crypto');
module.exports = (_token) => {
if (_token) {
let _url_params = qs.parse(_token);
let ordered = {};
Object.keys(_url_params).sort().forEach((key) => {
if (key.slice(0, 3) === 'vk_') {
ordered[key] = _url_params[key];
}
});
const stringParams = qs.stringify(ordered);
const paramsHash = crypto
.createHmac('sha256', process.env.SECRET_CODE)
.update(stringParams)
.digest()
.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=$/, '');
return paramsHash === _url_params?.sign ?
_url_params : undefined
}
else {
return undefined;
}
}
На выходе мы получаем либо все параметры запуска, либо undefined в зависимости от результата проверки подписи.
Далее у нас есть в этом коде process.env.SECRET_CODE
Переходим на страницу с нашими сервисами : https://vk.com/apps?act=manage
Далее заходим "Редактировать" -> "Настройки" -> Защищённый ключ.
Копируем строку в буфер и переходим далее в VS Code.
Открываем .vscode/launch.json и добавляем защищённый ключ в env:
***
"env": {
***
"SECRET_CODE": "hjdfgbdhjdjhfcvhjdf",
***
}
***
В дальнейшем, если защищённый ключ будет меняться, его будет достаточно поменять в env. На этом с проверкой подписи мы закончили, а применять её мы будем уже в следующей главе.
Last updated
Was this helpful?