GPLVote Sign Doc Direct API
Содержание |
Общее описание
В мобильном приложении встроена возможность взаимодействовать с сайтом клиента напрямую через URL в ссылках или QR-кодах. При этом приложению передается информация о прямых ссылках на сайт-клиент и взаимодействие происходит минуя прокси-сервера.
Запрос на регистрацию подписи на сайте клиента
Для инициирования процедуры регистрации подписи на сайте клиента в приложение необходимо передать (например, с помощью QR-кода) следующий URL:
signreg://<домен сайта-клиента>/<путь регистрации подписи на сайте клиента>?code=<одноразовый код для регистрации>&site=<идентификатор сайта клиента>
URL по которому приложение будет передавать регистрацию подписи, составляется в виде:
http://<домен сайта-клиента>/<путь регистрации подписи на сайте клиента>
По этому URL будет выполнен POST запрос с передачей в нем следующего документа о регистрации подписи в виде JSON документа:
{ "type": "REGISTER", "site": "<идентификатор сайта клиента>", "code": "<одноразовый код для регистрации подписи>", "public_key": "<публичный ключ пользователя в кодировке Base64 без переводов строк>", "sign": "<подпись строки одноразового кода секретным ключем пользователя в кодировке BASE64 без переводов строк>", "sign_type": "<тип подписи (например "SHA256withRSA")>" }
При удачной обработке URL должен вернуть JSON ответ со статусом 0:
{ "status": 0 }
Запрос на подписание документа
Для инициирования подписания документа в приложение необходимо передать (например, с помощью QR-кода) следующий URL:
signdoc://<URL без схемы по которому можно получить содержимое документа для подписания>
При получении данного URL, приложение подменяет схему на http и делает GET запрос по получившемуся URL, ожидая в теле ответе запрос на подписание в виде JSON.
Например, если исходный URL из QR кода будет вот таким:
signdoc://client.site.ru/get_doc?id=TkhqUYuh
тогда приложение будет пытаться получить документ для подписания по адресу
http://client.site.ru/get_doc?id=TkhqUYuh
При этом, документ может быть представлен в двух видах - персонифицированном и открытом виде. В персонифицированном виде данные документа шифруются публичным ключем пользователя, для которого этот документ предназначен. В открытом виде данные не шифруются и в документе отсутствуют атрибуты принадлежности документа конкретному пользователю.
Персонифицированный запрос на подписание документа
{ "type": "SIGN_REQUEST", "site": "<идентификатор сайта клиента>", "doc_id": "<внутренний идентификатор документа на сайте клиента>", "template": "<шаблон для показа данных документа>", "sign_url": "<URL на сайте клиента, на который следует отправить подпись данного документа>", "user_key_id": "<идентификатор публичного ключа пользователя, которому предназначен данный документ>", "data": "<данные документа, зашифрованные публичным ключем пользователя, для которого предназначен документ>" }
Публичный запрос на подписание документа
{ "type": "SIGN_REQUEST", "site": "<идентификатор сайта клиента>", "doc_id": "<внутренний идентификатор документа на сайте клиента>", "template": "<шаблон для показа данных документа>", "sign_url": "<URL на сайте клиента, на который следует отправить подпись данного документа>", "dec_data": "<данные документа в открытом виде>" }
При этом следует учитывать что на такой запрос о подписании необходимо отправлять подпись документа вместе с публичным ключем. Т.к. при таком подписании не предусмотрена регистрация подписи пользователя. Т.е. подпись документа будет выглядеть следующим образом:
{ "type": "SIGN", "site": "<идентификатор сайта клиента>", "doc_id": "<внутренний идентификатор документа на сайте клиента>", "sign": "<подпись документа в кодировке Base64 без переводов строк>", "sign_type": "<тип подписи (например "SHA256withRSA")>", "public_key": "<публичный ключ пользователя в кодировке Base64 без переводов строк>" }
В этом случае идентификационные данные пользователя в читаемом формате необходимо получать либо из специальной сети доверия, либо размещать на сайте клиента позже с привязкой к подписи.
Список URL API для сайта клиента
- URL POST, по которому будет присылаться регистрация подписи
- URL GET, по которому будет выдаваться документ, требующий подписания
- URL POST, по которому будет отправляться подпись документа