Краткое описание из руководства разработчика - Глава 17. Интеграция с внешними системами
17.3.1.4. Использование JWT-аутентификации
Токен - средство идентификации пользователя, группы пользователей или отдельного сеанса работы в приложении. JSON Web Token (сокращенно JWT) - стандарт создания токенов доступа, основанный на формате JSON. JWT описывается в стандарте RFC 7519 (https://datatracker.ietf.org/doc/html/rfc7519). JWT используется для аутентификации пользователя в клиент-серверных приложениях. Использование JWT можно описать следующим порядком действий:
1. Пользователь аутентифицируется на сервере аутентификации, например, с использованием имени пользователя и пароля.
2. В ответ сервер аутентификации предоставляет пользователю JWT.
3. Пользователь обращается к приложению, представляясь этому приложению путем предъявления JWT.
4. Если предъявленный JWT проходит проверку приложением, приложение выполняет запрошенное действие и возвращает результат.
Кратко рассмотрим устройство JWT и то, каким способом этот инструмент может быть использован в системе «1С:Предприятие».
Логически JWT состоит из трех частей: заголовок (header), полезная нагрузка (payload), подпись (signature). Заголовок и полезная нагрузка представляют из себя объекты в формате JSON. Заголовок содержит служебную информацию, которая должна позволить проверяющей стороне корректно обработать данные JWT. Полезная нагрузка состоит из претензий (или требований, заявок, в оригинале - JWT claims), которые описывают прикладные данные, которые требуются для приложения, которое выполняет аутентификацию (выполняет запрос, аутентификация для которого выполняется с помощью JWT). Стандартные имена претензий перечислены в разделе 4.1 стандарта RFC 7519. Разработчик может создать собственное имя претензии. Важно, чтобы имена претензий, в рамках одного токена, были уникальными.
Подпись формируется на основании заголовка и полезной нагрузки с помощью специальной функции, описанной в заголовке и преобразованной в формат Base64URL. Физически JWT представляет собой строку, которая состоит из трех частей, разделенных символами «.». Заголовок и полезная нагрузка также подвергаются кодированию с помощью алгоритма Base64URL.
Рассмотрим пример.
Заголовок содержит следующую информацию:
{
"alg": "HS256",
"typ": "JWT"
}
Полезная нагрузка содержит следующую информацию:
{
"id": "1234567890",
"name": "Иван Иванов",
"role": "administrator"
}
JWT будет выглядеть следующим образом (токен разделен на три строки):
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJpZCI6IjEyMzQ1Njc4OTAiLCJuYW1lIjoi0JjQstCw0L0g0JjQstCw0L3QvtCyIiwicm9sZSI6ImFkbWluaXN0cmF0b3IifQ.
n-0muDfzGhlMQbzaCxeIU8JItoN1Yr4RdJq4G8RUnck
В этом примере разделение по строкам приведено для удобства восприятия, а собственно разделение выполнено по символу «.». Если средство просмотра документации не позволяет второй строке (начинается с символов «eyJpZCI6I») целиком поместиться по ширине просмотра, то пример будет отображаться более, чем в 3 строки.
Очевидно, что чем больше информации находится в разделе полезной нагрузки, тем больший размер будет занимать JWT.
В системе «1С:Предприятие» JWT может использоваться в следующих случаях:
`79; В качестве одного из способов аутентификации пользователей информационной базы «1С:Предприятия».
`79; В качестве одного из способов аутентификации при использовании HTTP- и Web-сервисов.
`79; При настройке публикации информационной базы на веб-сервере.
Для того, чтобы поэкспериментировать с различным наполнением JWT, можно использовать, например, сайт https://jwt.io.
17.3.1.4.3. Использование JWT
Если сервер, к которому выполняется HTTP-запрос, требует указания JWT, то это можно осуществить несколькими различными способами. Но технически, все возможности опираются или на формирование заголовка HTTP-запроса, или на формирование параметра запроса.
Самым простым способом выглядит явное указание «токена на предъявителя» (bearer token) в заголовке Authorization HTTP-запроса к серверу:
Запрос = Новый HTTPЗапрос("/get");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТекстТокена);
Аналогичный заголовок будет сформирован также в том случае, если будет использован метод ДобавитьТокенДоступа() объекта HTTPЗапрос. Разница с предыдущим способом заключается в том, что в качестве параметра метода выступает не строка, а значение типа ТокенДоступа:
Запрос = Новый HTTPЗапрос("/get");
Запрос.ДобавитьТокенДоступа(ТокенДоступа);
Если сервер требует токен доступа в виде параметра запроса, то сделать это можно следующим образом:
Запрос = Новый HTTPЗапрос("/get?AccessToken=" + ТекстТокена);
Если необходимо передать токен доступа при запуске клиентского приложения системы «1С:Предприятия», то сделать это с использованием командной строки запуска. Команда AccessToken предназначена для передачи в клиентское приложение JWT в текстовом виде. Для того, чтобы такое действие имело смысл, для пользователей информационной базы должна быть включена возможность аутентификации токеном доступа.
Смотри также:
`79; Параметры пользователя информационной базы (см. здесь).
`79; Файл default.vrd (см. здесь).
Общее описание обработки
Обработка позволяет сформировать токен доступа для сервиса и пользователя информационной базы.
1. Выберете сервис, пользователя информационной базы.
2. Укажите, либо сформируйте ключ подписи.
3. Укажите время жизни токена в секундах.
4. Нажмите "Сформировать" для создания нового токена и текста файла настроек.
У пользователя, для которого формируется токен, обязательно указать возможность авторизации с использованием токенов доступа
У пользователя, для которого формируется токен, обязательно указать возможность авторизации с использованием токенов доступа
Пример настройки конфигурационного файла default.vrd
Пример использования токена в простом get запросе
Замечание: Тестирование проводилось на релизе платформы 1С:Предприятие 8.3 (8.3.23.1912).